吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1179|回复: 32

[插件] 还在手动回溯找关键Call?试试让程序自己告诉你它执行了哪些函数

  [复制链接]
莣孒嬡沵芣蓜 发表于 2025-9-20 00:06 | 显示全部楼层 |阅读模式

用AI做个润色啊哈哈,现在是AI时代,不用AI更待何时,冒个泡,证明我还活着,其他没啥了,潜水去了!

???? **当你想定位某个软件功能的关键函数时,你用的是什么“妙招”?**

在逆向工程实践中,我们常常遇到这样的需求:**“我想知道点击‘登录’按钮后,程序到底调用了哪些关键函数?”** 或者 “这个加密算法是在哪个子程序里实现的?”——这类问题看似简单,实则暗藏玄机。

传统做法是:从熟悉的 Windows API(如 `CreateFileW`、`RegSetValueExA`、`send` 等)入手下断点,然后通过不断回溯调用栈(Call Stack),一层层向上追踪,直到找到业务逻辑的起点。这种方式虽然经典,但效率极低,尤其在面对以下情况时:

- 函数调用层级深、嵌套复杂;
- 存在大量间接调用或虚表分发;
- 被虚拟化(VMProtect、Themida VM 等)或混淆处理的函数;
- 反调试机制频繁干扰断点命中。

在这种情况下,手动回溯不仅耗时,还容易因遗漏关键路径而前功尽弃。

---
???? **一个启发性的思路:让程序自己“告诉我们”它执行了什么**

我在看雪论坛偶然看到一位前辈(ID:hambaga,为避免广告嫌疑不贴链接,感兴趣的朋友可自行搜索)分享的一个开源的x64dbg插件方案,其核心思想非常巧妙:

> **对所有函数设置“静默断点”,记录它们是否被调用过。**

具体来说,该插件会扫描当前进程加载的所有用户模块(主程序 exe + 所有 dll),遍历每个导出函数或代码段中的潜在函数入口,并设置一个条件断点 —— `breakif(0)`。这种断点不会真正中断程序执行,但调试器内部仍会统计“命中的次数”。

随后,你只需在目标软件中**触发一次特定功能**(比如点击“保存”、“加密”或“验证”),再回头查询哪些函数的调用计数增加了,就能快速圈定可疑范围。这相当于给整个程序做了一次“行为快照”,大大减少了人工排查的工作量。

我满怀期待地下载并试用了这个插件,但在实际环境中遇到了一些挑战:有时程序运行卡顿、有时直接崩溃或“跑飞”。经过排查,我发现问题并非出自插件本身的设计缺陷,而是与我当前使用的调试器环境(x64dbg)有关 —— 尤其在面对现代加壳程序(如 VMP、ASPack、UPX + 自定义Stub)时,x64dbg 在异常处理、内存监控和反调试对抗方面的稳定性确实不如老牌工具如 OllyDbg(OD)(其实是OD插件丰富,可以快速过检测)。而我本人更习惯使用 OD 进行32位程序分析,对 x64dbg 的插件生态和底层兼容性掌握尚浅(是我功力不够驾驭不来这个伟大的调试器)。

考虑到当前壳保护技术日益复杂(很多商业壳甚至能检测调试器窗口句柄、API钩子、硬件断点等),与其等待工具完善,不如主动出击 —— 我决定基于前辈的核心思路,**自己动手实现一个更稳定、更可控的轻量级方案**。

---

