1 学习目标
WinRAR5.40(64位)的弹框广告去除,由于我的系统为x64版本,所以安装了WinRAR(x64)版本。
OD无法调试64位的程序,可以让我熟悉x64dbg进行调试的界面。
其次是这玩意儿真是太蛋疼了,无休止弹广告。
2 破解思路
1)偷梁换柱
修改汇编函数段首为返回值(本次逆向破解采用的方法)
2)NOP掉整个函数内容
3 涉及知识
x64dbg工具快捷键与OD无异
F9:运行
bp CreateWindowExW:在x64dbg底部输入这行命令,对使用CreateWindowExW函数的位置断点。
CreateWindowExW:该函数创建一个层叠式窗口、弹出式窗口或子窗口。
参数:
HWND CreateWindowEx(
DWORD DdwExStyle, //窗口的扩展风格
LPCTSTR lpClassName, //指向注册类名的指针
LPCTSTR lpWindowName, //指向窗口名称的指针
DWORD dwStyle, //窗口风格
int x, //窗口的水平位置
int y, //窗口的垂直位置
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hWndParent, //父窗口的句柄
HMENU hMenu, //菜单的句柄或是子窗口的标识符
HINSTANCE hInstance, //应用程序实例的句柄
LPVOID lpParam //指向窗口的创建数据
);
4 实现流程
【软件名称】:WinRar
【软件版本】:5.4
【外壳保护】:无
【操作系统】:Windows 10
既然是弹出窗口,首先要知道弹窗窗口的窗口类名,我使用的是VS2015里自带的工具Spy++ x64。
图1 调出Spy++ x64
图2 使用Spy++64查看WinRAR弹出的窗口类名为RarReminder
通过上诉步骤得到WinRAR的类名为RarReminder后,使用x64dbg工具载入WinRAR.exe。在命令的地方使用断点命令【bp CreateWindowExW】,在CreateWindowEx函数断下断点。F9运行到各个断点时观察广告窗口弹出的状态变化。
图3 使用断点命令【bp CreateWindowExW】
F9运行到出现RarReminder字样的地方,x64dbg这款工具还具备查看断点触发的次数的功能,通过【断点】选项卡看到断点共触发了30次才到这里。
图4 断点触发的次数
在堆栈窗口在call指令的地方按回车键返回到用户层函数。
图5 堆栈窗口信息
返回到00007FF6780AD4E8这个地址处,向上看会看到“http://ad.winrar.com.cn/show_40.html?L=7&bl=7&v=540&a=64&src=wrr”这个很明显的广告地址。
汇编函数的代码如下:
00007FF6780AD077 | int3 |
00007FF6780AD078 | mov qword ptr ss:[rsp+8],rbx |
00007FF6780AD07D | mov qword ptr ss:[rsp+10],rbp |
00007FF6780AD082 | mov qword ptr ss:[rsp+18],rsi |
00007FF6780AD087 | push rdi |
00007FF6780AD088 | push r12 |
00007FF6780AD08A | push r13 |
00007FF6780AD08C | push r14 |
00007FF6780AD08E | push r15 |
00007FF6780AD090 | mov eax,1080 |
00007FF6780AD095 | call winrar.7FF6780F8BD0 |
00007FF6780AD09A | sub rsp,rax |
00007FF6780AD09D | mov rax,qword ptr ds:[7FF678148200] |
00007FF6780AD0A4 | xor rax,rsp |
00007FF6780AD0A7 | mov qword ptr ss:[rsp+1070],rax |
00007FF6780AD0AF | xor r15d,r15d |
00007FF6780AD0B2 | mov sil,cl |
00007FF6780AD0B5 | cmp byte ptr ds:[7FF67819A204],r15b |
00007FF6780AD0BC | je winrar.7FF6780AD0C6 |
00007FF6780AD0BE | test dl,dl |
00007FF6780AD0C0 | je winrar.7FF6780AD55D |
00007FF6780AD0C6 | or rbp,FFFFFFFFFFFFFFFF |
00007FF6780AD0CA | mov r12d,1 |
00007FF6780AD0D0 | cmp dword ptr ds:[7FF678145EE4],r15d |
00007FF6780AD0D7 | je winrar.7FF6780AD127 |
00007FF6780AD0D9 | mov rcx,r15 |
00007FF6780AD0DC | lea rbx,qword ptr ds:[7FF678145ED0] | 7FF678145ED0:"8g3#0w1$5r7%2ta"
00007FF6780AD0E3 | mov r9,r15 |
00007FF6780AD0E6 | mov r8d,480 |
00007FF6780AD0EC | xor byte ptr ds:[r9+rbx],cl |
00007FF6780AD0F0 | movabs rax,AAAAAAAAAAAAAAAB |
00007FF6780AD0FA | mul rcx |
00007FF6780AD0FD | add rcx,3 |
00007FF6780AD101 | add r9,r12 |
00007FF6780AD104 | shr rdx,1 | rdx:L"RarReminder"
00007FF6780AD107 | add rcx,rdx | rdx:L"RarReminder"
00007FF6780AD10A | and ecx,FFFFFF |
00007FF6780AD110 | cmp r9,r8 | r8:L"WinRAR"
00007FF6780AD113 | jb winrar.7FF6780AD0EC