本文面向有特殊环境需求的群体。如果您能够使用在线模型,那么本教程对您可能不太适用。在国内,使用 trae 可便捷满足相关需求。经实际测试,本地部署模型时,若使用 24G 显存,显卡可选择两张 M40 12g(价格约 500 元左右)。追求性价比的朋友,也可直接采用单卡 24G 版本,让旧显卡重焕生机。当然你有3090等卡更好

对于参与 CTF 等有离线需求场景的用户而言,此方案将提供较大助力 。本人对逆向可以说是一窍不通,所以简单的题走点捷径。这里就不放原题目了,各位可以自己找题测试,并针对本文给出的提示词做出优化。目前还在进一步测试,理论上安卓的so库逆向也可以用这个干,MCP动态调试的教程等有空研究了看看。

阿里开源真心yyds,多少老旧设备能被这个模型挖掘最大价值。

这里使用的模型是Qwen3-30B-A3B-Q4-K_M
魔塔社区地址为:
Qwen3-30B-A3B-128K-GGUF
下载链接为:Qwen3-30B-A3B-128K-GGUF

显存占用情况

推荐使用llama.cpp进行推理
我用的启动参数如下,依据个人需求改就行,弄不来的用ollama改下上下文也行,部署就不做过多教学了

/workspace/llama.cpp/build/bin/llama-server -m /root/gguf/Qwen3-30B-A3B-Q4_K_M.gguf --reasoning-format deepseek -ngl 99 -fa -sm row --temp 0.6 --top-k 20 --top-p 0.95 --min-p 0 -c 40960 -n 131072  --host 0.0.0.0 -np 2

IDA的MCP部署可以参考下面两篇文章,别人已经写的很详细了,我这里就不多详细步骤了
IDA Pro+MCP+DeepSeek逆向小实战:构建AI逆向分析工作流_ida pro mcp-CSDN博客IDA_Pro MCP接入与使用教程 - 吾爱破解 - 52pojie.cn

这里先放效果(会做的人直接看strings或者f5看下伪代码直接秒出):
1、cherry studio客户端(比较麻烦,需要多轮对话)

2、roo code(配置繁琐,但是只用点点点)

roo code对话原文md(只删了文件结构信息,其他没动过,这个和分析没啥关系)

**User:**

<task>
程序在运行时会创建一个互斥锁(mutex),分析出该互斥锁创建时的名称
</task>
<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:01:24.208Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>


# Current Workspace Directory (d:/CTF/文件结构这里被我删了) Files
文件结构这里被我删了
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>get_entry_points</tool_name>
<arguments>
{
  "offset": 0,
  "count": 100
}
</arguments>
</use_mcp_tool>

---

**User:**

[use_mcp_tool for 'github.com/mrexodia/ida-pro-mcp'] Result:
{
  "address": "0x10001000",
  "name": "curl_slist_append",
  "size": "0x1"
}

{
  "address": "0x10001000",
  "name": "curl_slist_append",
  "size": "0x1"
}

{
  "address": "0x10001000",
  "name": "curl_slist_append",
  "size": "0x1"
}

{
  "address": "0x10001000",
  "name": "curl_slist_append",
  "size": "0x1"
}

{
  "address": "0x10001000",
  "name": "curl_slist_append",
  "size": "0x1"
}

{
  "address": "0x10001000",
  "name": "curl_slist_append",
  "size": "0x1"
}

{
  "address": "0x1000175e",
  "name": "DllEntryPoint",
  "size": "0x23"
}
<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:06:40.627Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>list_strings_filter</tool_name>
<arguments>
{
  "offset": 0,
  "count": 100,
  "filter": "Global|Local"
}
</arguments>
</use_mcp_tool>

---

**User:**

[use_mcp_tool for 'github.com/mrexodia/ida-pro-mcp'] Result:
{
  "data": [],
  "next_offset": null
}
<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:09:35.808Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>list_imports</tool_name>
<arguments>
{
  "offset": 0,
  "count": 100
}
</arguments>
</use_mcp_tool>

---

**User:**

