一、軟件介紹
文末提供程序和源碼下載
? ? ? 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)
:
查找當前函數中的所有函數調用(例如,通過 statements?call
?),并將其名稱存儲在 中。?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
?in?insn_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作者地址
?