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
آخر نشاط في المصدر
٢٣ سبتمبر ٢٠٢٦ في ١٩:٢٨
لغة SKILL.md المكتشفة
الصينية
النجوم
٤٠
التفرعات
٦

خيارات التثبيت

يُحدَّد 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