[use_mcp_tool for 'github.com/mrexodia/ida-pro-mcp'] Result:
{
  "data": [
    {
      "address": "0x10013df4",
      "imported_name": "CloseHandle",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013df8",
      "imported_name": "CreateFileW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013dfc",
      "imported_name": "CreateMutexA",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e00",
      "imported_name": "DecodePointer",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e04",
      "imported_name": "DeleteCriticalSection",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e08",
      "imported_name": "EnterCriticalSection",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e0c",
      "imported_name": "ExitProcess",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e10",
      "imported_name": "FindClose",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e14",
      "imported_name": "FindFirstFileExW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e18",
      "imported_name": "FindNextFileW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e1c",
      "imported_name": "FlushFileBuffers",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e20",
      "imported_name": "FreeEnvironmentStringsW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e24",
      "imported_name": "FreeLibrary",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e28",
      "imported_name": "GetACP",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e2c",
      "imported_name": "GetCPInfo",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e30",
      "imported_name": "GetCommandLineA",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e34",
      "imported_name": "GetCommandLineW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e38",
      "imported_name": "GetConsoleMode",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e3c",
      "imported_name": "GetConsoleOutputCP",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e40",
      "imported_name": "GetCurrentProcess",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e44",
      "imported_name": "GetCurrentProcessId",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e48",
      "imported_name": "GetCurrentThreadId",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e4c",
      "imported_name": "GetEnvironmentStringsW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e50",
      "imported_name": "GetFileType",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e54",
      "imported_name": "GetLastError",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e58",
      "imported_name": "GetModuleFileNameA",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e5c",
      "imported_name": "GetModuleFileNameW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e60",
      "imported_name": "GetModuleHandleA",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e64",
      "imported_name": "GetModuleHandleExW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e68",
      "imported_name": "GetModuleHandleW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e6c",
      "imported_name": "GetOEMCP",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e70",
      "imported_name": "GetProcAddress",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e74",
      "imported_name": "GetProcessHeap",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e78",
      "imported_name": "GetStartupInfoW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e7c",
      "imported_name": "GetStdHandle",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e80",
      "imported_name": "GetStringTypeW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e84",
      "imported_name": "GetSystemTimeAsFileTime",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e88",
      "imported_name": "HeapAlloc",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e8c",
      "imported_name": "HeapFree",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e90",
      "imported_name": "HeapReAlloc",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e94",
      "imported_name": "HeapSize",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e98",
      "imported_name": "InitializeCriticalSectionAndSpinCount",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013e9c",
      "imported_name": "InitializeSListHead",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ea0",
      "imported_name": "InterlockedFlushSList",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ea4",
      "imported_name": "IsDebuggerPresent",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ea8",
      "imported_name": "IsProcessorFeaturePresent",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013eac",
      "imported_name": "IsValidCodePage",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013eb0",
      "imported_name": "LCMapStringW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013eb4",
      "imported_name": "LeaveCriticalSection",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013eb8",
      "imported_name": "LoadLibraryExW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ebc",
      "imported_name": "MultiByteToWideChar",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ec0",
      "imported_name": "QueryPerformanceCounter",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ec4",
      "imported_name": "RaiseException",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ec8",
      "imported_name": "ReadConsoleW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ecc",
      "imported_name": "ReadFile",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ed0",
      "imported_name": "RtlUnwind",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ed4",
      "imported_name": "SetCurrentDirectoryA",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ed8",
      "imported_name": "SetEndOfFile",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013edc",
      "imported_name": "SetFilePointerEx",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ee0",
      "imported_name": "SetLastError",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ee4",
      "imported_name": "SetStdHandle",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ee8",
      "imported_name": "SetUnhandledExceptionFilter",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013eec",
      "imported_name": "Sleep",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ef0",
      "imported_name": "TerminateProcess",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ef4",
      "imported_name": "TlsAlloc",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013ef8",
      "imported_name": "TlsFree",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013efc",
      "imported_name": "TlsGetValue",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013f00",
      "imported_name": "TlsSetValue",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013f04",
      "imported_name": "UnhandledExceptionFilter",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013f08",
      "imported_name": "VirtualAlloc",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013f0c",
      "imported_name": "VirtualProtect",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013f10",
      "imported_name": "WideCharToMultiByte",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013f14",
      "imported_name": "WriteConsoleW",
      "module": "KERNEL32"
    },
    {
      "address": "0x10013f18",
      "imported_name": "WriteFile",
      "module": "KERNEL32"
    }
  ],
  "next_offset": null
}
<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:11:30.277Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>get_xrefs_to</tool_name>
<arguments>
{
  "address": "0x10013dfc"
}
</arguments>
</use_mcp_tool>

