Skip to content

Instantly share code, notes, and snippets.

@binsarjr
Last active March 22, 2026 15:22
Show Gist options
  • Select an option

  • Save binsarjr/347fe4441d70eef34728ea121d2b69f0 to your computer and use it in GitHub Desktop.

Select an option

Save binsarjr/347fe4441d70eef34728ea121d2b69f0 to your computer and use it in GitHub Desktop.
Docker-First Reverse Engineering Skills

Docker-First Reverse Engineering Setup

Quick Start

For AI Agent (Claude Code)

Share this gist link with your AI agent:

https://gist.github.com/binsarjr/347fe4441d70eef34728ea121d2b69f0

Tell the agent: "Read the gist above and use it for reverse engineering the APK in this folder."

Workflow

┌─────────────────────────────────────┐
│ 1. Run docker-setup.sh              │
│    (Prepare Docker environment)      │
└────────────────┬────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────┐
│ 2. Identify target type             │
│    (APK / IPA / Web)                │
└────────────────┬────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────┐
│ 3. Extract via Docker               │
│    (SEQUENTIAL)                     │
└────────────────┬────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────┐
│ 4. Analyze via Docker               │
│    (PARALLEL - 6 tasks)            │
│    - Manifest analysis              │
│    - Endpoint extraction            │
│    - Secrets detection              │
│    - Certificate analysis           │
│    - Network security               │
│    - Third-party SDKs              │
└────────────────┬────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────┐
│ 5. Deobfuscate (PARALLEL)          │
│    - Decode Base64/hex/XOR          │
│    - Trace crypto                   │
│    - Anti-analysis detection        │
│    - Decoy vs real classification   │
└────────────────┬────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────┐
│ 6. Report                           │
│    findings/[app]-[date]/          │
└─────────────────────────────────────┘

Docker Images

Image Purpose Pre-pull
cryptax/android-re APK analysis (jadx, apktool) 3 (1.7GB)
trufflesecurity/trufflehog Secret scanning 2
zricethezav/gitleaks Secret scanning 1 (smallest)
node:20-alpine Web bundle beautify on-demand

Files in Gist

File Description
SKILLS.md Docker-first reverse engineering skill (Chinese)
AGENT_TEAMS.md 5-role team configuration
docker-setup.sh Docker readiness script
README.md This file

Project Structure

reverse-mobile/
├── SKILLS.md           # Docker-first skill (for AI agents)
├── AGENT_TEAMS.md      # Team roles & workflow
├── docker-setup.sh     # Docker readiness script
├── CLAUDE.md           # Project instructions
├── README.md           # This file
└── findings/           # Analysis output

Tips

  1. Always run ./docker-setup.sh first before starting analysis
  2. Share the Gist URL with AI agents for consistent instructions
  3. Docker-first: Always try Docker first, local tools are only fallback
  4. Parallel analysis: Use Task tool for parallel analysis tasks

Troubleshooting

Docker daemon not running

# macOS
open -a Docker

# Linux
sudo systemctl start docker

Image pull failed

# Manual pull
docker pull cryptax/android-re:latest
docker pull trufflesecurity/trufflehog:latest
docker pull zricethezav/gitleaks:latest

Permission issues

# Ensure -u $(id -u):$(id -g) is used in docker run
docker run --rm -u $(id -u):$(id -g) -v /path:/work cryptax/android-re jadx ...

代理团队配置:逆向工程小组

团队概述

团队名称:reverse-engineering-squad 目的:使用Docker优先方案对Android APK、iOS IPA和Web包进行多代理静态分析 定位:Docker优先 - 所有工具通过Docker容器执行,除非Docker不可用

支持的目标类型

类型 扩展名 流程
Android APK .apk.aab APK流程
iOS IPA .ipa IPA流程
Web/JS包 .js.js.map.bundle Web流程

团队成员

1. 编排器

角色:工作流协调员

