系统调用/函数调用跟踪

SkillMonitoring & ops

系统调用/函数调用跟踪:strace/ltrace/dtruss。 触发词:strace、跟踪系统调用、ltrace、API监控

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the 系统调用/函数调用跟踪 skill

What this skill tells your AI

The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-tracing/SKILL.md and read by ahel’s review.

何时使用 / 何时不用

  • 用:观察程序运行行为(文件/网络/进程操作);记录系统调用与库调用序列作为证据;定位动态解析的 API(GetProcAddress/dlopen 之后)
  • 不用:只需内存内容(走 [[re-memdump]]);只需静态逻辑(反编译技能)
  • 不用:Windows 目标用 APIMonitor/ProcMon(本技能 Linux/macOS 为主)

工具准备

参考 [[re-analyze/platform-tips]] 最高原则——跟踪即动态执行,默认在沙箱内进行,网络隔离。

strace(Linux)

  • Debian/Ubuntu: apt install strace
  • Fedora/RHEL: dnf install strace
  • Arch: pacman -S strace
  • WSL: Linux 包直接可用
  • 验证: strace -V
  • 常用选项:-f 跟子进程、-o 写文件、-e trace= 过滤、-s 200 放大字符串显示(默认 32 字节)、-x 非 ASCII 转十六进制、-y/-yy 把 fd 解析为路径、-c 汇总统计、-p attach——速查与组合见 [[commands]]

ltrace(Linux 库调用)

  • Debian/Ubuntu: apt install ltrace
  • Fedora/RHEL: dnf install ltrace
  • Arch: pacman -S ltrace
  • 验证: ltrace -V

dtruss(macOS,DTrace 版 strace)

  • macOS 自带(随 Xcode CLT);需要 root 且部分 SIP 场景受限
  • 验证: sudo dtruss -c ls / 2>&1 | head 输出去重调用统计

APIMonitor / ProcMon(Windows)

  • APIMonitor: rohitab.com 下载 zip 解压即用
  • ProcMon: Microsoft Sysinternals —— choco install sysinternals(或官网下载)
  • 验证: 打开 APIMonitor/ProcMon 能列出并附加进程

操作步骤

  1. strace -f 全进程树跟踪

    strace -f -o trace.log ./target args
    

    -f 必须加:跟随 fork/vfork/clone 子进程——不加会漏掉全部子进程行为。 -tt 加微秒时间戳,-T 加每调用耗时(网络等待/慢调用线索);-s 200 放大字符串显示(默认 32 字节,路径/参数看不全时必加)。 已运行的目标用 attach(看不到 attach 之前的调用):

    sudo strace -f -p <pid> -o attach.log     # attach 需要与目标同权限
    strace -f -c ./target                      # 退出时打印系统调用计数/耗时汇总(热点定位)
    
  2. 过滤(-e trace=...)

    strace -f -e trace=network,file ./target     # 只看网络与文件
    strace -f -e trace=write,read ./target       # 只看读写
    strace -f -e trace=execve,fork,clone ./target # 只看进程行为
    strace -f -e trace=!futex ./target           # 排除噪声(futex 高频)
    

    过滤规则先白名单后黑名单,控制输出体积(见坑 2)。

  3. ltrace 库调用

    ltrace -f -o lib.log ./target
    ltrace -e malloc+free ./target        # 只跟踪指定库函数
    ltrace -l /path/libfoo.so ./target    # 跟踪 dlopen 动态加载的库
    ltrace -f -S ./target                 # 库调用 + 系统调用一起跟踪
    ltrace -f -c ./target                 # 退出时库调用汇总
    

    动态解析的 API(dlsym 拿到的函数)不会出现在静态 IAT 里,但会出现在 ltrace 输出中——与 [[re-imports]] 互补。

  4. 输出保存为证据

    strace -f -tt -o evidence/trace-$(date +%s).log ./target
    # 或
    ltrace -f -o evidence/libcall.log ./target
    

    每条记录带 pid 与时间戳;分析完成后在笔记中引用文件路径与哈希(样本与日志各存 sha256,见 [[re-triage]])。

  5. Windows 用 APIMonitor/ProcMon

    • APIMonitor: 运行(管理员)→ 选中目标进程 → 勾选要监控的 API 类(File/Network/Registry/Process)→ 附加,观察调用参数与返回值
    • ProcMon: 全系统级(文件/注册表/网络/进程事件),先按进程过滤(Process Name 过滤目标名),再按 Operation 过滤
    • 可疑点: 对注入类 API 连续调用序列(OpenProcess→VirtualAllocEx→WriteProcessMemory→CreateRemoteThread)即恶意行为证据

指令级追踪

比系统调用级更深一层——指令粒度执行流:

  • QEMU 插件-plugin 加载指令级 trace 插件(insn 粒度、call/ret 路径、guest 代码块事件);用途——脱壳后真实路径还原、反混淆(静态混淆无法隐藏实际执行)
  • Intel PT:硬件 trace(perf record -e intel_pt)→ 解码(perf script 或第三方解析)→ 分支流还原;用途——无插桩开销的完整执行路径
  • trace 分析:热点(执行频次排序)、路径还原(调用链重建)、与 [[re-deobfuscate]] 衔接(按真实路径过滤死代码)
  • 输出:指令级执行流摘要(供 [[re-analyze/analysis-contract]] 证据存档)

跨域联合

  • [[re-binary-core]]:工作流第 6 步(行为跟踪)
  • [[re-malware]]:恶意行为观察(回连/持久化/自启动)
  • [[re-cracking]]:监控校验/注册相关的 API 调用参数
  • 与 [[re-imports]] 互补(动态解析 API);发现反调试时转 [[re-anti-analysis]]
  • [[re-ebpf]]:BPF 观测/跟踪取证还原——strace 覆盖不到的 skb/内核路径由 BPF 观测互补

常见坑与陷阱

  • 不加 -f 漏子进程:目标 fork 后父进程退出/exec,未跟踪的子进程行为全部丢失——-f 是标配
  • 输出巨大:不过滤时大程序日志可达 GB 级拖垮磁盘——先 -e trace= 白名单,必要时 -o 写文件而非终端
  • 反调试样本检测 trace 环境ptrace 状态检测/LD_PRELOAD 痕迹暴露 strace/ltrace——与 [[re-anti-analysis]] 的反调试绕过组合使用
  • ltrace 默认只跟踪 PLT 层调用——dlopen 后加载的库函数要加 -l 显式指定
  • 命令族速查与操作序列见 [[commands]];工具特有坑与版本差异见 [[gotchas]]

Signals

GitHub stars
57
Forks
8
Last commit
Sep 2026

ahel review

  • K1binfo
    installs-packages

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
re-tracing
Source
github.com/dslsdzc/rev-skills