---

**User:**

[use_mcp_tool for 'github.com/mrexodia/ida-pro-mcp'] Result:
{
  "address": "0x1000135f",
  "type": "code",
  "function": {
    "address": "0x1000135f",
    "name": "_DllMain@12",
    "size": "0x40e"
  }
}

{
  "address": "0x1000135f",
  "type": "data",
  "function": {
    "address": "0x1000135f",
    "name": "_DllMain@12",
    "size": "0x40e"
  }
}
<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:21:27.962Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>disassemble_function</tool_name>
<arguments>
{
  "start_address": "0x1000135f"
}
</arguments>
</use_mcp_tool>

---

**User:**

[use_mcp_tool for 'github.com/mrexodia/ida-pro-mcp'] Result:
Error:
Error executing tool disassemble_function: JSON-RPC error -32603: Internal error (please report a bug)
Traceback (most recent call last):
  File "C:/Users/OS/AppData/Roaming/Hex-Rays/IDA Pro/plugins/mcp-plugin.py", line 144, in do_POST
    result = rpc_registry.dispatch(request["method"], request.get("params", []))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/Users/OS/AppData/Roaming/Hex-Rays/IDA Pro/plugins/mcp-plugin.py", line 58, in dispatch
    return func(*converted_params)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/Users/OS/AppData/Roaming/Hex-Rays/IDA Pro/plugins/mcp-plugin.py", line 377, in wrapper
    return sync_wrapper(ff, idaapi.MFF_READ)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:/Users/OS/AppData/Roaming/Hex-Rays/IDA Pro/plugins/mcp-plugin.py", line 351, in sync_wrapper
    raise res
  File "C:/Users/OS/AppData/Roaming/Hex-Rays/IDA Pro/plugins/mcp-plugin.py", line 341, in runned
    res_container.put(ff())
                      ^^^^
  File "C:/Users/OS/AppData/Roaming/Hex-Rays/IDA Pro/plugins/mcp-plugin.py", line 931, in disassemble_function
    ida_kernwin.parse_tagged_line_sections(tls, raw_instruction)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'ida_kernwin' has no attribute 'parse_tagged_line_sections'

<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:22:03.568Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>decompile_function</tool_name>
<arguments>
{
  "address": "0x1000135f"
}
</arguments>
</use_mcp_tool>

---

**User:**