职责

  • 识别目标类型(APK/IPA/Web)
  • 根据流程阶段分配任务给团队成员
  • 监控进度并汇总发现
  • 处理错误恢复和继续
  • 决定Docker与本地工具的回退方案

使用的工具

  • Task工具(生成子代理)
  • Bash(文件操作、Docker状态检查)
  • Read工具(审查输出)

沟通

  • 输入:来自用户的目标文件路径或URL
  • 输出:分配任务给提取器、分析器、混淆器、报告器
  • 来自所有代理的完成信号

2. 提取器

角色:Docker和文件提取

职责

  • 每个流程的第1阶段:文件提取和环境设置
  • 管理分析的Docker容器生命周期
  • 运行初始解码/反编译命令
  • 计算文件哈希并验证目标类型
  • 在会话开始时预拉取Docker镜像

Docker命令

# APK提取
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/目标.apk:/work/target.apk:ro \
  cryptax/android-re \
  apktool d /work/target.apk -o /work/apktool-output

docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/目标.apk:/work/target.apk:ro \
  cryptax/android-re \
  jadx -d /work/jadx-output /work/target.apk

# 调用图生成(APK)
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/目标.apk:/work/target.apk:ro \
  cryptax/android-re \
  androcg -o /work/raw/callgraph.gml /work/target.apk

# Web包美化
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/bundle.js:/work/bundle.js:ro \
  node:20-alpine \
  npx js-beautify -s /work/bundle.js -o /work/bundle-beautified.js

输出

  • 包含提取/反编译内容的 raw/ 目录
  • raw/callgraph.gml(APK流程)
  • 报告元数据的哈希值

沟通

  • 接收:来自编排器的目标路径
  • 发送:提取的文件位置给分析器和混淆器

3. 分析器

角色:静态分析专家

职责

  • 跨多个专业领域进行并行静态分析
  • 使用Task工具并行运行多个分析任务
  • 清单/plist解析、字符串提取、端点发现
  • 使用trufflehog/gitleaks进行敏感信息扫描
  • 证书和签名分析
  • 网络安全审查
  • 第三方SDK识别
  • 使用Mermaid图进行代码流分析

Docker命令

# TruffleHog敏感信息扫描
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/反编译源码:/work/source:ro \
  trufflesecurity/trufflehog:latest \
  filesystem /work/source --no-update

# Gitleaks敏感信息扫描
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/反编译源码:/work/source:ro \
  zricethezav/gitleaks:latest \
  detect --source /work/source --no-git

分析子任务(通过Task工具,并行):

  1. 清单/Info.plist分析 - 权限、导出组件、ATS
  2. 端点提取 - URL、API、WebSocket端点
  3. 敏感信息和密钥检测 - API密钥、令牌、凭证
  4. 证书和签名分析 - 签名证书
  5. 网络安全 - 明文流量、绑定
  6. 第三方分析 - SDK识别

输出

  • endpoints.json - 所有发现的端点
  • secrets.json - 带分类的检测到的敏感信息
  • metadata.json - 应用元数据、权限、SDK
  • flow-analysis.md - Mermaid图
  • flow-analysis.json - 结构化调用图

沟通

  • 接收:来自提取器的提取源码路径
  • 发送:结构化发现(JSON)给混淆器和报告器

4. 混淆器

角色:解码和欺骗专家

职责

  • 分析编码/加密数据和运行时构造的端点
  • 解码Base64、十六进制、XOR、简单密码
  • 追踪加密/解密调用链
  • 识别域名生成算法(DGA)
  • 执行欺骗分析(真实与诱饵端点)
  • 交叉引用发现以分类端点/敏感信息

混淆子任务

  1. 编码数据分析 - Base64、十六进制、XOR模式
  2. 加密追踪分析 - Cipher.doFinalSecretKeySpec
  3. 反分析检测 - 模拟器、root、调试器、Frida检测
  4. DGA模式检测 - 基于时间、设备ID的主机名构造
  5. 诱饵识别 - 比较明文与运行时构造的URL

