参考网址:https://bbs.pediy.com/thread-223105.htm
软件下载网址:http://www.winrar.com.cn/download-55032scp.html
本文前言部分摘自蓝色淡风的文章《一次去除广告弹窗的经历》。
一、前言
逆向一个程序,大致有3种方法。
1. 自上而下分析方法
从程序入口点(OEP)开始分析,模拟程序运行的整个流程,对程序进行分析,但是这种方法一般不适用于比较大的程序,(如果一个程序有几十兆,几百兆,乃至更大,按这种方法就不道要到猴年马月才能完成了,呵呵)
2. 自下而上分析
运行程序,观察其行为特征,找到关键API,栈回溯分析,比如程序弹出了一个对话框,程序就很有可能用了MessageA/W,然后 从弹框栈回溯分析;如果找到窗口回调函数,也可以从窗口回调函数开始分析
3. 字符串分析
根据弹窗提示的字符串,在调试器中查找,定位关键代码,再分析
二、分析
使用spy++获取广告窗口的句柄,标题名,类名等信息。
图1:广告窗口信息
弹出来的广告窗口不是模态对话框,所以不寻找MessageBox以及DialogBox,寻找CreateWindow下断点。
bp CreateWindowExA
bp CreateWindowExW
F9运行多次之后,断在了窗口名为WinRAR,类名为RarReminder的窗口创建处,此函数会创建广告窗口。
图:2:窗口名为WinRAR类名为RarReminder创建广告窗口
Alt+k查看堆栈,找到此函数在主模块中的位置。
图3:广告弹出窗口在主模块中的位置
在0x4A4DD5处下断点,重新加载程序之后,断到了0x4A4DD5,此时,“winrar(评估版本)”的窗口已经弹出了,单步执行之后,发现广告窗口弹出,确定此处函数为弹出广告窗口的函数。
图4:弹出广告窗口
参考文章中是在参数压栈开始处修改代码,JMP到了函数调用结束。我直接把这个函数调用NOP掉了,保存之后,打开软件,已经没有了广告弹窗。
三、总结
本人从官网上下载的个人免费版,只有广告弹窗,无需购买,因此去掉广告弹窗之后就可以正常使用了。
此类弹窗的解决方法类似,找到弹出窗口的代码,JMP或是NOP掉。