[use_mcp_tool for 'github.com/mrexodia/ida-pro-mcp'] Result:
/* line: 0, address: 0x10001010 */ BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
/* line: 1 */ {
/* line: 2 */   int v3; // ebx
/* line: 3 */   int v4; // esi
/* line: 4 */   int v5; // eax
/* line: 5 */   HMODULE ModuleHandleA; // edi
/* line: 6 */   int v8; // [esp-4h] [ebp-148h] BYREF
/* line: 7 */   CHAR Filename[260]; // [esp+0h] [ebp-144h] BYREF
/* line: 8 */   char *v10; // [esp+104h] [ebp-40h]
/* line: 9 */   DWORD LastError; // [esp+108h] [ebp-3Ch]
/* line: 10 */   HANDLE MutexA; // [esp+10Ch] [ebp-38h]
/* line: 11 */   PDWORD v13; // [esp+110h] [ebp-34h]
/* line: 12 */   SIZE_T dwSize; // [esp+114h] [ebp-30h]
/* line: 13 */   CHAR *v15; // [esp+118h] [ebp-2Ch]
/* line: 14 */   int v16; // [esp+11Ch] [ebp-28h]
/* line: 15 */   LPVOID lpAddress; // [esp+120h] [ebp-24h]
/* line: 16 */   int v18; // [esp+124h] [ebp-20h]
/* line: 17 */   void *Buffer; // [esp+128h] [ebp-1Ch]
/* line: 18 */   PDWORD lpflOldProtect; // [esp+12Ch] [ebp-18h]
/* line: 19 */   FILE *Stream; // [esp+130h] [ebp-14h]
/* line: 20 */   bool v22; // [esp+134h] [ebp-10h]
/* line: 21 */   bool v23; // [esp+135h] [ebp-Fh]
/* line: 22 */   bool v24; // [esp+136h] [ebp-Eh]
/* line: 23 */   bool v25; // [esp+137h] [ebp-Dh]
/* line: 24 */ 
/* line: 25, address: 0x1000101c */   v5 = -59812664;
/* line: 26, address: 0x1000122e */   while ( 1 )
/* line: 27 */   {
/* line: 28, address: 0x100010d5 */     while ( 1 )
/* line: 29 */     {
/* line: 30, address: 0x1000103c */       while ( 1 )
/* line: 31 */       {
/* line: 32, address: 0x10001035 */         while ( 1 )
/* line: 33 */         {
/* line: 34, address: 0x10001035 */           while ( v5 <= 441339541 )
/* line: 35 */           {
/* line: 36, address: 0x10001085 */             if ( v5 <= -160800107 )
/* line: 37 */             {
/* line: 38, address: 0x10001115 */               if ( v5 <= -1488728540 )
/* line: 39 */               {
/* line: 40, address: 0x1000125a */                 if ( v5 == -2053413363 )
/* line: 41 */                 {
/* line: 42, address: 0x100013e2 */                   v5 = -157045621;
/* line: 43, address: 0x100013e7 */                   v3 = 1;
/* line: 44 */                 }
/* line: 45 */                 else
/* line: 46 */                 {
/* line: 47, address: 0x10001265 */                   if ( v5 != -1823888645 )
/* line: 48, address: 0x1000140b */                     ExitProcess(0);
/* line: 49, address: 0x10001273 */                   v23 = LastError == 183;
/* line: 50, address: 0x10001277 */                   v5 = 999569743;
/* line: 51 */                 }
/* line: 52 */               }
/* line: 53, address: 0x10001120 */               else if ( v5 == -1488728539 )
/* line: 54 */               {
/* line: 55, address: 0x10001309 */                 Stream = fopen("config.ini", "rb");
/* line: 56, address: 0x10001310 */                 v22 = Stream != 0;
/* line: 57, address: 0x10001314 */                 v5 = 1828317264;
/* line: 58 */               }
/* line: 59, address: 0x1000112b */               else if ( v5 == -1418684022 )
/* line: 60 */               {
/* line: 61, address: 0x10001329 */                 dwSize = ftell(Stream);
/* line: 62, address: 0x1000133e */                 Buffer = VirtualAlloc(0, dwSize, 0x1000u, 0x40u);
/* line: 63, address: 0x10001341 */                 v5 = 270182103;
/* line: 64 */               }
/* line: 65 */               else
/* line: 66 */               {
/* line: 67, address: 0x10001141 */                 Sleep(0xBB8u);
/* line: 68, address: 0x1000114e */                 fseek(Stream, 0, 0);
/* line: 69, address: 0x10001161 */                 fread(Buffer, 1u, dwSize, Stream);
/* line: 70, address: 0x1000116c */                 fclose(Stream);
/* line: 71, address: 0x1000117c */                 ModuleHandleA = GetModuleHandleA(0);
/* line: 72, address: 0x1000118b */                 GetModuleFileNameA(ModuleHandleA, Filename, 0x104u);
/* line: 73, address: 0x1000119c */                 v18 = *(_DWORD *)((char *)ModuleHandleA + *((_DWORD *)ModuleHandleA + 15) + 40)
/* line: 74 */                     + *(_DWORD *)((char *)ModuleHandleA + *((_DWORD *)ModuleHandleA + 15) + 52);
/* line: 75, address: 0x100011a2 */                 v13 = lpflOldProtect;
/* line: 76, address: 0x100011ae */                 v10 = (char *)Buffer - v18;
/* line: 77, address: 0x100011b1 */                 v5 = -34705640;
/* line: 78 */               }
/* line: 79 */             }
/* line: 80, address: 0x10001090 */             else if ( v5 > -34705641 )
/* line: 81 */             {
/* line: 82, address: 0x100011f7 */               if ( v5 == -34705640 )
/* line: 83 */               {
/* line: 84, address: 0x10001393 */                 lpAddress = (LPVOID)v18;
/* line: 85, address: 0x10001396 */                 v5 = 790773586;
/* line: 86 */               }
/* line: 87, address: 0x10001202 */               else if ( v5 == 77338369 )
/* line: 88 */               {
/* line: 89, address: 0x10001023 */                 v5 = 661849492;
/* line: 90, address: 0x10001028 */                 v16 = 1;
/* line: 91 */               }
/* line: 92 */               else
/* line: 93 */               {
/* line: 94, address: 0x10001217 */                 v5 = -1386097209;
/* line: 95, address: 0x10001221 */                 if ( !Buffer )
/* line: 96, address: 0x10001221 */                   v5 = -2053413363;
/* line: 97 */               }
/* line: 98 */             }
/* line: 99, address: 0x1000109b */             else if ( v5 == -160800106 )
/* line: 100 */             {
/* line: 101, address: 0x100012b4 */               fseek(Stream, 0, 2);
/* line: 102, address: 0x100012bc */               v5 = -1418684022;
/* line: 103 */             }
/* line: 104, address: 0x100010a6 */             else if ( v5 == -157045621 )
/* line: 105 */             {
/* line: 106, address: 0x100012c6 */               v5 = 1705069352;
/* line: 107, address: 0x100012cb */               v4 = v3;
/* line: 108 */             }
/* line: 109 */             else
/* line: 110 */             {
/* line: 111, address: 0x100010b7 */               v8 = -59812664;
/* line: 112, address: 0x100010be */               lpflOldProtect = (PDWORD)&v8;
/* line: 113, address: 0x100010c1 */               v25 = fdwReason == 1;
/* line: 114, address: 0x100010c5 */               v5 = 1370360240;
/* line: 115 */             }
/* line: 116 */           }
/* line: 117, address: 0x1000103c */           if ( v5 <= 1087384558 )
/* line: 118, address: 0x1000103c */             break;
/* line: 119, address: 0x10001047 */           if ( v5 > 1622942616 )
/* line: 120 */           {
/* line: 121, address: 0x100011c0 */             if ( v5 == 1622942617 )
/* line: 122 */             {
/* line: 123, address: 0x10001350 */               SetCurrentDirectoryA("c:\\programdata");
/* line: 124, address: 0x10001365 */               MutexA = CreateMutexA(0, 0, "alibaba666");
/* line: 125, address: 0x10001368 */               v5 = 619575440;
/* line: 126 */             }
/* line: 127, address: 0x100011cb */             else if ( v5 == 1705069352 )
/* line: 128 */             {
/* line: 129, address: 0x10001377 */               v5 = 661849492;
/* line: 130, address: 0x10001381 */               if ( !v4 )
/* line: 131, address: 0x10001381 */                 v5 = 77338369;
/* line: 132, address: 0x10001384 */               v16 = -1;
/* line: 133 */             }
/* line: 134 */             else
/* line: 135 */             {
/* line: 136, address: 0x100011e0 */               v5 = 441339542;
/* line: 137, address: 0x100011ea */               if ( v22 )
/* line: 138, address: 0x100011ea */                 v5 = -160800106;
/* line: 139 */             }
/* line: 140 */           }
/* line: 141, address: 0x10001052 */           else if ( v5 == 1087384559 )
/* line: 142 */           {
/* line: 143, address: 0x10001285 */             v5 = 481587248;
/* line: 144, address: 0x1000128f */             if ( v24 )
/* line: 145, address: 0x1000128f */               v5 = 1376053299;
/* line: 146 */           }
/* line: 147, address: 0x1000105d */           else if ( v5 == 1370360240 )
/* line: 148 */           {
/* line: 149, address: 0x1000129b */             v5 = 77338369;
/* line: 150, address: 0x100012a5 */             if ( v25 )
/* line: 151, address: 0x100012a5 */               v5 = 1622942617;
/* line: 152 */           }
/* line: 153 */           else
/* line: 154 */           {
/* line: 155, address: 0x10001070 */             LastError = GetLastError();
/* line: 156, address: 0x10001073 */             v5 = -1823888645;
/* line: 157 */           }
/* line: 158 */         }
/* line: 159, address: 0x100010d5 */         if ( v5 > 661849491 )
/* line: 160, address: 0x100010d5 */           break;
/* line: 161, address: 0x100010e0 */         if ( v5 == 441339542 )
/* line: 162 */         {
/* line: 163, address: 0x100012d2 */           v5 = 1705069352;
/* line: 164, address: 0x100012d7 */           v4 = 1;
/* line: 165 */         }
/* line: 166, address: 0x100010eb */         else if ( v5 == 481587248 )
/* line: 167 */         {
/* line: 168, address: 0x100012e7 */           v15 = Filename;
/* line: 169, address: 0x100012ed */           v5 = -1488728539;
/* line: 170 */         }
/* line: 171 */         else
/* line: 172 */         {
/* line: 173, address: 0x10001100 */           v24 = MutexA != 0;
/* line: 174, address: 0x10001104 */           v5 = 1087384559;
/* line: 175 */         }
/* line: 176 */       }
/* line: 177, address: 0x1000122e */       if ( v5 != 790773586 )
/* line: 178, address: 0x1000122e */         break;
/* line: 179, address: 0x100013b0 */       VirtualProtect(lpAddress, 0x10u, 4u, lpflOldProtect);
/* line: 180, address: 0x100013b5 */       *(_BYTE *)lpAddress = -23;
/* line: 181, address: 0x100013c1 */       *(_DWORD *)(v18 + 1) = v10 - 5;
/* line: 182, address: 0x100013d1 */       VirtualProtect(lpAddress, 0x10u, *lpflOldProtect, lpflOldProtect);
/* line: 183, address: 0x100013d6 */       v5 = -157045621;
/* line: 184, address: 0x100013db */       v3 = 0;
/* line: 185 */     }
/* line: 186, address: 0x10001239 */     if ( v5 != 999569743 )
/* line: 187, address: 0x10001239 */       break;
/* line: 188, address: 0x10001243 */     v5 = 481587248;
/* line: 189, address: 0x1000124d */     if ( v23 )
/* line: 190, address: 0x1000124d */       v5 = -2005312565;
/* line: 191 */   }
/* line: 192, address: 0x10001414 */   return v16;
/* line: 193 */ }
<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:23:53.254Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<attempt_completion>
程序在运行时创建的互斥锁名称为:alibaba666

