deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试
一、软件介绍
文末提供程序和源码下载
deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试。FunctionRenamerDeepseekAI.cpp 此文件包含 Hex-Rays 反编译器的主要插件实现。它反编译当前函数,使用 DeepSeekAI 重命名变量和函数,并输出结果。
二、功能
init()
:初始化插件并检查 Hex-Rays 反编译器的可用性。plugin_ctx_t::run(size_t)
:启动插件时执行的主函数。它反编译当前函数,将反编译后的代码发送给 DeepSeekAI 进行重命名,并应用重命名后的元素。save_current_function_name(func_t* pfn)
:保存当前函数的名称。save_variables(func_t* pfn)
:保存在当前函数中找到的变量。save_functions(func_t* pfn)
:保存在当前函数中找到的函数。get_decompiled_code(func_t* pfn, std::string& decompiled_code)
:检索当前函数的反编译代码。rename_current_function(func_t* pfn, const std::string& new_name)
:重命名当前函数。rename_all_lvars_and_globalvars(func_t* pfn)
:重命名所有局部变量和全局变量。rename_all_functions(func_t* pfn)
:重命名所有函数。mark_cfunc_dirty(ea_t start_ea)
:将当前函数标记为 dirty,表示变量已重命名。更新窗口并在重命名后显示新名称
DeepSeekAI.hpp
此文件实现了一个通过 Akash Network API 与 DeepSeek AI 模型交互的类。主要任务是分析反编译的代码,自动重命名元素(函数、变量、参数),并返回结构化的 JSON。
功能:
SendRequestToDeepseek(const std::string& decompiledCode)
:
将反编译代码提交到 DeepSeek 的主要方法。处理响应:删除多余的字符,提取 和|END_JSON|
之间的|START_JSON|
JSON,替换引号。generateBody(const std::string& decompiledCode)
:
为 AI 形成请求正文:添加系统提示符,将代码括在 /|END_CODE|
中|START_CODE|
,将双引号替换为单引号,并清理字符串。getSession()
:
接收会话 cookie,通过 GET 请求向 Akash Network API 进行身份验证。超时:15 秒。postToChat(std::string body, cpr::Cookies cookies)
:
将带有正文和 cookie 的 POST 请求发送到 Akash 聊天 API。超时:10 分钟。处理 HTTP 错误(例如,≠ 200 状态)。
调用示例:
DeepSeekAI ai;
std::string jsonResult = ai.SendRequestToDeepseek(decompiled_code);
函数工具HexRay.hpp
此文件提供了在 IDA 中使用 Hex-Rays 反编译器的实用程序。它收集有关函数、变量和参数的信息,并根据外部数据(例如,从 DeepSeekAI 获取的 JSON)实现它们的重命名。
功能:
get_decompiled_code(func_t* pfn, std::string& out_code)
:
将函数反编译为伪代码并将其保存到字符串中out_code
。处理反编译错误(例如,通过hexrays_failure_t
)。save_current_function_name(func_t* pfn)
:
将当前函数的名称保存到全局字典current_function
中,以便以后重命名。save_variables(func_t* pfn)
:
收集函数中使用的所有局部变量(包括参数)和全局变量。将它们存储在 中。var_names
save_functions(func_t* pfn)
:
查找当前函数中的所有函数调用(例如,通过 statementscall
),并将其名称存储在 中。function_names
rename_current_function(func_t* pfn, const std::string& new_name)
:
使用新名称重命名当前函数 (通过set_name
)。rename_all_lvars_and_globalvars(func_t* pfn)
:
重命名 中的所有局部变量和全局变量var_names
。对于全局用途set_name
,对于本地 —rename_lvar
.rename_all_functions(func_t* pfn)
:
重命名function_names
在当前上下文中找到的所有函数。
特征:
- 与 Hex-Rays API 集成:
使用decompile
,get_lvars
,func_item_iterator_t
分析函数和变量。 - 使用全局变量:
通过指令解析定义全局变量(例如,o_mem
ininsn_t
中)。 - 重 命名:
使用 IDA Pro 方法 (set_name
,rename_lvar
) 修改名称。
使用示例:
func_t* pfn = get_current_function();
std::string decompiled_code;
get_decompiled_code(pfn, decompiled_code);// После получения JSON от DeepSeekAI:
rename_current_function(pfn, "newMain");
rename_all_lvars_and_globalvars(pfn);
rename_all_functions(pfn);
三、插件软件下载
迅雷网盘
本文信息来源于GitHub作者地址