BinDetective 二进制侦探反编译引擎简介

BinDetective 二进制侦探是面向 AI 时代的轻量化、高并发、多架构二进制反编译与识别引擎。项目采用 C++ 开发,代码量十余万行,原生支持多款处理器架构,兼容 PE、ELF、Mach-O 三大主流可执行文件格式,可完成自动化反编译;同时兜底识别十余种常见非二进制文件,自动判别大小端与 32/64 位位数,覆盖 x86、ARM、AArch64 等主流架构,对部分小众架构可完成名称识别,提升二进制样本的快速分析与适配能力,是专为人工智能时代而准备的反编译引擎。

引擎共计实现 120 余项能力,依托并完整对接 Ghidra Sleigh 指令集描述语言,并在其基础之上搭载全套自研核心识别算法,自建完整分析流水线,包含 PE/ELF/Mach-O 文件加载、函数边界扫描、函数序言识别、控制流恢复、跳转表解析、栈帧与 ABI 分析、类型管理、Pcode 构造、元信息注入、任务调度、会话隔离、缓存、异常处理等模块;

配套自研函数特征签名库、编译器识别、异常处理解析、跨函数类型传播、类型推导、ABI 识别及各类辅助分析器,所有分析结果接入分析链路后送入反编译后端。底层程序分析技术涵盖函数边界识别、控制流程图(CFG)恢复、处理器与编译器优化、间接跳转处理、栈布局分析、栈变量恢复、类型推导、交叉引用、常量传播、启发式伪代码重命名、结构体重建等反编译恢复技术。

提供两类接口:一次性读写的无会话接口;支持多次交互、会话隔离的有会话接口。

程序运行后会在后台运行:

image

image

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

image

结构体等自动关联。

程序仅有一个可执行文件,大小为6MB,非常小巧灵活。

image

image

如下将一个个进行测试,确保接口全部可用完善。以作为软件上线发布前的全量测试。

测试之前使用POST MAN直接对接输入KEY。

image

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
}
posted @ 2026-10-10 21:01  lyshark  阅读(54)  评论(0)    收藏  举报