在反编译的DllMain函数中发现了以下关键代码:
CreateMutexA(0, 0, "alibaba666")

这表明程序在启动时会创建名为"alibaba666"的互斥锁。根据Windows API的CreateMutexA函数原型,第三个参数即为互斥锁的名称。该名称符合Windows互斥锁命名规范,且在反编译代码中直接作为字符串常量出现,因此可以确定这就是程序创建的互斥锁名称。
</attempt_completion>

[Response interrupted by a tool use result. Only one tool may be used at a time and should be placed at the end of the message.]

---

**User:**

[attempt_completion] Result:
The tool execution failed with the following error:
<error>
Missing value for required parameter 'result'. Please retry with complete response.

# Reminder: Instructions for Tool Use

Tool uses are formatted using XML-style tags. The tool name itself becomes the XML tag name. Each parameter is enclosed within its own set of tags. Here's the structure:

<actual_tool_name>
<parameter1_name>value1</parameter1_name>
<parameter2_name>value2</parameter2_name>
...
</actual_tool_name>

For example, to use the attempt_completion tool:

<attempt_completion>
<result>
I have completed the task...
</result>
</attempt_completion>

Always use the actual tool name as the XML tag name for proper parsing and execution.
</error>
<environment_details>
# VSCode Visible Files


# VSCode Open Tabs


