破解 Sublime Text 4215

1 TL;DR

1
2
3
4
5
6
7
8
9
10
# 应用 x64 补丁
perl -pi -e 's/\x0f\xb6\x51\x0c\x83\xf2\x01/\xc6\x41\x0c\x01\x31\xd2\x90/' \
/Applications/Sublime\ Text.app/Contents/MacOS/sublime_text

# 应用 arm64 补丁
perl -pi -e 's/\x09\x31\x40\x39\x4a\x00\x80\x52\x3f\x01\x00\x71\xe9\x13\x8a\x1a/\x29\x00\x80\x52\x09\x31\x00\x39\x09\x00\x80\x52\x4a\x00\x80\x52/' \
/Applications/Sublime\ Text.app/Contents/MacOS/sublime_text

# 重新签名
sudo codesign --sign - --force --deep /Applications/Sublime\ Text.app

2 序

因为一直用着的 Sublime Text 又弹窗更新了,所以只好撸一撸这个新版了。

这次懒得上网搜了,直接自己从零开始,把 x64 和 arm64 的部分都研究一下。

3 破解过程

3.1 反汇编

首先还是导出 x64 和 arm64 平台的二进制文件:

1
2
3
4
5
lipo -thin x86_64 -output st4215-x64 \
/Applications/Sublime\ Text.app/Contents/MacOS/sublime_text

lipo -thin arm64 -output st4215-arm64 \
/Applications/Sublime\ Text.app/Contents/MacOS/sublime_text

然后进行反汇编:

1
2
3
4
# 使用 objdump 可以导出 Intel 语法的 x86-64 汇编指令
objdump -d --x86-asm-syntax=intel st4215-x64 >st4215-x64.asm

objdump -d st4215-arm64 >st4215-arm64.asm

3.2 破解 x64 版本

先来破解 x64 版本,因为我平时工作用的还是 x64 架构的 macOS,方便验证。

用 Sublime Text 打开 st4215-x64.asm,搜索 edit_window.*on_update_state,就能看到熟悉的代码:

不同的是,之前注册状态存在偏移 5 字节的位置,这次存在了偏移 0xc 字节的位置,看来结构体有了点儿变化。

这次也按照同样的思路,将这两句汇编指令:

1
2
movzx edx, byte ptr [rcx + 0xc]   ; 0f b6 51 0c
xor edx, 0x1 ; 83 f2 01

修改为:

1
2
3
mov byte ptr [rcx + 0xc], 1       ; c6 41 0c 01
xor edx, edx ; 31 d2
nop ; 90

x64 版本破解补丁:

搜索二进制数据:
0f b6 51 0c 83 f2 01

替换为:
c6 41 0c 01 31 d2 90

打补丁并重新签名后,再次运行 Sublime Text,显示已注册:

3.3 破解 arm64 版本

再打开 st4215-arm64.asm,并搜索 edit_window.*on_update_state,找到同样逻辑的代码:

将这 4 句汇编指令:

1
2
3
4
ldrb w9, [x8, #0xc]   ; 09 31 40 39
mov w10, #0x2 ; 4a 00 80 52
cmp w9, #0x0 ; 3f 01 00 71
csel w9, wzr, w10, ne ; e9 13 8a 1a

替换为:

1
2
3
4
mov w9, 1             ; 29 00 80 52
strb w9, [x8, #0xc] ; 09 31 00 39
mov w9, 0 ; 09 00 80 52
mov w10, 2 ; 4a 00 80 52

arm64 版本破解补丁:

搜索二进制数据:
09 31 40 39 4a 00 80 52 3f 01 00 71 e9 13 8a 1a

替换为:
29 00 80 52 09 31 00 39 09 00 80 52 4a 00 80 52

4 其他系统

似乎 x64 版本的破解补丁,可以用于 Windows 和 Linux 平台的 Sublime Text,欢迎验证。