BinDetective 二进制侦探反编译引擎简介
BinDetective 二进制侦探是面向 AI 时代的轻量化、高并发、多架构二进制反编译与识别引擎。项目采用 C++ 开发,代码量十余万行,原生支持多款处理器架构,兼容 PE、ELF、Mach-O 三大主流可执行文件格式,可完成自动化反编译;同时兜底识别十余种常见非二进制文件,自动判别大小端与 32/64 位位数,覆盖 x86、ARM、AArch64 等主流架构,对部分小众架构可完成名称识别,提升二进制样本的快速分析与适配能力,是专为人工智能时代而准备的反编译引擎。
引擎共计实现 120 余项能力,依托并完整对接 Ghidra Sleigh 指令集描述语言,并在其基础之上搭载全套自研核心识别算法,自建完整分析流水线,包含 PE/ELF/Mach-O 文件加载、函数边界扫描、函数序言识别、控制流恢复、跳转表解析、栈帧与 ABI 分析、类型管理、Pcode 构造、元信息注入、任务调度、会话隔离、缓存、异常处理等模块;
配套自研函数特征签名库、编译器识别、异常处理解析、跨函数类型传播、类型推导、ABI 识别及各类辅助分析器,所有分析结果接入分析链路后送入反编译后端。底层程序分析技术涵盖函数边界识别、控制流程图(CFG)恢复、处理器与编译器优化、间接跳转处理、栈布局分析、栈变量恢复、类型推导、交叉引用、常量传播、启发式伪代码重命名、结构体重建等反编译恢复技术。
提供两类接口:一次性读写的无会话接口;支持多次交互、会话隔离的有会话接口。
程序运行后会在后台运行:


反编译效果接近可以对标IDAPro等产品:

结构体等自动关联。
程序仅有一个可执行文件,大小为6MB,非常小巧灵活。


如下将一个个进行测试,确保接口全部可用完善。以作为软件上线发布前的全量测试。
测试之前使用POST MAN直接对接输入KEY。

X-Auth-Token 7f3c9a1e5b8d2046c9e7f1a3b5d2c4e8f
Content-Type application/json
调用功能集合
{
"interface": "Open",
"params": [
"C://data/demo/Win64_Debug.exe"
],
"session":"ddd"
}
{
"interface": "Decompile",
"params": [
"0x140001160"
],
"session": "ddd"
}
{
"status": "success",
"result": {
"address": "0x140001160",
"name": "FUN_40001160",
"size": 227,
"c_code": uint64 FUN_40001160(uint64 param_1)\n\n{\n uint64 xVar1;\n int8 iVar2;\n uint32 *pxVar3;\n uint32 axStack_98 [12];\n uint32 local_68.cbSize;\n uint32 local_68.style;\n uint64 local_68.lpfnWndProc;\n uint32 local_68.cbClsExtra;\n uint32 local_68.cbWndExtra;\n uint64 local_68.hInstance;\n uint64 local_68.hIcon;\n uint64 local_68.hCursor;\n uint64 local_68.hbrBackground;\n uint64 local_68.lpszMenuName;\n uint64 local_68.lpszClassName;\n uint64 local_68.hIconSm;\n \n pxVar3 = axStack_98;\n for (iVar2 = 0x24; iVar2 != 0; iVar2 = iVar2 + -1) {\n *pxVar3 = 0xcccccccc;\n pxVar3 = pxVar3 + 1;\n }\n local_68.cbSize = 0x50;\n local_68.style = 3;\n local_68.lpfnWndProc = 0x140001014;\n local_68.cbClsExtra = 0;\n local_68.cbWndExtra = 0;\n local_68.hInstance = param_1;\n local_68.hIcon = LoadIconW(param_1,(LPCWSTR)0x6b);\n local_68.hCursor = LoadCursorW((HINSTANCE)0,(LPCWSTR)0x7f00);\n local_68.hbrBackground = 6;\n local_68.lpszMenuName = 0x6d;\n local_68.lpszClassName = 0x14000a230;\n local_68.hIconSm = LoadIconW(local_68.hInstance,(LPCWSTR)0x6c);\n xVar1 = RegisterClassExW(&local_68);\n FUN_400017b0(axStack_98,0x140007960);\n return xVar1;\n}\n",
"time_ms": 327.3497
},
"timestamp": 32957687
}
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

浙公网安备 33010602011771号