KasperskyLab/hrtng

GitHub: KasperskyLab/hrtng

一款功能全面的 IDA Pro 插件,集成解密、反混淆、补丁、库代码识别及伪代码转换,加速复杂恶意样本的逆向分析。

Stars: 1765 | Forks: 158

# hrtng IDA 插件 hrtng IDA 插件是我在逆向工作中发现的一系列有趣且实用的工具、想法和实验的集合。 特别感谢以下人员,他们杰出的插件作为我工作的基础: * Hex-Rays SA [ida-sdk](https://github.com/HexRaysSA/ida-sdk) 示例 * Milan Bohacek, [hexrays_tools](https://github.com/nihilus/hexrays_tools) 和 [hexrays_hlight](https://hex-rays.com/contests_details/contest2016/hexlight/hexrays_hlight.py) * J.C. Roberts 和 Alexander Pick: [IDB2PAT](https://github.com/alexander-pick/idb2pat) * HexRaysDeob 由 [Rolf Rolles](https://hex-rays.com/blog/hex-rays-microcode-api-vs-obfuscating-compiler) 和 [Takahiro Haruyama](https://blogs.vmware.com/security/2019/02/defeating-compiler-level-obfuscations-used-in-apt10-malware.html) 开发 * Karthik Selvaraj [Krypton plugin](https://www.hex-rays.com/contests/2012/Krypton_2012_Hex-Rays_Contest.zip) * Ali Rahbar, Ali Pezeshk 和 Elias Bachaalany [GraphSlick plugin](https://github.com/lallousx86/GraphSlick) * Markus Gaasedelen [AVX support for the Hex-Rays x64 Decompiler](https://github.com/gaasedelen/microavx) 该插件需要您的 IDA 安装中包含 Hex-Rays 反编译器。 仅支持并持续更新最新版本的 IDA。不过,该插件可以使用 IDA SDK >= 7.3 进行编译。 针对当前 IDA 版本添加的新功能和修复通常未在旧版本上经过充分测试。 ## 插件功能: 没有一个统一的菜单位置将插件的所有功能分组在一起。 插件的菜单项被放置在逻辑相关的标准 IDA 和 Hex-Rays 反编译器功能附近。 属于此插件的消息、菜单项、弹出窗口和对话框均标有“`[hrt]`”前缀。 ### 自动化 * [将注释从反汇编视图提取到伪代码视图](doc/pull-cmt.md) * [自动重命名局部和全局变量、结构体成员](doc/var-auto-rename.md) * [自动枚举替换](doc/enum.md) * [COM 助手](doc/com-helper.md) ### 交互式伪代码转换 * [用户交互式重命名/重类型辅助](doc/rename-recast.md) * [辅助更改结构体成员或局部/全局变量的类型](doc/recast.md) * [反转 "if" 语句](doc/invert-if.md) * [reinterpret_cast](doc/reicast.md) * [折叠选中内容](doc/collapse.md) * ["offsetof" 转换器](doc/offsetof.md) ### 解密 * [字符串/数据/常量解密](doc/decr.md) * [构建栈字符串(可选带解密)](doc/stk-str.md) * [构建数组字符串(可选带解密)](doc/arr-str.md) * [批量字符串解密](doc/appcall.md) ### 处理混淆代码 * [反编译混淆代码](doc/deob.md) * [隐藏变量赋值](doc/hidden-assign.md) * [扫描 API 名称哈希](doc/api-hashes.md) * [反扁平化](doc/unflat.md) * [Microcode 优化器 / "Magic" 调用](doc/opt.md) ### 代码识别 * [Microcode 签名](doc/msig.md) * [De-Inline - 内联函数检测](doc/deinline.md) * [从 IDA 数据库创建模式 (PAT) 文件](doc/idb2pat.md) ### 类型管理辅助 * [创建虚拟结构体](doc/cr_struc.md) * [辅助拆分结构体中的间隙](doc/struct-gaps.md) * [为以不同类型重用的变量创建联合体](doc/var-reuse.md) * [列出具有给定大小、给定偏移量的结构体](doc/struct-sz-off.md) * [辅助创建新的结构体定义](doc/struct-bld.md) * [查找与所用形状相同的结构体](doc/struct-shape.md) * [~~Structures 视图中的新功能~~](doc/ex-unp-struc.md) * [用于在多个 IDB 之间交互式合并类型的 IDC 脚本](bin/idc/merge_types.idc) ### 虚拟/间接调用辅助 * [虚拟调用辅助](doc/virtual-calls.md) * [跳转到间接调用目标](doc/ijmp.md) * [修复间接调用的栈指针](doc/fix-stack.md) ### 函数名称和类型 * [智能重命名函数](doc/rename-func.md) * [将函数转换为 __usercall,检测被破坏的寄存器](doc/usercall.md) * [将用户命名的函数原型导入到本地类型库](doc/import_unf_types.md) * [~~设置更接近 Go-lang 的调用约定~~](doc/golang.md) * [~~移除函数的返回类型,将其转换为 void func(...)~~](doc/remove-ret-type.md) * [~~移除函数的参数~~](doc/remove-arg.md) ### IDA UI 改进 * [扩展交叉引用](doc/xrefs_ex.md) * [匹配括号高亮](doc/brace.md) * [自动开启 'Functions' 窗口内容同步](doc/func-sync.md) * [在停靠查看器中渲染 "IDA notepad" 的 markdown 内容](bin/plugins/notepad-md.py) ### 杂项功能 * [获取 API 帮助](doc/zeal-api-help.md) * [AVX lifter](doc/avx.md) * [从 IDA 数据库转储字符串、注释和名称](doc/dump-strings.md) * [偏移表创建](doc/offsets-tbl.md) * 在进程重命名时打印逆向进度百分比 * [递归反编译被调用者](doc/recur-decomp.md) * [重构(全局查找和替换)](doc/refactoring.md) * [~~处理具有负偏移的结构体或基于结构体中间偏移的访问~~](doc/neg-offs.md) ### 补丁 * [用 NOP 填充自定义区域](doc/patch-nops.md) * [从调试器打补丁 / 从文件打补丁](doc/patch-dbg.md) * [搜索并打补丁](doc/search-n-patch.md) * [创建已打补丁的 (DEC) 文件](doc/create_dec.md) ### IDA 插件开发者帮助 * [Microcode Explorer](doc/mcode-expl.md) * [Ctree 图](doc/ctree-graph.md) ## 媒体 ### 逆向 FinSpy * [securelist - Our secret ingredient for reverse engineering](https://securelist.com/hrtng-ida-pro-plugin/114780/) (EN) * [Хабр - Cекретный ингредиент для реверс-инжиниринга: как работает наш собственный опенсорс-плагин для IDA](https://habr.com/ru/companies/kaspersky/articles/865394/) (RU) * [Positive Hack Days Fest 2025 - Наш секретный ингредиент для реверс-инжиниринга](https://www.youtube.com/watch?v=Yxkg2zD7Ggw) (RU) * [Off-By-One 2025 - Speed up your reverse engineering with the hrtng plugin](https://www.youtube.com/watch?v=846wdb06k2g) (EN) ### 分析 PlugX * [SSTIC 2025 - Analysez des logiciels malveillants plus rapidement avec hrtng](https://www.sstic.org/2025/presentation/analysez_des_logiciels_malveillants_plus_rapidement_avec_hrtng/) (FR) ## 构建 * 将 hrtng 与 [Crypto++® Library CMake](https://github.com/abdes/cryptopp-cmake) 子模块一起克隆。或者将手动下载的 `cryptopp-cmake` 源代码放入 `hrtng/src/cryptopp-cmake` 文件夹。 ``` cd src git clone --recurse-submodules https://github.com/KasperskyLab/hrtng.git ``` * 将 `IDA_DIR/plugins/hexrays_sdk/include/hexrays.hpp` 文件复制到 IDA SDK 的 `include` 目录。(自 IDA 9.0/8.5 起不再需要) * 编辑 `hrtng/src/CMakeLists.txt` 文件以设置所使用的 IDA SDK 的正确路径和版本。若要稍后使用另一个 SDK 版本进行构建,您可以使用 `cmake -D`、`ccmake` 或 `cmake-gui` 工具更改 cmake 的 `IDASDK_VER` 变量。 * 创建构建目录,进入其中,配置并构建 cmake 项目 ``` mkdir bld && cd bld cmake cmake --build . --config Release -j 4 --clean-first ``` * 在使用 9.1 之前版本的 IDA SDK 进行首次构建尝试时,会出现如下编译错误: ``` hrtng/src/deob.cpp:912:60: error: ‘class rangeset_t’ has no member named ‘as_rangevec’ fc.create("tmpfc2", ranges.as_rangevec(), 0);//!!! add line into range.hpp, class rangeset_t: "const rangevec_t &as_rangevec() const { return bag; }" ``` * 要修复此错误,请编辑 `IDA_SDK/include/range.hpp` 文件,按照以下示例在 `class rangeset_t` 声明中添加包含 `as_rangevec` 函数实现的行: ``` class rangeset_t { rangevec_t bag; ... public: const rangevec_t &as_rangevec() const { return bag; } ... }; ``` * 将构建好的二进制文件连同 `hrtng/bin/plugins` 中的 `apilist.txt` 和 `literal.txt` 文件一起复制到 `IDA_DIR/plugins` 文件夹 * 搞定 ## 许可证 本程序根据 GPL v3 许可证发布 ## 作者 * Sergey.Belov at kaspersky.com
标签:Bash脚本, Deobfuscation, Hex-Rays, IDA Pro, Patching, Pseudocode, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码修补, 代码转换, 伪代码, 反混淆, 反编译器, 库识别, 恶意代码分析, 插件, 汇编, 网络调试, 自动化, 解密, 逆向工程, 配置文件, 静态分析