1.png (61.96 KB, 下载次数: 0)
下载附件
2020-11-14 11:42 上传
一、分析前思考或准备:
1. 重启验证,解决了它等于解决了注册问题。
2. 关键代码被VM了,说明进入VM的地方即可能是关键的地方。
3. 去除exe的重定位,防止随机基址影响分析(使PE工具CFF Explorer去除)。
4. X64dbg。
温馨提示:不同机器,不同版本X64dbg,文中部分内容可能不同!电脑内存要大,x64dbg这厮跟踪和分析数据特别吃内存……
二、定位VM位置。
1.内存布局中,找到VM段,下内存访问断点(同时注意记下vm段的基址)。然后运行程序,断在了这个VM段的地方。
2.png (47.79 KB, 下载次数: 0)
下载附件
2020-11-14 11:43 上传
3.png (34.14 KB, 下载次数: 0)
下载附件
2020-11-14 11:43 上传
2.堆栈回溯,找VM入口(也可不用找)。在“调用堆栈”窗口中,找最近的一个用户模块的调用call。(如果堆栈显示较少,可右键,单击“显示可能的调用堆栈帧”显示更多调用)跟随过去,往下翻找(有点多)跳转到VM段的jmp大跳转……
应该是这里:
4.png (30.32 KB, 下载次数: 1)
下载附件
2020-11-14 11:44 上传
当然,也可在CPU窗口,右键,搜索-当前模块-命令,快键ctrl+shift+f,输入命令jmp 0x 00000001403C13AF即RIP暂停在VMP段处的地址。找到入口后,下好断点。
3. 确定VM的出口,应该就是入口下方一大堆int3后的正常代码了。下好断点!
5.png (44.47 KB, 下载次数: 0)
下载附件
2020-11-14 11:46 上传
4. 重复上面下vmp段内存断点的方法,找到第2、3次的VM入口点和出口点。分别是:
6.png (31.77 KB, 下载次数: 0)
下载附件
2020-11-14 11:47 上传
三、确定程序注册的关键位置。
通过以上的操作知道,有3次进入VM段,说明这3个地方是作者不愿意破解者看到的,但哪一处才是重要的呢?我们既然3个地方出入口都下好了断点,重新运行一下,看看未注册提示框在哪一次出入VM的时候弹出,基本就可以确定那一次就是较为关键,可以优先分析突破的了(如果启动软件没有弹出到期未注册的提示框可以改系统时间让其弹出)。
通过运行,可以发现,未注册过期提示框是在第2次VM出口后未进入第3次VM时弹出,由此基本可以确定关键的判断在第2次VM中了。切换断点窗口,禁用第1次出入口和第3次出入口的断点。仅保留第2次VM入口和出口的断点。
四、跟踪vm代码。
重新载入并运行程序,使之暂停在第2次VM入口点断点处,单步一次,进入VM中。切换到“跟踪”窗口,右键—启动运行跟踪,设置好跟踪文件保存位置。然后单击菜单“追踪”—“步进直到条件满足”。可将最大单步次数设置到最大。
7.png (44.83 KB, 下载次数: 0)
下载附件
2020-11-14 11:48 上传
设置好了,单击确定,然后静静等吧(时间取决于电脑性能)……
8.png (19.97 KB, 下载次数: 0)
下载附件
2020-11-14 11:49 上传
等到暂停在第2次VM出口的断点处,约3A14ED行记录。切换到“跟踪”窗口,右击,停止运行跟踪……在跟踪记录的结尾不远处,我们看到一个非常有趣的注册表键,这个键就是记录使用期的:[table][tr][td] 3A14DF