Part1 前言
大家好,我是ABC_123。之前分享过一篇Ollydbg逆向分析入门教程《第50篇:使用OD逆向破解流光Fluxay扫描器各种限制》,这篇文章主要讲解了在使用OD逆向分析时,如何按照编程人员的思维去解除软件的各种限制。方法有点麻烦,而且还有一处软件过期校验没有完美去除掉。
本期除了介绍通过段首关键call解除软件过期的方法以外,还会介绍一种通过查找API函数下断点的方法。假设软件是c++写的,程序读取文件一般就会调用到ReadFile函数,程序退出一般就会调用到ExitProcess函数,那么我们完全可以在这些函数附近下断点,快速定位到关键跳及关键call,从而解除软件限制。
Part2 逆向分析过程
-
去除软件的过期校验
首先看一下流光2000的这个“软件过期”窗口,在软件运行时,有时候就会弹出来这个界面,进度条走到头软件就会自动退出。上期我们通过改关键跳和nop的方法解除限制,但是不完美,偶尔还会提示软件到期,这次我们尝试完美解除这个限制。
首先我们用“智能搜索”插件试试查找字符串“到期”。
然后把找到的结果都下断点。
使用OD重新载入软件,很快定位到了弹出“软件过期窗口”的关键代码,但是在此代码附近反复下断点调试,各种修改关键跳,各种nop都行不通。
那接下来怎么办呢?不妨在这段汇编代码的段首处下断点,重新跟一下汇编代码。如下图所示,标红的00470810是段首位置,从这里开始分析汇编代码,我们发现了“GET / HTTP/1.1rn”字样,Host头被设置为www.sina.com.cn,推测作者是请求新浪网址的返回时间与系统时间来做对比进行软件过期校验的。
F8单步走执行到004708A9位置(如下图箭头所示),这里有一个关键call,执行速度非常慢,推测这是发起http请求的代码。
这里遇到了最关键的代码test eax,eax,经过分析发现,call 00484100处代码逻辑是这样的,软件过期则eax寄存器等于00000000,软件不过期则eax寄存器等于00000001,因此这里是关键call的位置。
接下来怎么办呢?我直接把call 00484100对应的函数代码给改掉,直接将函数的代码改为mov eax,0x1; retn 0x8; 用retn 0x8后,该函数中后面的代码就都不执行了。
把关键call改掉之后,继续运行软件,发现流光2000的时间校验完美绕过。
-
用户调查表断点定位
首先使用PEID查一下,发现是VC++6.0写的,因此我们可以查找VC++的对话框函数来下断点。
为了定位这个用户调查表,需要先讲一下有关VC++对话框的API函数基础知识。
对话框分为两类:模态对话框和非模态对话框。区别是模态对话框不允许在不同窗口之间切换,非模态对话框可以;创建模态对话框是由调用DialogBoxParam 函数实现的,创建非模态对话框是由调用CreateDialogParam函数实现。相同点是这两个函数的第一个参数都是hInstance,也就是对话框的实例句柄。
DialogBoxParam( HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);
CreateDialogParam( HINSTANCE hInstonce, LPCTSTA IpTemplateName, HWND hWndParent, OLGPAOC lpDialogFunc, LPARAM dwlniParam);
试想一下,在call一个函数前,汇编代码肯定会这样写:push 0x地址 ,意思是把0x地址的值入栈,这里0x地址对应的值就是对话框的实例句柄hInstonce的值。
这时候使用工具eXeScope打开软件的主程序FluXay2.exe,挨个点击找到标题为“流光II用户调查表”对话框,记下对应的数值251,这个10进制数值就是这个对话框的实例句柄。
10进制251对应的16进制数是0Xfb,打开OD重新载入程序,查找所有命令push 0xfb下断点
经过查找发现push 0xFB 的位置在00407380,在此下断点,然后在段首00407360处也下断点。
右键点击“反汇编窗口中跟随”,这一步是为了查找到关键call,也就是查找到哪一个call调用了此对话框。
在返回的地址附近的两个call都下上断点。
经过动态调试分析,把0043BF92处的代码给nop掉,即可去掉该软件的用户调查对话框。
软件打开后,不再提示用户调查对话框了。
Part3 总结
1. 当断点附近代码的关键跳、关键call都不奏效时,可以尝试从段首开始分析,把关键call改掉,这样的逆向修改一劳永逸解除限制。
2. 解除软件限制有各种方法,在不同的软件中,各有优缺点,需要灵活使用。
公众号专注于网络安全技术分享,包括APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,每周一篇,99%原创,敬请关注。
Contact me: 0day123abc#gmail.com(replace # with @)
原文始发于微信公众号(ABC123安全研究实验室):第52篇:OD使用教程2-设置API函数断点去除软件对话框及过期校验