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, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码修补, 代码转换, 伪代码, 反混淆, 反编译器, 库识别, 恶意代码分析, 插件, 汇编, 网络调试, 自动化, 解密, 逆向工程, 配置文件, 静态分析