Skip to main content

asm-analysis

深度汇编代码逆向分析技能,专注 Linux 环境动态调试与静态分析协同。自动协调 GDB/LLDB/r2/Frida/angr/strace/ltrace/perf/bpftrace 等工具完成完整分析链路。内置上下文记忆机制:每 10 轮自动生成分析快照 skill,保持长对话连续性并降低幻觉。触发词:汇编分析、逆向工程、GDB、r2、radare2、frida、动态调试、二进制分析、ELF 分析、加密算法识别、编译器优化、混淆脱壳、struct 恢复、调试、strace、ltrace、内存分析等。

ソース情報

リポジトリ
alicewe1/alice_skill
ソースの最終更新活動
2026年9月23日 19:28
検出された SKILL.md の言語
中国語
スター
40
フォーク
6

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
13 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
asm-analysis
description
深度汇编代码逆向分析技能,专注 Linux 环境动态调试与静态分析协同。自动协调 GDB/LLDB/r2/Frida/angr/strace/ltrace/perf/bpftrace 等工具完成完整分析链路。内置上下文记忆机制:每 10 轮自动生成分析快照 skill,保持长对话连续性并降低幻觉。触发词:汇编分析、逆向工程、GDB、r2、radare2、frida、动态调试、二进制分析、ELF 分析、加密算法识别、编译器优化、混淆脱壳、struct 恢复、调试、strace、ltrace、内存分析等。
x-alice-class
assist
# 汇编分析优化技能 (asm-analysis) ## 完整工作流 ``` 阶段 0 架构确认 + 白皮书加载 ↓ 阶段 T 工具协调(Linux 调试环境全量探测与任务分派)★ 核心强化 ↓ 阶段 O 混淆与加壳检测(UPX/OLLVM/VMProtect 识别与处置) ↓ 阶段 1 算法特征识别(加密/哈希/压缩 宏观扫描) ↓ 阶段 2 文件编译信息提取(编译器/优化级别/安全标志) ↓ 阶段 D 数据结构恢复(vtable/struct 布局/类型重建) ↓ 阶段 3 逐块分析(指令注释 + 伪代码生成) ↓ 阶段 4 持续分析协议 ↓ 阶段 5 综合报告 ↓ 阶段 M 记忆机制(每 10 轮自动生成上下文快照 skill)★ 新增 ``` **跳过规则**: - 仅代码片段 → 跳过 T.1 环境探测,直接 T.3 生成命令 - 无可执行文件 → 跳过阶段 O(脱壳需运行) - 无 OOP 特征 → 跳过阶段 D vtable 分析 --- ## 阶段 0:启动协议 ### 架构确认 ``` 请问要分析的代码属于哪种架构? [A] x86 / x86-64 [B] ARM64 / AArch64 [C] 其他 ``` 上下文有明显架构特征时可直接确认并等待认可。 ### 白皮书加载(URL 索引见 references/whitepaper-urls.md) - **x86**:Intel SDM Vol.2 → https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html - **ARM64**:ARM DDI 0487 → https://developer.arm.com/documentation/ddi0487/latest **拒绝加载时必须输出(不可跳过):** > ⚠️ 未加载权威指令手册:SIMD 指令语义误判风险高,内存序语义(rep movs/stlr/ldar)可能歧义,伪代码可能与实际行为偏差。继续,保留此风险提示。 --- ## 阶段 T:Linux 动态调试协调(Tool Orchestration)★ > 详细命令手册见 `references/tool-commands.md` > Linux 专项调试流程见 `references/linux-debug-workflows.md` > Frida 脚本库见 `references/frida-scripts.md` > angr 工作流见 `references/angr-workflows.md` ### T.1 — Linux 调试环境全量探测 ```bash # ── 调试器 ── for t in gdb lldb; do which $t 2>/dev/null && $t --version 2>&1 | head -1 || echo "$t: not found" done # GDB 插件检测 python3 -c " import subprocess, os for plugin in ['pwndbg','gef','peda']: r = subprocess.run(['gdb','-batch','-ex',f'python import {plugin}'], capture_output=True, text=True) print(plugin, 'ok' if r.returncode==0 else 'not found') " 2>/dev/null # ── 静态分析 ── for t in r2 objdump readelf nm strings file rabin2; do which $t 2>/dev/null && echo "$t: ok" || echo "$t: not found" done r2 -q -c 'pdg 1 @ 0' /dev/null 2>/dev/null | grep -q ghidra && echo "r2ghidra: ok" || echo "r2ghidra: not found" # ── Linux 动态追踪工具 ── for t in strace ltrace perf valgrind bpftrace systemtap addr2line eu-stack; do which $t 2>/dev/null && $t --version 2>&1 | head -1 || echo "$t: not found" done # ── 符号执行 / 动态插桩 ── python3 -c "import frida; print('frida:', frida.__version__)" 2>/dev/null || echo "frida: not found" python3 -c "import angr; print('angr:', angr.__version__)" 2>/dev/null || echo "angr: not found" # ── 系统环境 ── uname -a cat /proc/sys/kernel/yama/ptrace_scope 2>/dev/null && echo "(ptrace_scope)" || true cat /proc/sys/kernel/randomize_va_space 2>/dev/null && echo "(ASLR)" || true cat /proc/sys/kernel/perf_event_paranoid 2>/dev/null && echo "(perf_paranoid)" || true # ── core dump 配置 ── ulimit -c cat /proc/sys/kernel/core_pattern 2>/dev/null || true ``` 输出格式: ``` 🔧 Linux 调试环境 调试器 : GDB 13.2 [pwndbg] / LLDB 15.0 静态 : r2 5.8.8 [r2ghidra] / objdump / readelf / rabin2 追踪 : strace 6.1 / ltrace 0.7.3 / perf 6.1 / bpftrace 0.18 插桩 : Frida 16.2.1 / angr 9.2.90 Valgrind: 3.21.0 内核 : 6.1.0-amd64 | ASLR=2 | ptrace_scope=1 | perf_paranoid=2 core : ulimit=-1 | pattern=/tmp/core.%e.%p ``` ### T.2 — 工具选择策略(Linux 优先级) | 分析目标 | 首选 | 辅助 | |---------|------|------| | 通用动态调试 | GDB + pwndbg | r2(静态补充) | | 系统调用追踪 | strace | ltrace(库函数) | | 内存错误检测 | Valgrind (memcheck) | GDB watchpoint | | 函数调用追踪 | ltrace / Frida | GDB breakpoints | | 性能热点 | perf record + report | GDB profiling | | 内核态追踪 | bpftrace / perf | systemtap | | 符号执行 | angr | GDB + Python | | 纯静态 stripped | r2 aaa | angr CFGFast | | 多线程调试 | GDB thread cmds | Helgrind (Valgrind) | | core dump 分析 | GDB + core | eu-stack | | 动态库 Hook | LD_PRELOAD / Frida | GDB catch load | **ptrace_scope 限制处理:** ```bash # scope=1(默认):只能调试子进程,无法附加任意进程 # 临时降低(需 root): echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope # 永久(不推荐): # echo 'kernel.yama.ptrace_scope = 0' >> /etc/sysctl.d/10-ptrace.conf # 非 root 替代方案:用 gdb -f ./target 直接启动 ``` **ASLR 控制:** ```bash # 关闭 ASLR(当前 shell 子进程) setarch $(uname -m) -R gdb ./target # 或 GDB 内 (gdb) set disable-randomization on # GDB 默认已开启此项 ``` ### T.3 — 任务驱动命令生成 每次生成命令前说明意图,命令后说明预期输出。 #### 全工具命令速查表 | 任务 | GDB | r2 | strace/ltrace | Frida | |------|-----|----|----------------|-------| | 加载并分析 | `gdb -q ./bin` | `r2 -A ./bin` | `strace ./bin` | `frida -f ./bin -l s.js` | | 函数列表 | `info functions` | `afl` | `ltrace ./bin 2>&1 \| grep -o "^[a-z_]*"` | `Module.enumerateExports()` | | 反汇编函数 | `disas <fn>` | `pdf @ <fn>` | — | — | | 断点(地址) | `b *0x<addr>` | `db 0x<addr>` | — | `Interceptor.attach(ptr(...))` | | 内存查看 | `x/16xb 0x<a>` | `px 16 @ 0x<a>` | — | `hexdump(ptr('0x<a>').readByteArray(16))` | | 系统调用追踪 | `catch syscall <name>` | — | `strace -e trace=<name>` | `Stalker` | | 库函数追踪 | `b <func>` | `axt @ <func>` | `ltrace -e <func>` | `Interceptor.attach` | | 内存 dump | `dump binary memory out.bin s e` | `wtf out.bin sz @ addr` | — | `Memory.readByteArray` | | 搜索字节 | `find s,+len,bytes` | `/x <hex>` | — | `Memory.scan` | | 动态库断点 | `b dlopen` | — | `ltrace -e dlopen` | `Module.load` event | | 进程内存图 | pwndbg `vmmap` | `dm` | `/proc/<pid>/maps` | `Process.enumerateRanges` | | 线程列表 | `info threads` | — | `strace -f` | `Process.enumerateThreads` | | 调用栈 | `bt full` | `dbt` | — | `Thread.backtrace` | #### pwndbg 优先命令(有插件时必用) ```gdb vmmap # 内存映射全览(彩色,清晰) telescope $rsp 20 # 栈递归指针解引用(20 层) telescope $rdi 8 # 查看参数指向的数据链 hexdump $rdi 64 # 彩色 hex dump context # 完整上下文(寄存器+栈+反汇编一屏显示) nearpc 20 # 当前 PC 前后 20 条指令 got # GOT 表当前内容 plt # PLT 表 checksec # 安全标志汇总 rop --grep "pop rdi; ret" # ROP gadget 搜索 heap # 堆 chunk 状态 bins # tcache/fastbin/unsorted 状态 vis_heap_chunks # 可视化堆布局 threads # 线程列表 + 当前状态 ``` #### strace 专项命令模板 ```bash # 基础系统调用追踪(含时间戳) strace -tt -T ./target 2>&1 | tee /tmp/strace.log # 只追踪文件相关系统调用 strace -e trace=file ./target # 只追踪网络相关 strace -e trace=network ./target # 追踪内存操作(mmap/mprotect/brk) strace -e trace=memory ./target # 追踪信号 strace -e trace=signal ./target # 跟踪子进程(-f)+ 附加到 pid strace -f -p <pid> # 统计系统调用次数和耗时 strace -c ./target # 输出到文件(每个进程/线程独立文件) strace -ff -o /tmp/strace_out ./target # 生成 /tmp/strace_out.<pid> 文件 # 在特定系统调用时注入失败(fault injection) strace --inject=open:error=ENOENT ./target # 解码结构体(-v 详细,-s 字符串长度) strace -v -s 256 ./target ``` #### ltrace 专项命令模板 ```bash # 追踪所有库函数调用 ltrace ./target # 只追踪特定函数 ltrace -e strcmp -e memcmp -e strncmp ./target # 追踪加密相关函数 ltrace -e EVP_* -e AES_* -e RSA_* -e MD5_* ./target # 附加到运行中进程 ltrace -p <pid> # 含时间戳 + 详细输出 ltrace -tt -T -n 2 ./target # 跟踪子进程 ltrace -f ./target # 统计调用次数 ltrace -c ./target # 显示库函数的完整参数(含结构体) ltrace -b -S ./target # -b: 抑制信号,-S: 显示系统调用 ``` #### perf 专项命令模板 ```bash # 记录函数调用图(频率采样) perf record -g -F 999 ./target perf report --stdio # 追踪特定事件(cache miss / branch miss) perf stat -e cache-references,cache-misses,branches,branch-misses ./target # 追踪系统调用(perf trace = strace 加强版) perf trace ./target perf trace -e 'syscalls:sys_enter_*' ./target # 动态探针(无需修改源码,类似 kprobe) # 在函数入口处插入探针 perf probe -x ./target --add 'target_func' perf record -e probe_target:target_func -g ./target perf script # 火焰图生成 perf record -F 99 -g -- ./target perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg # 内核函数追踪 sudo perf record -e 'syscalls:sys_enter_read' -ag sleep 5 ``` #### bpftrace 专项命令(内核级追踪) ```bash # 追踪某进程所有系统调用 sudo bpftrace -e ' tracepoint:syscalls:sys_enter_* /pid == <PID>/ { printf("%s\n", probe); } ' # 追踪 malloc/free(用户空间探针) sudo bpftrace -e ' uprobe:/lib/x86_64-linux-gnu/libc.so.6:malloc { printf("malloc(%d) pid=%d\n", arg0, pid); } uprobe:/lib/x86_64-linux-gnu/libc.so.6:free { printf("free(%p) pid=%d\n", arg0, pid); } ' # 追踪特定函数的参数(字符串类型) sudo bpftrace -e ' uprobe:./target:strcmp { printf("strcmp(%s, %s)\n", str(arg0), str(arg1)); } ' # 统计系统调用频率(10 秒) sudo bpftrace -e ' tracepoint:syscalls:sys_enter_* { @[probe] = count(); } interval:s:10 { print(@); clear(@); } ' # 追踪 mprotect(检测动态解码/脱壳) sudo bpftrace -e ' tracepoint:syscalls:sys_enter_mprotect /pid == <PID>/ { printf("mprotect addr=%lx len=%lu prot=%d\n", args->addr, args->len, args->prot); } ' ``` #### Valgrind 专项 ```bash # 内存错误检测(最常用) valgrind --tool=memcheck --leak-check=full --track-origins=yes \ --show-reachable=yes ./target 2>&1 | tee /tmp/valgrind.log # 只报告明确泄漏(减少噪音) valgrind --leak-check=full --show-leak-kinds=definite ./target # 调用图分析(callgrind) valgrind --tool=callgrind ./target callgrind_annotate callgrind.out.<pid> # 堆分析(massif) valgrind --tool=massif --pages-as-heap=yes ./target ms_print massif.out.<pid> # 多线程竞态检测(helgrind) valgrind --tool=helgrind ./target ``` #### /proc 文件系统集成 ```bash # 实时内存映射(比 vmmap 更原始,无需 debugger) cat /proc/<pid>/maps # 直接读取进程内存(需 root 或 ptrace 权限) dd if=/proc/<pid>/mem bs=1 skip=$((0x401000)) count=256 2>/dev/null | xxd # 文件描述符 ls -la /proc/<pid>/fd # 命令行参数 + 环境变量 cat /proc/<pid>/cmdline | tr '\0' ' ' cat /proc/<pid>/environ | tr '\0' '\n' # 信号状态(哪些信号被屏蔽/挂起) cat /proc/<pid>/status | grep -E "Sig|Threads|VmRSS" # 打开的文件 + 网络连接 cat /proc/<pid>/net/tcp cat /proc/<pid>/net/tcp6 ``` #### core dump 分析工作流 ```bash # 1. 开启 core dump(当前 shell) ulimit -c unlimited echo '/tmp/core.%e.%p' | sudo tee /proc/sys/kernel/core_pattern # 2. 运行触发崩溃的程序(或复现已知崩溃) ./target <crashing_input> # 生成 /tmp/core.target.<pid> # 3. GDB 加载 core gdb ./target /tmp/core.target.<pid> (gdb) bt full # 查看崩溃时的完整调用栈 (gdb) info registers # 崩溃时寄存器状态
GitHubで見る
この SKILL.md は非常に大きいため、SkillsMP では最初のセクションだけを表示しています。 GitHubで見る