Reveal v1.6.1 破解

很多软件试用期结束后,基本流程都是会弹出一个对话框,然后告诉你试用期已经结束,底下最多来两个按钮,一个是 退出 ,另一个是 购买 。点退出就直接退出程序,点购买就浏览器跳转到他们官网的购买页面。由于该对话框强制获取了软件的焦点,所以不点任意一个按钮的话是没有办法做其他操作的。下面是 Reveal 1.6.1 版本的破解过程:

绕过过期对话框逻辑

现在理清了问题,再来看有哪些方案可以绕过这个对话框:

  1. 因为有试用期,那么启动软件后肯定有判断是否过期的逻辑:

    从用户沙盒里取出第一次使用软件的时间点,然后和当前的时间点做个差值,最后拿这个差值和试用期时间做个比较,然后根据比较结果判断是否过期。

    所以这种方案就是,反汇编后,猜测一些关键字: trialexpire 等。通过这些关键字搜索相应的可能的函数,然后再在判断是否过期的 if-else 语句里置反即可。

  2. 从弹出的过期对话框入手。之所以不能使用软件了,就是因为对话框吸引了应用的焦点,所以我们只需要隐藏掉对话框即可。但是 用汇编写隐藏对话框 的难度太大,可以尝试从展示对话框的逻辑那里置反。那就先通过关键字找到该对话框的 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。