实验步骤
1. 观察分析目标的程序特征
广告窗口是非模态的,可以与其他窗口交互

2. 使用Spy++查看相关特征参数

3. 动态调试广告弹窗代码,定位启动代码调用点

看到使用的是CreateWindowExW
4. 添加API断点调试,查找广告弹窗代码
先添加API断点

然后断点调试,反复F9
看到与上面spy发现的窗口特征一样,停止

找到RET指令,双击

然后找到了新建窗口的代码

5. 修改并制作补丁
CreateWindowExW需要使用12个参数来执行,会有12个PUSH

我们把第一条PUSH指令改成跳转到第13条指令后面一条指令的地址的JMP指令,可以绕过这个函数的执行

6. 制作补丁,持久化保存PE可执行文件
我们修改的内存里面加载的代码,需要持久化
需要编辑二进制文件
地址转换公式:文件偏移地址=RVA+PointerToRawData-VirtualAddress

RVA:A17BE
文件偏移:A0BBE
可以用x32dbg来看PE文件的sections

可以看到:
PointerToRawData:400
VirtualAddress: 1000
验算:
文件偏移 = RVA + PointerToRawData - VirtualAddress
= A17BE + 400 - 1000
= A0BBE
与上面一致
也可以在这里很方便的看到

然后我们打补丁

测试
发现不弹了
实验结果
- 广告窗口新建指令地址,即CreateWindowEx指令地址:00A417DC。
- .text节VirtualAddress地址:00001000。
- 如果实验中使用HxD等二进制文件编辑器修改,需要打开文件后在文件偏移位置为A0BBE的地方,修改数据为FF 15 A0 B6 AA 00。
补充:

思考
条件断点


整半天都不知道这个语法是什么,不弄了