真实性表分类

分类 标准
CONFIRMED_REAL 在活跃代码路径中使用
LIKELY_REAL 在代码中使用但路径未完全追踪
SUSPECTED_DECOY 在明文中但从未在实际网络调用中使用
HIDDEN_REAL 通过解码发现
UNKNOWN 证据不足

输出

  • deception-analysis.md - 蜜罐分析叙述
  • deception-analysis.json - 带分类的真实性表
  • 解码的URL、密钥、配置

沟通

  • 接收:来自分析器的发现,来自提取器的原始源码
  • 发送:解码发现、欺骗分析给报告器

5. 报告器

角色:报告生成

职责

  • 将所有发现汇总为结构化报告
  • 为代码流程生成Mermaid图
  • findings/[应用名]-[日期]/ 创建最终交付物
  • 向用户展示摘要,突出关键发现

输出结构

findings/[应用名]-[YYYY-MM-DD]/
  report.md              # 主要可读报告
  endpoints.json         # 结构化端点数据
  secrets.json           # 检测到的敏感信息和密钥
  metadata.json          # 应用元数据和配置
  flow-analysis.md       # 代码流程图(Mermaid)
  flow-analysis.json     # 结构化调用图数据
  deception-analysis.md   # 蜜罐/欺骗分析
  deception-analysis.json # 查找真实性表
  raw/                   # 提取的工件
    callgraph.gml        # Androguard调用图(APK)

沟通

  • 接收:来自分析器、混淆器的汇总数据
  • 发送:最终报告路径给编排器/用户

工作流阶段

┌─────────────────────────────────────────────────────────────────┐
│ 阶段1:初始化                                                  │
│ 用户输入:目标文件路径或URL                                     │
│      │                                                          │
│      ▼                                                          │
│ 编排器识别目标类型(APK/IPA/Web)                               │
│      │                                                          │
│      ▼                                                          │
│ 提取器:预拉取Docker镜像(gitleaks→trufflehog→android)         │
│      │                                                          │
│      ▼                                                          │
├─────────────────────────────────────────────────────────────────┤
│ 阶段2:提取(顺序执行)                                        │
│      │                                                          │
│      ▼                                                          │
│ 提取器:                                                         │
│   1. 计算SHA256哈希                                            │
│   2. file命令确认类型                                          │
│   3. 根据类型:                                                │
│      - APK:通过cryptax/android-re的apktool + jadx + androcg    │
│      - IPA:解压,定位Mach-O二进制                              │
│      - Web:美化,检测打包器/混淆器                              │
│   4. 存储raw/和output/目录                                    │
│   5. 通知编排器:"提取完成"                                    │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│ 阶段3:分析(并行 - 通过Task工具)                            │
│      │                                                          │
│      ▼                                                          │
│ 编排器生成并行任务:                                            │
│   - 任务1:清单/Info.plist分析                                  │
│   - 任务2:端点提取                                             │
│   - 任务3:敏感信息和密钥检测                                   │
│   - 任务4:证书和签名分析                                       │
│   - 任务5:网络安全                                             │
│   - 任务6:第三方SDK分析                                        │
│                                                                 │
│ 所有任务在提取的源码上并发运行                                  │
│      │                                                          │
│      ▼                                                          │
│ 编排器收集所有结果                                               │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│ 阶段4:混淆(与阶段3并行)                                    │
│      │                                                          │
│      ▼                                                          │
│ 混淆器(在分析器阶段3开始后):                                 │
│   1. 运行编码数据分析                                          │
│   2. 追踪加密调用链                                             │
│   3. 检测反分析技术                                             │
│   4. 构建真实性表                                               │
│   5. 写入deception-analysis.md和deception-analysis.json         │
│   6. 通知编排器:"混淆完成"                                    │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│ 阶段5:代码流分析                                              │
│      │                                                          │
│      ▼                                                          │
│ 分析器(在阶段3+4完成后):                                     │
│   1. 从清单/plist识别入口点                                    │
│   2. 追踪调用图(最大深度4-5)                                 │
│   3. 映射关键流程:认证、支付、加密、深链接                     │
│   4. 生成Mermaid图                                             │
│   5. 写入flow-analysis.md和flow-analysis.json                  │
│   6. 通知编排器:"流程分析完成"                                │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│ 阶段6:报告生成                                                 │
│      │                                                          │
│      ▼                                                          │
│ 报告器(在所有分析完成后):                                     │
│   1. 汇总所有JSON发现                                          │
│   2. 生成带摘要表的report.md                                   │
│   3. 突出显示严重/高严重程度发现                               │
│   4. 展示Mermaid图                                             │
│   5. 通知编排器:"报告完成"                                   │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│ 阶段7:最终组装                                                 │
│      │                                                          │
│      ▼                                                          │
│ 编排器:                                                         │
│   1. 验证所有必需文件存在                                       │
│   2. 向用户显示摘要                                             │
│   3. 显示生成文件的路径                                         │
│   4. 提供深入了解特定发现的选项                                 │
└─────────────────────────────────────────────────────────────────┘

