首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【逆向实战】去除软件弹窗

【逆向实战】去除软件弹窗

作者头像
逍遥子大表哥
发布2026-07-07 19:04:32
发布2026-07-07 19:04:32
00
举报
文章被收录于专栏:kali blogkali blog

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

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

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

初步分析

搜索弹窗字符串

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

代码语言:javascript
复制
strings 主程序.exe | grep -i "executivefile\|damaged\|the main"

结果什么都找不到。

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

代码语言:javascript
复制
strings -e l 主程序.exe | grep -i "executive\|damaged"

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

转向代码分析

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

代码语言:javascript
复制
objdump -x 主程序.exe | head -40

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

代码语言:javascript
复制
objdump -p 主程序.exe | awk '/DLL Name:/{dll=$NF} /vma:/{print dll, $NF}'

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

定位加密的弹窗字符串

发现 XOR 加密

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

代码语言:javascript
复制
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}")

输出

代码语言:javascript
复制
Found! XOR key = 0x3d

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

解密弹窗文本

加密字符串位于文件偏移 0x3591A4(位于 .data 段),解密后的完整内容:

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

字符串引用定位

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

代码语言:javascript
复制
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 分析:

代码语言:javascript
复制
r2 -A 主程序.exe > afl | grep "0x4a87"

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

调用链追踪

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

该函数的调用者:

代码语言:javascript
复制
fcn.00482DB0 @ +0x3CBfcn.0048ACB0 @ 0x48B7D4  CDownloaderDlg case.5199 @ +0x780COleListCtrlDropTarget @ 0x504204

关键指令定位

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

代码语言:javascript
复制
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。完成跳转。

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kali笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 搜索弹窗字符串
  • 转向代码分析
  • 发现 XOR 加密
  • 解密弹窗文本
  • 字符串引用定位
  • 弹窗函数:fcn.004A8720
  • 调用链追踪
  • 关键指令定位
  • 方案:NOP 掉弹窗调用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档