很多软件试用期结束后,基本流程都是会弹出一个对话框,然后告诉你试用期已经结束,底下最多来两个按钮,一个是 退出 ,另一个是 购买 。点退出就直接退出程序,点购买就浏览器跳转到他们官网的购买页面。由于该对话框强制获取了软件的焦点,所以不点任意一个按钮的话是没有办法做其他操作的。下面是 Reveal 1.6.1 版本的破解过程:
绕过过期对话框逻辑
现在理清了问题,再来看有哪些方案可以绕过这个对话框:
因为有试用期,那么启动软件后肯定有判断是否过期的逻辑:
从用户沙盒里取出第一次使用软件的时间点,然后和当前的时间点做个差值,最后拿这个差值和试用期时间做个比较,然后根据比较结果判断是否过期。
所以这种方案就是,反汇编后,猜测一些关键字:
trial
、expire
等。通过这些关键字搜索相应的可能的函数,然后再在判断是否过期的if-else
语句里置反即可。从弹出的过期对话框入手。之所以不能使用软件了,就是因为对话框吸引了应用的焦点,所以我们只需要隐藏掉对话框即可。但是 用汇编写隐藏对话框 的难度太大,可以尝试从展示对话框的逻辑那里置反。那就先通过关键字找到该对话框的 viewcontroller,然后在里面随便设个断点,然后启动调试,等跑到断点处时,查看调用堆栈,这样就能找到 show 这个过期 view 的逻辑在哪个函数里了,然后进那个函数将 show 的逻辑置反。虽然数据里依旧是过期的,但是却能和正常软件一样使用了。
我这里选择的是第 2 种方法,在
IBATrialModeReminderWindowController windowDidLoad
里面随便找一处设个断点。然后找到并将显示的 if
逻辑置反(Alt
+A
编辑汇编命令)。注意修改汇编代码的时候要保持
byte 位数与改之前一致,空出来的位置用 nop
填充,但是不能多出 byte,多了很容易就会导致软件直接 crash。
添加 codesign
改好过期逻辑后,⌘+⇧+E
保存修改后的二进制文件。这时会弹出下面的提示:
这里选择 否
,我们要自己添加一个
codesign
,先自己随便建一个根证书,钥匙串访问
=> 证书助理
=>
创建证书
,然后按下图设置后一路下一步
狂点。
后续具体操作可参照 这里。
证书弄好后,就要给我们新修改的文件加codesign了,打开终端,cd到新文件所在目录,然后执行
1
codesign -f -s gdb-cert Reveal
其中的 gdb-cert
就是上图创建证书的时候取的名字,Reveal
就是你新生成的二进制文件的名字。
绕过自身 codesign 验证
codesign 做好后,备份下原来的二进制文件,然后替换原来的。启动 Reveal 会弹出错误提示,说是 codesign 不对,然后直接退出了:
这是因为 Reveal
做了自身验证,就是防止代码被更改,不过这个验证也是自己业务逻辑的验证,所以仿照第一步的方法,根据相关关键字搜索相关代码。我用的关键字是
codesign
,果然就搜到了一个名叫
IBAAppDelegate verifyCodeSignature
的函数:
点进去根据伪代码能很轻松的就找到 if
逻辑:
可以置反 if
逻辑,不过我这里更简单,直接
jmp
到最后:
刚好保持位数一致。
这下再导出可执行的二进制、codesign、替换,最后运行 OK。