rev-dex-dumper
Dump DEX files from a running Android app for unpacking/deobfuscation. Activate when the user wants to unpack an Android APK,…
Restore function symbols by analyzing code patterns, strings, constants, and cross-references
$ npx -y skills add p4nda0s/reverse-skills --skill rev-symbol --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/rev-symbolContext preview
The summary Claude sees to decide when to auto-load this skill.
Restore function symbols by analyzing code patterns, strings, constants, and cross-references
name: rev-symbol description: Restore function symbols by analyzing code patterns, strings, constants, and cross-references
Analyze function code characteristics to recover/identify function symbols and names.
**Determine which IDA access method is available:**
**Option A — IDA Pro MCP (preferred if connected):** Check if the IDA Pro MCP server is connected (look for an active `ida-pro` or equivalent MCP connection). If connected, you can query IDA directly via MCP tools — no exported files needed. Proceed with the analysis using MCP.
**Option B — IDA-NO-MCP exported data:** If MCP is not connected, check if IDA-NO-MCP exported data exists in the current directory:
1. Check if `decompile/` directory exists 2. Check if there are `.c` files inside
If neither MCP nor exported data is available, prompt the user:
No IDA access method detected. Choose one of the following: Option A — IDA Pro MCP (recommended): Connect the IDA Pro MCP server so Claude can query IDA directly. Option B — IDA-NO-MCP export: 1. Download plugin: https://github.com/P4nda0s/IDA-NO-MCP 2. Copy INP.py to IDA plugins directory 3. Press Ctrl-Shift-E in IDA to export 4. Open the exported directory with Claude Code
---
./ ├── decompile/ # Decompiled C code directory │ ├── 0x401000.c # One file per function, named by hex address │ ├── 0x401234.c │ └── ... ├── decompile_failed.txt # Failed decompilation list ├── decompile_skipped.txt # Skipped functions list ├── strings.txt # String table (address, length, type, content) ├── imports.txt # Import table (address:function_name) ├── exports.txt # Export table (address:function_name) └── memory/ # Memory hexdump (1MB chunks)
Each `.c` file contains function metadata comments and decompiled code:
/*
* func-name: sub_401000
* func-address: 0x401000
* callers: 0x402000, 0x403000 // List of functions that call this function
* callees: 0x404000, 0x405000 // List of functions called by this function
*/
int __fastcall sub_401000(int a1, int a2)
{
// Decompiled code...
}---
Carefully examine the target function for:
If you can identify a known algorithm through constants/structure, tell the user directly.
**Analyze Callees (called functions):**
**Paired function patterns (identify by matching call pairs):**
// malloc/free, new/delete, alloc/dealloc
xx = sub_A(0x100); // alloc: takes size, returns pointer
...
sub_B(xx); // free: takes the same pointer
// mutex_lock/mutex_unlock, pthread_mutex_lock/unlock
sub_A(lock_ptr); // lock
... // critical section
sub_B(lock_ptr); // unlock (same lock object)
// open/close, fopen/fclose, CreateFile/CloseHandle
fd = sub_A("/path", 0); // open: path + flags, returns handle
...
sub_B(fd); // close: takes the handle
// pthread_create/pthread_join
sub_A(&tid, 0, func, arg); // create: out param, attr, func, arg
...
sub_B(tid, &ret); // join: tid, out param
**Argument pattern recognition:**
```c
// socket(AF_INET, SOCK_STREAM, 0) - fixed constants
sub_XXX(2, 1, 0); // socket: domain=2, type=1, protocol=0
// connect/bind(sockfd, addr, addrlen)
sub_XXX(fd, &var, 16); // addr struct, len=16 for IPv4
// memcpy/memmove(dst, src, size)
sub_XXX(dst, src, n); // 3 params: dst, src, count
// memset(ptr, value, size)
sub_XXX(ptr, 0, 0x100); // 3 params: ptr, byte value, count
// read/write(fd, buf, count)
ret = sub_XXX(fd, buf, n); // returns bytes read/written
// strcmp/strncmp(s1, s2) or (s1, s2, n)
if (sub_XXX(s1, s2) == 0) // returns 0 on equal**Return value patterns:**
// file/socket operations: -1 on error if ((fd = sub_XXX(...)) == -1) goto error; // allocation: NULL on failure if (!(ptr = sub_XXX(size))) goto error; // success/error: 0 = success if (sub_XXX(...) != 0) goto error; // strlen: returns size_t len = sub_XXX(str); sub_YYY(dst, src, len); // len used in memcpy
**Analyze Callers (calling functions):**
Collect the following information:
Based on collected information: 1. First attempt local reasoning based on:
2. If uncert
逆向工程分析技能,支持 40+ 种 AI 编程工具。 专为 IDA-NO-MCP 设计 - 从 IDA 导出反编译结果,然后使用 AI 编程工具进行分析。
Dump DEX files from a running Android app for unpacking/deobfuscation. Activate when the user wants to unpack an Android APK,…
Generate Frida hook scripts using modern Frida API. Activate when the user wants to write Frida scripts, hook functions at…
IDAPython and IDALib script reference for reverse engineering. Activate when the user needs to write IDAPython scripts in IDA,…
Reconstruct data structures by analyzing memory access patterns across functions
Dump Unity IL2CPP symbols from iOS/Android builds. Extract method names, addresses, and type info from IL2CPP binaries and…
Debug and emulate specific code fragments or functions using the Unicorn engine. Activate when the user wants to emulate a…