如何破解 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 被破解。