Windows逆向学习笔记——WinRAR去除广告

大家应该很熟悉winrar的广告弹窗,每次使用都需要手动关闭广告,不胜其烦。
如何去除广告呢?首先想到的方法,就是在创建广告窗口上做手脚。猜测winrar程序可能调用了 CreateWindow 来创建窗口,那么是不是可以在创建广告窗口时设置窗口样式为隐藏呢?
基于上面的猜想,通过动态调试,找到创建广告窗口的代码。

使用的WinRAR版本:5.80(64位)


第一步,先用spy++捕捉广告窗口,查看窗口标题是“WinRAR”,窗口类名是"RarReminder"。
Windows逆向学习笔记——WinRAR去除广告

第二步,用x64dbg打开WinRAR程序,在"winrar.exe"模块查找创建窗口的API,最后找到 CreateWindowExW,下断点,运行程序。
这个API会断下很多次,要等到窗口类名等于上一步中查找到的"RarReminder"时,才需要停下。最终,找到创建广告窗口的代码如下:
Windows逆向学习笔记——WinRAR去除广告

第三步,修改 CreateWindowExW 的窗口样式。
查看MSDN,这个API的第四个参数dwStyle就是指定窗口样式,对应上图中的 R9 寄存器,值是0x16CB0000。在winuser.h中定义了窗口样式属性,发现WS_VISIBLE表示显示窗口,值是0x10000000,正好对应 R9 中的高4位,所以测试修改 R9 寄存器值为0x6CB0000,运行程序,正常启动,而且没有了广告窗口。

接下来,就是怎么样让程序每次启动都使用0x6CB0000的样式创建广告窗口。
从第二步的代码中,可以看到 r9d 寄存器中的值来源于esi,再往上面跟踪代码,看到esi的值来源如下:
Windows逆向学习笔记——WinRAR去除广告
从上面的代码看出,窗口样式是写死在代码中的,所以只要修改winrar.exe程序的0x13FE42391(VA)处的代码,把0000C816改成0000C806就可以了。


第四步,给winrar.exe打补丁。
在x64dbg中查看winrar.exe的模块基址是0x13F560000,
所以打补丁位置的 RVA = 0x13FE42391 - 0x13F560000 = 0xA2391。
对应PE的文件偏移 FA = 0xA1791,用CFF查看代码,并修改“00 00 C8 16”为“00 00 C8 06”,保存文件,再次运行winrar,广告窗口就不见了,完成。

Windows逆向学习笔记——WinRAR去除广告