如何破解 Tower 2
2015年6月23日
预备工具:
- Hopper Disassembler: 用于反汇编
- Hex Fiend: 用于修改二进制文件
注意:由于我不知道如何使用 Hopper Disassembler 修改二进制文件,因此我需要用 Hex Fiend, 这里 Hex Fiend 不是必须的,任何十六进制编辑器都可以使用。
首先,使用 Hopper Disassembler 打开Tower.app/Contents/Frameworks/FNLicensing.framework/Versions/A/FNLicensing, 搜索FNProductStatus_productLicense方法,定位到此方法,记录下前三个汇编指令的机器码,比如
| 位置 | 机器码 | 汇编 | 变量 |
|---|---|---|---|
| 000000000000c410 | 55 | push | rbp |
| 000000000000c411 | 4889E5 | mov | rbp, rsp |
| 000000000000c414 | 488B05ADB40100 | mov | rax, qword [ds:_OBJC_IVAR_$_FNProductStatus._productLicense] |
则二进制机器码为554889E5488B05ADB40100.
然后,使用 Hex Fiend 打开 Tower.app/Contents/Frameworks/FNLicensing.framework/Versions/A/FNLicensing ,搜索 554889E5488B05ADB40100,如果只有一处,则直接替换为 31C0FFC0C38B05ADB40100. 这里的关键是将554889E548 替换为 31C0FFC0C3, 后面的机器码是相通的,增加后面的机器码是为了尽可能定位到修改的位置。替换后的程序结构为
| 位置 | 机器码 | 汇编 | 变量 |
|---|---|---|---|
| 000000000000c410 | 31C0 | xor | eax,eax |
| 000000000000c412 | FFC0 | inc | eax |
| 000000000000c414 | C3 | ret | |
| 000000000000c415 | 8B05ADB40100 | mov | eax, dword [ds:_OBJC_IVAR_$_FNProductStatus._productLicense] |
相当于直接加入了一个return屏蔽了这个函数。
保存该文件,则 Tower 2 被破解。