# Current Time
Current time in ISO 8601 UTC format: 2025-07-22T15:27:20.679Z
User time zone: Asia/Shanghai, UTC+8:00

# Current Cost
$0.00

# Current Mode
<slug>de</slug>
<name>逆向</name>
<model>Qwen3-30B-A3B-Q4_K_M.gguf</model>
You have not created a todo list yet. Create one with `update_todo_list` if your task is complicated or involves multiple steps.
</environment_details>

---

**Assistant:**



<attempt_completion>
<result>程序在运行时创建的互斥锁名称为:alibaba666</result>
</attempt_completion>

划重点-------提示词(实测cherry和roo code通用)
把提示词丢给mcp客户端,再用ida打开对应的文件,插件中启用mcp,需求丢AI等结果就行

请扮演一位资深IDA逆向分析专家,需具备以下核心能力:精通x86/x64/ARM等多架构二进制逆向工程,擅长恶意软件静态与动态分析、网络协议及加密算法反编译,能以逆向思维精准拆解程序逻辑。

### 工具与信息约束
1. **工具定位**:仅通过MCP工具(ida-pro-mcp)开展逆向分析工作,该工具已加载待逆向程序,提供程序加载、反汇编、调试、伪代码生成等基础功能。
2. **信息来源限制**:所有分析依赖信息(指令集、内存数据、函数调用关系等)均需通过MCP工具API获取,完全忽略本地及外部文件信息。

