
逆向工具箱 hrtng从解密到补丁的一条龙实战路线【免费下载链接】hrtngIDA Pro plugin with a rich set of features: decryption, deobfuscation, patching, lib code recognition and various pseudocode transformations项目地址: https://gitcode.com/gh_mirrors/hr/hrtng当你看到反编译结果里控制流被扁平化成一锅面条API 调用又藏在无意义的常数后面时需要的就是 hrtng IDA 插件——它把解密、反混淆、补丁制作、库代码识别和伪代码转换打包进 IDA Pro所有功能带[hrt]前缀分散在菜单树里但都挨着 IDA 对应的原生功能放不用你翻遍菜单找入口。五分钟装进 IDA硬性前提只有一个装了 Hex-Rays 反编译器的 IDA Pro。hrtng 的绝大多数能力都工作在中层代码microcode介于汇编和伪代码之间的中间表示层面没有反编译器它就是个空壳。源码构建还需要 IDA SDK7.3 起步默认配置面向 9.0、CMake 和一套 C 工具链以及静态链接的 Crypto 加密库。实际安装你只需要做三件事克隆仓库git clone https://gitcode.com/gh_mirrors/hr/hrtng把 Crypto 的 CMake 包装版放进src/cryptopp-cmake然后在构建目录里配 cmake、-j 4编译产物连同bin/plugins里的apilist.txt、literal.txt拷进 IDA 的 plugins 目录。首次编译大概率会报getbag相关错误照 readme 里 building 章节给range.hpp补一行成员函数即可其余细节仓库文档写得很全。能力拆解对着你的头疼逐个上药加密字符串批量解密全程不靠人肉加密字符串散落在全局数据区逐个进调试器手抠太慢。伪代码里右键decrypt调用选 Mass strings decryption可以走两条路插件内置解密器直接算或者用 Appcall 机制让调试器替你执行目标函数参数全部从伪代码取——目标函数本身可以是黑盒。选 All xrefs 后所有调用点一次跑完结果列在窗口里右键即可写注释、往密文地址打补丁或导出文件。边界要说清楚目标函数签名必须正确建议先用 Single call 验证变参函数先改成固定参数并清空反编译缓存再跑。扁平化控制流一键还原看到满屏 switch-case 调度器就知道是控制流扁平化。反编译器右键菜单里有开关 unflattener 的入口hrtng 增强了原有算法能处理嵌套扁平化和用 jg/jle 代替 jz/jnz 比较的变体FinSpy 里那套经典手法打开后重新反编译面条就还原成可读的分支。遇到更脏的东西——空洞操作、乱动栈、拿 call/ret 当跳转——用 Alt-F5 的 Decompile obfuscated code它会把散落各处的代码块收拢、强制反编译榨出剩下的一点点含义。当前开关状态会写在伪代码第一行的注释里deob 前手动清掉执行路径上的函数结果通常更好。API 哈希扫描把常数变回函数名shellcode 里 API 往往不是按名字取而是拿哈希比较。Turn on APIhashes scan 里选好算法、基数和循环乘数插件会对apilist.txt里每个条目算哈希伪代码里匹配的常数自动挂上 API 名字注释。样本用到冷门 API直接在 plugins 目录的apilist.txt里加名字。注意反汇编视图的注释在代码创建时生成看不到就先 undefine 再重建那段 code/data。结构体构建器替你攒证据结构体分析最耗时的是收集使用证据。Scan variable 跨函数标记同类型变量插件累积访问情况后打开结构体构建器猜出的子结构大小和成员类型实时显示冲突字段红底标出最后产出一份可以手改的 C 声明自动应用回你扫描过的所有变量。边界只有一条不同种类的变量混着扫累积结果会乱按类型分开扫。组合工作流串起来才是工具链一个典型的 shellcode 样本可以这么走先用 Decompile obfuscated code 把不肯反编译的函数拽进伪代码再对它里面的解密调用跑 Mass strings decryption 还原密文同时打开 API 哈希扫描解出来的哈希常数自动挂上 API 名。证据齐了Search Patch 按十六进制串批量替换或者用 Patch from debugger 把调试会话里观察到的内存写回数据库静态分析从此在干净的样本上继续。自解包样本另一条链调试器走解壳代码每个断点处 Patch from debugger 写回自修改区调试会话一结束数据库里就是解完包的状态接着上面的解密和结构体工作照做。踩坑速查编译报rangeset_t has no member named getbag—— 按 readme 在 SDK 的include/range.hpp的rangeset_t类里补一行getbag()成员函数。装完插件菜单里一片空白—— 大概率是缺 Hex-Rays 反编译器或 IDA 版本太旧官方支持 SDK 7.3 及以上。批量解密结果整片红—— 多半是函数签名问题变参函数改成固定参数、清反编译缓存后重跑。哈希注释伪代码里有、反汇编里看不到—— 注释在代码创建时挂上先 undefine 常数再重建 code/data。延伸每个功能的独立文档都在doc/目录实现看src/下的同名文件appcall.cpp、unflat.cpp等作者还公开过用它解剖 FinSpy 模块的完整案例。打开一个样本挑一个[hrt]入口跑一遍比读十篇教程都管用。【免费下载链接】hrtngIDA Pro plugin with a rich set of features: decryption, deobfuscation, patching, lib code recognition and various pseudocode transformations项目地址: https://gitcode.com/gh_mirrors/hr/hrtng创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考