?? **我的实现方案:基于向量化异常处理的“动态覆盖率采集器”**(看起来高大尚,其实就是瞎吹

我选择使用 Windows 提供的底层 API —— `AddVectoredExceptionHandler`,来构建自己的函数调用追踪器。

> ???? **什么是向量化异常处理?**  
> 它是 Windows 结构化异常处理(SEH)体系中的一种机制,允许开发者注册全局异常回调函数,在任何线程发生异常(包括 INT3 断点、访问违例、除零等)时优先获得控制权。相比传统的 SEH,它不依赖函数栈帧,因此更适用于动态插桩和调试FZ。

? **实现流程如下:**

1. **注册异常处理回调**  
   使用 `AddVectoredExceptionHandler(1, MyHandler)` 注册我们的处理函数,确保它在系统异常链最前端被调用。

2. **扫描目标模块的 .text 段**  
   通过解析 PE 头,定位主程序的代码段(通常是 `.text` 区域),并遍历其中所有“疑似函数入口”的地址(可通过简单启发式规则,如以 `push ebp; mov ebp, esp` 开头,或对齐到指令边界)。

3. **批量插入 0xCC 断点**  
   对每一个候选地址,保存原始字节,然后写入 `0xCC`(INT3 指令)。注意:必须在写入前修改内存属性为可写(`VirtualProtect`),写入后再恢复。

4. **触发目标功能 & 捕获异常**  
   用户操作软件(如点击按钮),程序执行到被插断点的位置时,触发 EXCEPTION_BREAKPOINT 异常,由我们的回调函数接管。

5. **记录 + 恢复 + 继续**  
   在异常处理函数中:
   - 记录当前 EIP/RIP 地址(即命中的函数);
   - 将该地址的 `0xCC` 恢复为原始指令(避免重复中断);
   - 返回 `EXCEPTION_CONTINUE_EXECUTION`,让程序继续运行。

6. **汇总结果 & 人工筛选**  
   功能执行完毕后,输出所有命中的函数地址列表。通常包含数百至上千个函数,但通过剔除以下几类,可大幅精简:
   - CRT 初始化函数(如 `_initterm`, `atexit`);
   - 编译器生成的FZ函数(如 `__security_check_cookie`);
   - Windows 系统回调或消息分发函数(如 `DispatchMessageW`);
   - 明显无关的库函数(如 `strlen`, `memcpy` 等)。
(以上剔除杂项我还没有思路写,只能人工去看筛查,或者期待有大佬做出优化-完善,非常感谢,到这里插件的原理已经全部贴出来了)
最终,剩下的 40–60 个函数,基本就是本次操作所涉及的核心业务逻辑。接下来,只需对这些函数逐一设置断点,观察堆栈传参、局部变量、返回值等,即可高效定位到真正的“关键 Call”。
---

???? **方法优势与局限性分析**

?? **优势:**
- 自动化程度高,无需预设断点位置;
- 不依赖符号或调试信息;
- 对抗部分反调试手段(如检测 IsDebuggerPresent)有效,因为异常处理发生在 Ring3 最底层;
- 可扩展性强,后续可加入调用次数统计、参数记录、调用树构建等功能。

? **局限性:**
- 插入大量断点可能导致性能下降或触发壳的完整性校验;
- 还有可恶的VMP3.X版本后的函数头部检测,下断点可以往下移动一个字节避免检测;
---

???? **未来可优化方向**

- 支持按模块/函数名过滤,减少噪音;
- 加入调用次数热力图,FZ判断核心路径;
- 自动识别并忽略已知库函数(通过哈希或特征码);
- 导出调用关系图(Call Graph),可视化分析;
↑↑↑↑↑↑↑↑其实是AI乱吹牛逼的,我没有能力写上面这些优化功能
---

???? **结语:带着答案找位置,远比盲目猜测高效**
逆向的本质,不是“猜谜”,而是“观察 + 推理”。当我们面对庞大复杂的二进制程序时,手动逐层回溯如同大海捞针。而通过“动态插桩 + 异常捕获”的方式,让程序在运行中“自我暴露”其执行路径,是一种非常高效的“缩小包围圈”策略。
正如一句老话所说:
> “带着题目找答案很难,但带着答案和题目回溯位置,就容易多了。”
希望这个思路和实现方案,能为你在逆向之路上提供新的启发。也欢迎各位同仁交流改进,共同探索更智能、更稳定的动态分析之道!

下面贴出使用说明图片!

通过OD注入dll

通过OD注入dll

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

10

10

游客,如果您要查看本帖隐藏内容请回复

解压密码回帖查看



test.rar

362.72 KB, 下载次数: 40, 下载积分: HB -3

插件

评分

参与人数 2HB +4 THX +2 收起 理由
pizazzboy + 3 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
提笔只两行 + 1 + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2025-9-20 00:30 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
yang519 发表于 2025-9-20 00:53 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
叩瞳白蓝 发表于 2025-9-20 04:34 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
situhaonan 发表于 2025-9-20 06:18 | 显示全部楼层

感谢分享。。。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
boot 发表于 2025-9-20 07:21 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
小飞飞象 发表于 2025-9-20 08:27 | 显示全部楼层

这是个高手。。。。。。。。。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
520pojie 发表于 2025-9-20 08:40 | 显示全部楼层

感谢分享。。。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
xpj2017 发表于 2025-9-20 09:57 | 显示全部楼层


谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
涛涛 发表于 2025-9-20 10:20 | 显示全部楼层

感谢分享!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表