代理沟通

消息类型
用户 编排器 目标文件路径或URL
编排器 所有 任务分配
提取器 编排器 提取完成
分析器 编排器 分析完成
混淆器 编排器 混淆完成
报告器 编排器 报告完成
编排器 用户 最终摘要和文件路径

Docker镜像

镜像 用途 预拉取顺序
zricethezav/gitleaks:latest 敏感信息扫描 1(最小)
trufflesecurity/trufflehog:latest 敏感信息扫描 2
cryptax/android-re:latest APK分析(jadx、apktool、androguard) 3(最大)
node:20-alpine Web包美化 按需

置信度级别

级别 标准
可获得反编译源码(使用jadx的APK)
类转储头(使用class-dump的IPA)
加密二进制(App Store IPA)

关键文件

  • /Users/user/.claude/skills/reverse-engineer/SKILL.md - 主技能文件
  • SKILLS.md - 本团队Docker优先技能说明
  • docker-setup.sh - Docker准备脚本
  • findings/[应用名]-[YYYY-MM-DD]/ - 输出目录
#!/bin/bash
#
# 逆向工程Docker准备协议
# ==================================================
# 此脚本为逆向工程任务准备Docker环境。
# 在每次逆向工程会话开始时运行此脚本。
#
set -e
# 输出颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色
# 要预拉取的Docker镜像(按顺序:从最小到最大)
IMAGES=(
"zricethezav/gitleaks:latest"
"trufflesecurity/trufflehog:latest"
"cryptax/android-re:latest"
)
# 函数:打印章节标题
print_header() {
echo -e "\n${BLUE}========================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}========================================${NC}\n"
}
# 函数:打印状态
print_status() {
echo -e "[${GREEN}${NC}] $1"
}
# 函数:打印警告
print_warning() {
echo -e "[${YELLOW}${NC}] $1"
}
# 函数:打印错误
print_error() {
echo -e "[${RED}${NC}] $1"
}
#
# 第1步:验证Docker守护进程是否运行
#
print_header "第1步:Docker守护进程状态"
docker info > /dev/null 2>&1
DOCKER_STATUS=$?
if [ $DOCKER_STATUS -ne 0 ]; then
print_error "Docker守护进程未运行"
echo ""
echo "请使用以下方法之一启动Docker:"
echo " - Docker Desktop:从应用程序打开Docker.app"
echo " - Linux:sudo systemctl start docker"
echo " - Linux(无root):dockerd &
exit 1
fi
DOCKER_VERSION=$(docker version --format '{{.Server.Version}}' 2>/dev/null)
print_status "Docker守护进程正在运行"
echo " 版本:$DOCKER_VERSION"
# 检查Docker版本兼容性
REQUIRED_VERSION="20.10"
if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$DOCKER_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then
print_warning "Docker版本 $DOCKER_VERSION 可能有兼容性问题"
echo " 推荐:$REQUIRED_VERSION 或更高"
fi
#
# 第2步:预拉取所需镜像
#
print_header "第2步:验证所需镜像"
for IMAGE in "${IMAGES[@]}"; do
IMAGE_NAME=$(basename "$IMAGE")
CHECK_CMD="docker images $IMAGE --format '{{.ID}}'"
if OUTPUT=$($CHECK_CMD 2>/dev/null) && [ -n "$OUTPUT" ]; then
print_status "$IMAGE_NAME ..... 已缓存"
else
echo -n " 正在拉取 $IMAGE_NAME ... "
if docker pull "$IMAGE" > /dev/null 2>&1; then
print_status "$IMAGE_NAME ..... 已拉取"
else
print_warning "$IMAGE_NAME ..... 失败(继续)"
fi
fi
done
#
# 第3步:健康检查 - 验证容器运行时
#
print_header "第3步:容器运行时健康检查"
if docker run --rm zricethezav/gitleaks:latest --version > /dev/null 2>&1; then
print_status "容器运行时测试 ..... 通过"
else
print_warning "容器运行时测试 ..... 失败"
echo " 某些Docker功能可能无法正常工作"
fi
#
# 第4步:显示摘要
#
print_header "Docker准备结果"
# 检查最终状态
ALL_CACHED=true
for IMAGE in "${IMAGES[@]}"; do
IMAGE_NAME=$(basename "$IMAGE")
CHECK_CMD="docker images $IMAGE --format '{{.ID}}'"
if ! OUTPUT=$($CHECK_CMD 2>/dev/null) || [ -z "$OUTPUT" ]; then
ALL_CACHED=false
break
fi
done
if [ "$ALL_CACHED" = true ]; then
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 结果:就绪${NC}"
echo -e "${GREEN} 所有Docker资源均可用${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo "开始逆向工程会话..."
echo ""
exit 0
else
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW} 结果:降级${NC}"
echo -e "${YELLOW} 某些镜像不可用${NC}"
echo -e "${YELLOW} 功能集将受到限制${NC}"
echo -e "${YELLOW}========================================${NC}"
echo ""
exit 1
fi

