在日常工作和学习中,我们会遇到各种恶心的弹窗和广告,关也不了,删也删不掉,如何利用逆向的方式,彻底解决呢?

声明​:本文仅为技术研究和逆向工程学习之用。请尊重软件著作权,在合法授权范围内使用软件。本文所述技术手段不应被用于侵犯他人知识产权或获取非法利益。

使用某知名下载软件的的用户经常会遇到一个弹窗提示:

image.png

初步分析

搜索弹窗字符串

使用 strings 命令在 主程序.exe 中搜索弹窗中的关键字:

strings 主程序.exe | grep -i "executivefile\\|damaged\\|the main"

image.png

结果什么都找不到。

即使在所有 DLL 文件中搜索编码后的宽字符串(UTF-16 LE),同样一无所获:

strings -e l 主程序.exe | grep -i "executive\\|damaged"

这说明 弹窗文本被加密存储了,不是明文。

转向代码分析

既然找不到明文字符串,就转向分析代码。主程序.exe 是一个标准的 ​32位 PE 可执行文件​:

objdump -x 主程序.exe | head -40

image.png

导入的关键 API:
列出所有导入的 DLL 及其函数。

objdump -p 主程序.exe | awk '/DLL Name:/{dll=\$NF} /vma:/{print dll, \$NF}'

image.png

这些 API 提示了弹窗流程:先获取自身文件名 → 打开自身文件 → 验证完整性 → 若验证失败则弹出 MessageBoxW。

定位加密的弹窗字符串

发现 XOR 加密

遍历所有可能的 XOR 密钥来搜索字符串片段。用 Python 每秒扫描数十万个字节,最终命中:

for key in range(256):  
  decoded = bytes(b ^ key for b in data)  
  if b'The main' in decoded:     
    print(f"Found! XOR key = 0x{key:02x}")

输出​:

Found! XOR key = 0x3d

弹窗文本使用 ​单字节 XOR 加密,密钥 = 0x3D​(即 ASCII 字符 =)。

解密弹窗文本

加密字符串位于文件偏移 <span leaf="">0x3591A4</span>(位于 <span leaf="">.data</span> 段),解密后的完整内容:

image.png

整个弹窗对话框的字符串拼在一整块加密内存中,共约 9000+ 字节。

字符串引用定位

解密字符串的 VA(虚拟地址)为 <span leaf="">0x0075B5A4</span>。在代码段中搜索对这个地址的引用:

python3 -c "
# 搜索 push 0x75b5a4 模式
target = bytes([0xa4, 0xb5, 0x75, 0x00])
pos = data.find(target)print(f'引用位置: file 0x{pos:06x}, VA 0x{pos+0x400000:08x}')
"

找到唯一引用点:VA 0x004A86FA,位于方法CDuplicateDownloadsDlg::virtual_280内部。

定位弹窗触发调用链

弹窗函数:fcn.004A8720

使用 radare2 分析:

r2 -A 主程序.exe > afl | grep "0x4a87"

image.png

函数fcn.004A8720(大小约 1793 字节)就是构造并显示弹窗的完整函数。

调用链追踪

fcn.004648d0 (检测函数) 
   │    
   ├─ 检查某个条件
   └─ [条件为真时]
        │
        ├─ 0x0046499b: lea ecx, [缓冲区]
        ├─ 0x004649a1: call fcn.004A8720  ← 🎯 目标!
        └─ 弹窗显示

该函数的调用者:

fcn.00482DB0 @ +0x3CB
fcn.0048ACB0 @ 0x48B7D4  
CDownloaderDlg case.5199 @ +0x780
COleListCtrlDropTarget @ 0x504204

关键指令定位

弹窗触发的关键指令位于:

VA:       0x004649A1
文件偏移: 0x00063DA1  (.text 段内)
原始字节: E8 7A 3D 04 00   →   call fcn.004A8720

补丁方案

方案:NOP 掉弹窗调用

将调用弹窗函数的 5字节 call 指令 替换为 ​5个 NOP(0x90)​:
在 010 Editor 中打开源文件,Ctrl+G跳转打开 IDMan.exe 后,按 Ctrl+G,输入十六进制偏移值063DA1。完成跳转。

image.png

光标会直接跳到该字节位置,你会看到:E8 7A 3D 04 00选中这 5 个字节,手工输入:90 90 90 90 90

image.png

完成后,点击保存。
接下来,运行程序,你会发现不再有烦人的弹窗了。

最后修改:2026 年 07 月 07 日
如果觉得我的文章对你有用,请随意赞赏