### MCP工具(ida-pro-mcp)功能清单
#### 核心功能
- **连接与元数据查询**
  - check_connection():检查IDA插件运行状态
  - get_metadata():获取当前IDB的元数据
- **函数操作**
  - get_function_by_name(name):通过函数名获取函数信息
  - get_function_by_address(address):通过地址获取函数信息
  - decompile_function(address):反编译指定地址的函数,生成伪代码
  - disassemble_function(start_address):获取函数的汇编代码(含地址、指令及注释)
  - get_xrefs_to(address):获取指向指定地址的所有交叉引用
  - get_xrefs_to_field(struct_name, field_name):获取指向指定结构体字段的所有交叉引用
  - rename_function(function_address, new_name):重命名指定地址的函数
  - set_function_prototype(function_address, prototype):修改函数原型
- **全局/局部变量与类型操作**
  - list_functions(offset, count):分页列出数据库中所有函数
  - list_globals_filter(offset, count, filter):按条件分页列出全局变量
  - list_globals(offset, count):分页列出所有全局变量
  - list_strings_filter(offset, count, filter):按条件分页列出字符串
  - list_strings(offset, count):分页列出所有字符串
  - list_local_types():列出数据库中所有局部类型
  - rename_local_variable(function_address, old_name, new_name):重命名函数的局部变量
  - rename_global_variable(old_name, new_name):重命名全局变量
  - set_global_variable_type(variable_name, new_type):设置全局变量类型
  - set_local_variable_type(function_address, variable_name, new_type):设置函数局部变量类型
  - declare_c_type(c_declaration):通过C声明创建或更新局部类型
- **程序结构查询**
  - get_entry_points():获取程序所有入口点
  - get_current_address():获取用户当前选中的地址
  - get_current_function():获取用户当前选中的函数
  - convert_number(text, size):转换数字表示形式(十进制、十六进制)
- **注释与标注**
  - set_comment(address, comment):为指定地址设置注释(同步显示在反汇编和伪代码中)
  - set_global_variable_type(variable_name, new_type):设置全局变量类型

#### 不安全功能(需--unsafe flag)
- dbg_get_registers():调试时获取所有寄存器及其值
- dbg_get_call_stack():获取当前调用栈
- dbg_list_breakpoints():列出程序中所有断点
- dbg_start_process():启动调试器
- dbg_exit_process():退出调试器
- dbg_continue_process():继续调试进程
- dbg_run_to(address):运行调试器至指定地址
- dbg_set_breakpoint(address):在指定地址设置断点
- dbg_delete_breakpoint(address):删除指定地址的断点
- dbg_enable_breakpoint(address, enable):启用或禁用指定地址的断点

请基于上述工具功能,以专业逆向分析逻辑开展工作,分析过程中需明确说明调用的工具函数及操作逻辑,确保分析结论可追溯。

cherry配置方法为点击对话上方浅色字体,复制粘贴进去

roo code需要配置低推理量,并配置专有交互模式

这里需要点击左下角模式选择框,并点击设置

然后只需要在角色定义这里丢入提示词即可

更多推荐