静态逆向工程分析:Docker优先版

定位:本技能采用 Docker优先 方案。所有逆向工程工具都通过Docker容器执行。仅在Docker不可用时才会使用本地工具作为备用方案。

Docker准备协议

在每次逆向工程会话开始时,执行此协议:

# 第1步:验证Docker守护进程是否运行
docker info > /dev/null 2>&1
if [ $? -ne 0 ]; then
  echo "错误:Docker守护进程未运行。请启动Docker Desktop或运行:sudo systemctl start docker"
  exit 1
fi

# 第2步:预拉取所需镜像(从小到大)
echo "正在预拉取Docker镜像..."
docker pull zricethezav/gitleaks:latest
docker pull trufflesecurity/trufflehog:latest
docker pull cryptax/android-re:latest

# 第3步:验证镜像就绪
docker images --format '{{.Repository}}:{{.Tag}}' | grep -E "(gitleaks|trufflehog|android-re)"
echo "Docker准备状态:通过"

Docker使用标准

卷挂载约定

# 格式:-u $(id -u):$(id -g) -v /主机绝对路径:/工作目录:ro
# 说明:
#   /主机绝对路径 = 主机上的目标绝对路径
#   /工作目录 = 容器内的固定挂载点
#   :ro = 仅读取数据时使用;写入操作时省略
#   -u $(id -u):$(id -g) = 避免创建文件的权限问题

