Reveal 1.6.1试用版破解技巧

in #crack8 years ago

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

很早以前使用的试用版Reveal就遇到了这个问题,当时心血来潮,想重新温习一下破解过程,决定自己动手试试。下面便是Reveal 1.6.1版本的破解过程:

绕过过期对话框逻辑


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

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

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

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

  • 从弹出的过期对话框入手。之所以不能使用软件了,就是因为对话框吸引了焦点,所以我们只需要隐藏掉对话框即可。但是用汇编写隐藏对话框的难度太大,可以从展示对话框的逻辑那里置反即可。不过直接搜出展示逻辑不大可能,我们就先通过关键字找到该对话框的viewcontroller,然后在里面随便设个断点,然后启动调试,等跑到断点处时,查看调用堆栈,这样就能找到show这个过期view的逻辑在哪个函数里了,然后进那个函数将show的逻辑置反。虽然数据里依旧是过期的,但是却能和正常软件一样使用了。

我这里选择的是第2种方法,在IBATrialModeReminderWindowController windowDidLoad里面随便找一处设个断点。然后找到并将显示的if逻辑置反(Alt+A编辑汇编命令)。注意修改汇编代码的时候要保持byte位数与改之前一致,空出来的位置用nop填充,但是不能多出byte了,多了很容易就会导致软件直接crash。

添加codesign



改好过期逻辑后,⌘+⇧+E保存修改后的二进制文件。这时会弹出下面的提示:
20934E1E-2F17-4550-AAD1-B5A5375F561C.png

这里选择,我们要自己添加一个codesign,先自己随便建一个根证书,钥匙串访问 => 证书助理 => 创建证书,然后按下图设置后一路下一步狂点。
4ABC60C4-3B3F-468D-A902-B880F2B9DDA8.png

后续具体操作可参照这里

证书弄好后,就要给我们新修改的文件加codesign了,打开终端,cd到新文件所在目录,然后执行

 codesign -f -s gdb-cert Reveal 



其中的gdb-cert就是上图创建证书的时候取的名字,Reveal就是你新生成的二进制文件的名字。

绕过自身codesign验证



codesign做好后,备份下原来的二进制文件,然后替换原来的。启动Reveal会弹出错误提示,说是codesign不对,然后直接退出了:
8AE2396D-0769-4686-A3DF-C6BB82AE56E8.png

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

点进去根据伪代码能很轻松的就找到if逻辑:
992C6075-1B39-4AC7-8307-B67358A2283B.png

9032C90C-0DDF-461C-AEEA-7CFC1A41C2CA.png

可以置反if逻辑,不过我们这里更简单,直接jmp到最后:
7F0DCDBC-154F-4B71-BF7B-29BBEECE42FC.png

刚好保持位数一致。

这下再导出、codesign、替换,最后运行OK。

其实绝大部分的试用软件都可以通过这种方法达到破解的目的,只要有足够的耐心、细心再加一点点的运气~