很多软件试用期结束后,通常都是会弹出一个对话框,然后告诉你试用期已经结束,底下再来两个按钮,一个是退出,另一个是购买。点退出就直接退出程序,点购买就浏览器跳转到他们官网的购买页面。由于该对话框强制获取了软件的焦点,所以不点任意一个按钮的话是没有办法做其他操作的。
很早以前使用的试用版Reveal就遇到了这个问题,当时心血来潮,想重新温习一下破解过程,决定自己动手试试。下面便是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到新文件所在目录,然后执行
codesign -f -s gdb-cert Reveal
其中的gdb-cert就是上图创建证书的时候取的名字,Reveal就是你新生成的二进制文件的名字。
绕过自身codesign验证
codesign做好后,备份下原来的二进制文件,然后替换原来的。启动Reveal会弹出错误提示,说是codesign不对,然后直接退出了:

这是因为Reveal做了自身验证,就是防止代码被更改,不过这个验证也是自己业务逻辑的验证,所以仿照第一步的方法,根据相关关键字搜索相关代码。我用的关键字是codesign,果然就搜到了一个名叫IBAAppDelegate verifyCodeSignature的函数:

点进去根据伪代码能很轻松的就找到if逻辑:


可以置反if逻辑,不过我们这里更简单,直接jmp到最后:

刚好保持位数一致。
这下再导出、codesign、替换,最后运行OK。
其实绝大部分的试用软件都可以通过这种方法达到破解的目的,只要有足够的耐心、细心再加一点点的运气~