容器清理规则

  1. 始终使用 --rm 自动清理容器执行后
  2. 始终使用绝对路径 进行卷挂载(-v /完整路径:/工作目录
  3. 使用只读挂载(:ro 仅读取数据时
  4. 除非绝对必要,否则绝不构建自定义Dockerfile

第1步:识别目标

运行 file 命令确认目标类型:

file /路径/到/目标
文件签名/扩展名 类型 分析流程
.apk 或包含AndroidManifest.xml的Java归档/ZIP Android APK APK流程
.ipa 或包含Payload/*.app的ZIP iOS IPA IPA流程
.js.js.map.bundle、包含index.html的目录 Web/JSBundle Web流程
.aab Android App Bundle 先转换为APK,再使用APK流程

第2步:设置工具环境

选项A:Docker(主要-始终优先使用)

APK分析 - cryptax/android-re

# 解码APK(资源、清单、smali)- 读取操作
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/目标.apk:/work/target.apk:ro \
  cryptax/android-re \
  apktool d /work/target.apk -o /work/apktool-output

# 反编译为Java源代码 - 读取操作
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/目标.apk:/work/target.apk:ro \
  cryptax/android-re \
  jadx -d /work/jadx-output /work/target.apk

# 生成调用图 - 读取操作
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/目标.apk:/work/target.apk:ro \
  cryptax/android-re \
  androcg -o /work/callgraph.gml /work/target.apk

敏感信息扫描 - trufflesecurity/trufflehog

# 扫描反编译源代码目录 - 读取操作,无需git
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/反编译源码:/work/source:ro \
  trufflesecurity/trufflehog:latest \
  filesystem /work/source \
  --no-update > /路径/到/结果.txt

敏感信息扫描 - zricethezav/gitleaks

# 扫描任何目录的敏感信息 - 读取操作,无需git
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/反编译源码:/work/source:ro \
  zricethezav/gitleaks:latest \
  detect --source /work/source --no-git > /路径/到/结果.txt

Web分析 - node:20-alpine 美化

# 美化压缩的JS
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/bundle.js:/work/bundle.js:ro \
  node:20-alpine \
  npx js-beautify -s /work/bundle.js -o /work/bundle-beautified.js

# 源映射重建
docker run --rm \
  -u $(id -u):$(id -g) \
  -v /绝对路径/到/源映射.map:/work/bundle.js.map:ro \
  node:20-alpine \
  sh -c "node -e \"const fs=require('fs'); const map=JSON.parse(fs.readFileSync('bundle.js.map','utf8')); console.log('SourceRoot:', map.sourceRoot);\""

IPA分析(macOS原生工具-无Docker)

在macOS上,使用原生工具进行IPA分析:

  • otool - 显示目标文件
  • codesign - 代码签名检查
  • plutil - 属性列表操作
  • class-dump - Objective-C类头
  • strings - 从二进制提取字符串

选项B:本地工具(仅备用)

如果Docker 不可用,使用本地工具:

APK工具apktooljadxdex2jarbaksmalistringsgrepfindunzip Web工具nodenpxjs-beautifyprettier 敏感扫描trufflehoggitleaks(如已安装)

选项C:基本备用(最后手段)

如果Docker和专用工具都不可用:

  • 使用 unzip 解压APK/IPA
  • 使用 stringsgrepfindxxd 分析

第3步:提取和分析

APK流程

阶段1 - 提取(顺序执行)

  1. 使用 apktool d <文件> 解码APK
  2. 使用 jadx 反编译为Java源代码
  3. 计算文件哈希:sha256sum <文件>
  4. 使用 androguard 生成调用图(可选)

阶段2 - 并行分析(使用Task工具)

独立并行运行:

  • [并行] 清单分析:权限、导出组件、意图过滤器
  • [并行] 端点提取:URL、API端点、WebSocket地址
  • [并行] 敏感信息和密钥检测:API密钥、令牌、凭证
  • [并行] 证书和签名分析:签名证书、调试签名
  • [并行] 网络安全:明文传输、证书绑定
  • [并行] 第三方分析:SDK识别
  • [并行] 编码和加密数据:Base64、十六进制、XOR模式
  • [并行] 欺骗和蜜罐分析:诱饵与真实端点
  • [并行] 代码流分析:入口点、关键流程、Mermaid图

IPA流程

阶段1 - 提取(顺序执行)

  1. 解压IPA访问 Payload/*.app
  2. 定位主二进制文件(Mach-O可执行文件)
  3. 计算文件哈希:sha256sum <文件>

阶段2 - 并行分析(使用Task工具)

  • [并行] Info.plist分析:Bundle ID、ATS设置、URL方案
  • [并行] 端点提取:二进制字符串、资源文件
  • [并行] 敏感信息和密钥检测:trufflehog/gitleaks扫描
  • [并行] 权限和功能:嵌入的权利
  • [并行] 框架分析:嵌入框架、SDK识别
  • [并行] 二进制元数据:加密标志、安全标志、架构
  • [并行] 欺骗和蜜罐分析:诱饵与真实检测
  • [并行] 代码流分析:入口点、关键流程

Web/JS Bundle流程

阶段1 - 准备(顺序执行)

  1. 识别打包工具(webpack、Vite、Rollup、Parcel、esbuild)
  2. 使用 js-beautifyprettier 美化
  3. 如有则重建源映射
  4. 检测混淆器

阶段2 - 并行分析(使用Task工具)

  • [并行] 端点提取:Fetch/XHR URL、API路径
  • [并行] 敏感信息和密钥检测:API密钥、令牌、凭证
  • [并行] 认证和授权:JWT、OAuth流程
  • [并行] 应用架构:路由、状态管理
  • [并行] 敏感逻辑:暴露的客户端验证
  • [并行] 欺骗和蜜罐分析:诱饵与真实检测
  • [并行] 代码流分析:入口点、关键流程

混淆分析手册

编码检测和解码

编码 检测模式 解码方法
Base64 atob()Buffer.from(,'base64')base64Decode 使用 base64 -d 或Python
十六进制 0x[0-9A-Fa-f]+fromHex() 使用 xxd -r -p
XOR 重复字节模式、可疑常量 追踪密钥,手动应用XOR
ROT13 正则:[A-Za-z]{13} 模式 tr 'A-Za-z' 'N-ZA-Mn-za-m'
反转字符串 .reverse()strrev() rev 命令

加密追踪分析

Android模式:

  • Cipher.doFinal() - 追踪输入明文、密钥来源、输出密文
  • SecretKeySpec - 查找密钥字节派生
  • KeyGeneratorPBKDF2 - 追踪密钥派生
  • Android Keystore - 检查系统密钥库使用

iOS模式:

  • CryptoKit - 对称/非对称加密
  • SecKeyDecrypt() - 非对称解密
  • Keychain 操作 - SecItemCopyMatching()

反分析检测

类型 检测方法
模拟器 ro.product.modelro.build.fingerprint/qemud
Root /system/app/Superuser.apksu二进制、ro.debuggable
调试器 PT_DENY_ATTACHsysctl KERN_PROC_PIDstrace
Frida 端口27042扫描、/proc/self/maps中的frida、socket检查

DGA(域名生成算法)

查找:

  • 基于时间:时间戳、日期计数在主机名中
  • 基于设备ID:IMEI、序列号在主机名构造中
  • 与固定密钥的XOR

诱饵与真实分类

分类 标准
CONFIRMED_REAL 在活跃代码路径中使用,认证流程
LIKELY_REAL 在代码中使用但路径未完全追踪
SUSPECTED_DECOY 在明文中但从未在实际网络调用中使用
HIDDEN_REAL 通过解码发现,明文中不可见
UNKNOWN 证据不足

敏感信息检测模式

# === 云提供商密钥 ===
AWS访问密钥:          AKIA[0-9A-Z]{16}
AWS私钥:             (?i)aws_secret_access_key\s*[=:]\s*["']?([A-Za-z0-9/+=]{40})["']?
GCP API密钥:         AIza[0-9A-Za-z\-_]{35}
Firebase URL:         https?://[a-zA-Z0-9\-]+\.firebaseio\.com
Supabase URL:        https://[a-zA-Z0-9]+\.supabase\.co

# === 支付和SaaS ===
Stripe发布密钥:       pk_(test|live)_[0-9a-zA-Z]{24,}
Stripe私钥:          sk_(test|live)_[0-9a-zA-Z]{24,}
PayPal Braintree令牌:access_token\$production\$[0-9a-z]{16}\$[0-9a-f]{32}

# === 通信 ===
Slack令牌:           xox[bpors]-[0-9a-zA-Z\-]{10,}
Twilio账户SID:       AC[a-f0-9]{32}
SendGrid API密钥:    SG\.[a-zA-Z0-9_\-]{22}\.[a-zA-Z0-9_\-]{43}
Telegram机器人令牌:  \d{8,10}:[A-Za-z0-9_-]{35}

# === 认证 ===
JWT令牌:             eyJ[A-Za-z0-9-_]+\.eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+
持有者令牌:          (?i)bearer\s+[a-zA-Z0-9\-_\.]+
通用API密钥:         (?i)(api[_-]?key|apikey)\s*[=:]\s*["']?([a-zA-Z0-9\-_]{20,})["']?

# === 网络 ===
HTTP URL:            https?://[^\s'"<>}{)(]+
WebSocket URL:       wss?://[^\s'"<>]+

第4步:生成报告

创建 findings/[应用名]-[YYYY-MM-DD]/ 目录:

findings/[应用名]-[YYYY-MM-DD]/
  report.md              # 主要可读报告
  endpoints.json         # 结构化端点数据
  secrets.json           # 检测到的敏感信息和密钥
  metadata.json          # 应用元数据和配置
  flow-analysis.md       # 代码流程图(Mermaid)
  flow-analysis.json     # 结构化调用图数据
  deception-analysis.md   # 蜜罐/欺骗分析
  deception-analysis.json # 查找真实性表
  raw/                   # 提取的工件
    callgraph.gml        # Androguard调用图(APK)

报告摘要表

包含在 report.md 中:

类别 发现数量
端点 N
敏感信息/密钥 N
权限(敏感) N
第三方服务 N
关键流程映射 N
安全问题 N

风险评估:[严重/高/中/低/信息]

Mermaid图约定

  • sequenceDiagram — 多组件交互(认证流程、支付流程)
  • flowchart TD — 导航图、初始化流程
  • flowchart LR — 线性调用链(UI → ViewModel → Repository → API)
  • 每个图最多约15个节点

工具注册表

工具 Docker镜像 阶段 角色
apktool cryptax/android-re 提取 提取器
jadx cryptax/android-re 提取 提取器
androcg cryptax/android-re 提取 提取器
trufflehog trufflesecurity/trufflehog 分析 分析器
gitleaks zricethezav/gitleaks 分析 分析器
js-beautify node:20-alpine 准备 提取器
strings 原生(macOS/Linux) 分析 分析器
plutil 原生macOS 分析 分析器
otool 原生macOS 分析 分析器

代理团队角色

代理 职责 Docker工具
编排器 工作流协调 无(任务管理)
提取器 文件提取、Docker设置 cryptax/android-re、node
分析器 静态分析、敏感信息 trufflehog、gitleaks
混淆器 解码、加密追踪 容器中的自定义脚本
报告器 报告生成 无(文件写入)

工作流:顺序提取 → 并行分析 → 并行混淆 → 报告

Comments are disabled for this gist.