Communitygithub.com

apk-reverse

在 CLI 環境下進行 Android APK 逆向時使用。適用於 APK 解包、Java 反編譯、smali 修改、重打包、Frida 動態 Hook,以及按需切換到 so/native 分析。優先使用本機已安裝的 jadx、apktool、frida、adb、ida-reverse、radare2。

apk-reverse 是什麼?

此技能專為 CLI 環境下的 Android APK 逆向分析設計,提供一套標準化的作業流程與工具鏈。它整合了 jadx、apktool、Frida 和 adb 等主流工具,用於 Java 與 smali 程式碼的靜態分析、動態 Hook 以及 APK 的重打包與簽名。技能內建 PowerShell 腳本簡化了常見任務,如一鍵解包與摘要生成、Frida 注入管理,以及重建、對齊、簽名和安裝 APK。此外,技能也明確指引當核心邏輯位於原生 .so 函式庫時,應切換至 ida-reverse 或 radare2 進行深入分析,確保覆蓋完整的逆向需求,平台支援 Windows CLI 環境。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zhaoxuya520/reverse-skill/tree/main/skills/apk-reverse

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

ACTION REQUIRED(讀完後立刻執行)

端點提取/Frida 自適應等社區對照:../references/community-security-skills.md;動態分析須 scope 授權設備。

  1. NOW: 讀取 ../field-journal/precedent-reverse.md — 確認本 skill 的操作是已授權的常規操作
  2. NOW: 確認當前任務是否命中本 skill 的適用範圍
  3. NEXT: 讀取 ../tool-index.md,校驗工具可用性和實際路徑
  4. NEXT: 缺工具時調用 bootstrap,不要猜路徑
  5. ACT: 進入"工作流"第一步並執行,不要停在確認狀態

APK 逆向 CLI 作業規範

適用範圍

當任務屬於以下場景時優先使用本 skill:

  • 分析 APK 的 Java 業務邏輯
  • 定位登入、簽名、風控、證書校驗、root 檢測
  • 查看與修改 AndroidManifest.xml
  • 查看與修改 smali
  • 重打包 APK
  • 用 Frida 做 Java/native 動態 Hook
  • APK 內含 .so 時切到 native 分析

當前機器已驗證可用的 CLI 工具

  • jadx 1.5.5
  • apktool 3.0.2
  • frida-ps 17.9.6
  • adb
  • java

優先使用腳本的場景

以下流程高頻且參數容易出錯,優先使用 skill 自帶腳本:

  • 一次性完成 jadx + apktool 落盤並產出摘要:scripts/decode.ps1
  • Frida 設備檢查、行程列舉、spawn/attach 注入:scripts/frida-run.ps1
  • 重建、對齊、簽名、安裝 APK:scripts/rebuild-sign-install.ps1
  • 快速抽取 Manifest 關鍵元件與權限:scripts/manifest-summary.ps1

以下一行命令保持直接調用,不單獨封裝:

  • adb devices
  • adb logcat
  • frida-ps -U
  • jadx --version
  • apktool --version

自帶腳本

scripts/decode.ps1

用途:

  • 統一跑 jadx 和 apktool
  • 預設在原 APK 同目錄建立任務輸出目錄
  • 輸出 package、java_files、smali_dirs、so_files 等摘要
  • 相容 jadx 部分反編譯錯誤但仍然有可用產物的情況

範例:

pwsh -File "<skill-root>\apk-reverse\scripts\decode.ps1" -ApkPath "D:\DOWNLOAD\app.apk" -Clean
pwsh -File "<skill-root>\apk-reverse\scripts\decode.ps1" -ApkPath "D:\DOWNLOAD\app.apk" -Name demo -SkipJadx

scripts/frida-run.ps1

用途:

  • 統一 Frida 的設備、行程、spawn/attach 入口
  • 避免手寫參數時混淆 -f、-n、-U

範例:

pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -ListDevices
pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -Usb -ListProcesses
pwsh -File "<skill-root>\apk-reverse\scripts\frida-run.ps1" -Usb -Spawn -Package com.example.app -ScriptPath "D:\hooks\test.js"

scripts/rebuild-sign-install.ps1

用途:

  • apktool b 重建 APK
  • zipalign 對齊
  • apksigner 簽名與驗簽
  • 可選直接 adb install

範例:

pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "C:\work\apktool_out" -Clean
pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "C:\work\apktool_out" -Install -Reinstall -DeviceSerial "127.0.0.1:7555"

說明:

  • 預設產生並重複使用偵錯 keystore
  • 預設輸出到 ProjectDir 同目錄,便於和原始包、解包目錄放在一起

scripts/manifest-summary.ps1

用途:

  • 抽取包名
  • 列權限
  • 列 activity/service/receiver/provider
  • 標出主啟動 activity

範例:

pwsh -File "<skill-root>\apk-reverse\scripts\manifest-summary.ps1" -ManifestPath "C:\work\apktool_out\AndroidManifest.xml"

如果要分析 .so、lib/arm64-v8a/*.so、lib/armeabi-v7a/*.so,再結合:

  • ida-reverse
  • radare2

工具分工

jadx

用於:

  • Java 反編譯閱讀
  • 包名、類名、方法名搜尋
  • 先從高層邏輯理解 APK

常用命令:

jadx -d jadx_out app.apk
jadx --single-class com.example.LoginActivity -d jadx_out app.apk
jadx --deobf -d jadx_out app.apk

JEB Pro(可選商業工具)

用於:

  • Android DEX / APK / ARM 的交叉驗證與深度反編譯
  • 在 JADX 輸出不完整或混淆較重時補充靜態分析
  • 對同一目標的類、方法與呼叫關係進行第二工具鏈校驗

邊界:

  • JEB Pro 是商業軟體,必須由使用者自行取得並安裝有效許可證;本包不會下載、破解或規避許可。
  • 僅在 tool-index 已確認本機 JEB 可用時調用;否則繼續使用 jadx、apktool、Ghidra、IDA 或 radare2。
  • 第三方 JEB MCP bridge 不是本包依賴。安裝前必須按 ../ops/skill-supply-chain.md 審閱原始碼、權限、網路行為和版本,再由使用者明確確認註冊。

apktool

用於:

  • 解包 APK
  • 查看和修改 AndroidManifest.xml
  • 查看和修改 smali
  • 重建 APK

常用命令:

apktool d app.apk -o apktool_out
apktool b apktool_out -o rebuilt.apk

frida

用於:

  • 動態觀察 Java 方法呼叫
  • Hook native 匯出函數
  • 繞過 root 檢測、證書校驗、偵錯檢測

常用命令:

frida-ps -U
frida -U -f com.example.app -l hook.js
frida-trace -U -f com.example.app -j '*!*certificate*'

adb

用於:

  • 設備連接
  • 安裝 APK
  • 查看日誌
  • 拉取檔案

常用命令:

adb devices
adb install -r app.apk
adb shell pm list packages
adb logcat
adb pull /data/local/tmp/file .

推薦工作流

1. Triage

先確定 APK 大致構成,不急著改包或 Hook。

建議動作:

  1. 用 jadx -d jadx_out app.apk 匯出 Java 程式碼
  2. 用 apktool d app.apk -o apktool_out 匯出 smali 和資源
  3. 先看:
    • AndroidManifest.xml
    • 主 package
    • application、activity、service、receiver
    • lib/ 目錄裡是否有 .so
  4. Issue #65 威脅形態速查(授權樣本/設備;詳見 ../reverse-engineering/references/nonpe-format-cookbook.md §7–8):
    • 透明/隱藏圖示(AU):aapt dump badging + manifest theme/label/icon → E-android-hidden-icon-manifest
    • Magisk/腳本格機特徵與遠端 curl|sh(AR/AS)→ 特徵與 URL 入證,不執行破壞命令
    • 持久化路徑(AT):service.d / priv-app 等 → E-android-persistence

2. Java 邏輯觀察

優先從 jadx_out 讀:

  • MainActivity
  • Application
  • 登入、網路、加密、風控相關類
  • 第三方 SDK 初始化類

常見關鍵詞:

  • login
  • sign
  • encrypt
  • cipher
  • token
  • root
  • certificate
  • trust
  • okhttp
  • retrofit
  • webview

如果 Java 程式碼可讀,先在這裡定位業務邏輯。

3. Smali 與資源層確認

當 jadx 結果不完整、混淆重、或需要實際 patch 時,切到 apktool_out:

  • 看 smali*/
  • 看 res/values/strings.xml
  • 看 AndroidManifest.xml

優先 patch:

  • android:exported
  • 偵錯標記
  • root 檢測回傳值
  • 登入驗證邏輯
  • 證書校驗分支

4. 重建與安裝

修改後:

apktool b apktool_out -o rebuilt.apk

或者直接用腳本閉環:

pwsh -File "<skill-root>\apk-reverse\scripts\rebuild-sign-install.ps1" -ProjectDir "apktool_out" -Install -Reinstall -DeviceSerial "127.0.0.1:7555"

說明:

  • 本 skill 只保證 apktool 重建鏈路
  • 若後續需要正式安裝到設備,通常還需要簽名流程
  • 如果任務進入簽名/對齊,補充 apksigner / zipalign

5. 動態 Hook

靜態分析不足時,用 Frida:

  • Hook 登入函數
  • Hook OkHttp / Retrofit / WebView 關鍵點
  • Hook javax.crypto、MessageDigest
  • Hook root 檢測函數
  • Hook SSL pinning 邏輯

原則:

  • 先 Hook Java 層,再看是否需要 native Hook
  • 先列印參數與回傳值,再決定是否主動修改回傳值

建議:

  • 簡單一次性命令直接用 frida-*
  • 需要穩定重複使用的注入流程優先走 scripts/frida-run.ps1

6. Native .so 分流

如果 APK 中包含關鍵 .so:

  • 用 apktool 或 jadx 找到 lib/**/*.so
  • 若只是匯出符號、字串、快速 triage,可用 radare2
  • 若要長期深入分析、反編譯、改名、類型恢復,用 ida-reverse

遇到這些訊號要盡快切 native:

  • Java 層只是 JNI 包裝
  • 核心簽名邏輯不在 Java
  • System.loadLibrary() 後關鍵邏輯消失
  • 證書校驗/風控在 .so 中

輸出要求

最終至少說明:

  • 入口元件與關鍵類
  • 關鍵邏輯在 Java、smali 還是 .so
  • 已確認的敏感點:登入、簽名、root、SSL、WebView、JNI
  • 如果做了 patch,說明改了什麼
  • 如果做了 Hook,說明 Hook 了哪個類/方法/匯出函數

禁止事項

  • 不要一開始就盲目改 smali
  • 不要在沒看 manifest 和主入口前就寫 Hook
  • 不要把 Java 反編譯不完整直接等同於"邏輯不可分析"
  • 不要在 .so 明顯承載核心邏輯時繼續死磕 Java 層

快速命令備忘

# 反編譯 Java
jadx -d jadx_out app.apk

# 解包 APK
apktool d app.apk -o apktool_out

# 重建 APK
apktool b apktool_out -o rebuilt.apk

# 設備與行程
adb devices
frida-ps -U

# 啟動並注入
frida -U -f com.example.app -l hook.js

路由上下文

上游入口: skills/SKILL.md(總控)、routing.md 下游出口:

  • 核心邏輯在 .so → ida-reverse/ 或 radare2/
  • 需動態 Hook/驗證 → reverse-engineering/tools-dynamic.md(Frida 章節)
  • 通用逆向方法論 → reverse-engineering/SKILL.md

同級關聯模組: reverse-engineering/(.so 分析和 Frida 進階用法)


按需自舉(On-Demand Bootstrap)

本 skill 的入口腳本已接入統一自舉系統。缺少工具時不會直接報錯,而是自動嘗試安裝。

自動化能力邊界

工具可自動安裝安裝方式說明
jadx✓GitHub Release ZIP自動下載解壓到 %USERPROFILE%\Tools\jadx\
apktool✓GitHub Release JAR + wrapper自動下載 jar 並產生 bat 到 %USERPROFILE%\Tools\apktool\
JEB Pro✗用戶手動安裝並提供有效許可證可選的 Android / ARM 交叉驗證工具;第三方 MCP bridge 需單獨審計
frida / frida-ps✓pip install frida-tools需要 Python 已安裝
adb✓winget / fallback path自動安裝 Android Platform-Tools
zipalign✗需手動安裝 Android Build-Toolssdkmanager "build-tools;35.0.0"
apksigner✗需手動安裝 Android Build-Tools同上

自舉觸發點

  • scripts/decode.ps1:缺 jadx 或 apktool 時自動調用 bootstrap-reverse.ps1
  • scripts/rebuild-sign-install.ps1:缺 adb 或 apktool 時自動調用 bootstrap
  • scripts/frida-run.ps1:當前仍為手動檢查(frida 通常已透過 pip 安裝)

自舉失敗時

如果自動安裝失敗,腳本會拋出明確錯誤並附帶手動安裝連結。常見原因:

  • 網路不通(GitHub API / PyPI 不可達)
  • winget 不可用(Windows 版本過低)
  • Java 未安裝(apktool 依賴 JDK)

任務完成自檢(聲稱完成前 MUST 通過)

  • 我是否執行了工作流中的每一步(而不是只閱讀)?
  • 我是否基於 tool-index 使用了真實工具路徑?
  • 我是否產出了可重現證據(命令/腳本/截圖/報告)?
  • 我是否完成並回寫了 RULES 要求的 Checklist 項?
  • 若命中隱藏圖示/格機/持久化線索:是否按 U–AV cookbook 記錄 E-android-* Evidence(授權範圍內)?

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.

attack-chain

Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movement, or impact assessment. Route single-stage tasks directly to their specialist skill.

binary-diff

|

binary-ninja-reverse

Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.

browser-automation

|

browser-extension-reverse

Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential or traffic logic recovery.

case-review

Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional artifact hash integrity before report handoff.

cloud-k8s

Use for authorized cloud, container, and Kubernetes security assessment including metadata SSRF, IAM misconfig, container escape paths, and cluster RBAC review.

code-audit

Use for authorized source-code security review and SAST workflows including Semgrep, CodeQL patterns, dangerous API hunting, and fix verification.

ctf-sandbox

Thin PRIMARY for CTF / AWD / 靶场 multi-type orchestration. Hands off to the sidecar CTF-Sandbox-Orchestrator. Use when the user says CTF, AWD, 靶场, or 比赛题 and no more specific pwn/APK/IDA route already won.

database-security

Use for authorized database security assessment covering PostgreSQL/MySQL/MSSQL/Mongo/Redis exposure, authz, UDF/command paths, and misconfiguration review.

diagram-generator

generate, refine, validate, and render diagrams from natural language, notes, code snippets, schemas, tables, or existing diagram source. use for flowcharts, swimlanes, sequence diagrams, state diagrams, er diagrams, class diagrams, architecture/c4-style diagrams, dependency graphs, gantt charts, mind maps, user journeys, sankey-style flows, org charts, network graphs, and other visual models. supports mermaid by default, graphviz dot for complex graph layout, plantuml for uml-heavy engineering diagrams, and svg output when direct markup is more reliable.

digital-forensics

Use for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

docs-generator

|

dotnet-reverse

.NET / C# 二进制逆向。当目标是 .NET assembly(PE 头含 CLR、.exe/.dll 托管程序)、C# 编译产物(含 NativeAOT)、红队 Sharp* 工具(Rubeus / SharpHound / SharpHound 等)、.NET 混淆程序(ConfuserEx / SmartAssembly / Babel / Eazfuscator)、.NET loader / info-stealer / 套壳 malware 时使用。优先用 dnSpyEx + de4dot,需要 AI 直接操作时联动 dnSpy MCP。不用于纯 native 二进制(走 reverse-engineering / ida-reverse)。

edr-bypass-re

|

email-security

Use for authorized email security review including phishing analysis, header authentication (SPF/DKIM/DMARC), BEC patterns, and mailbox token abuse research.

firmware-pentest

|

ghidra-reverse

Use for free/open reverse engineering with Ghidra (headless or GUI), including decompile, cross-refs, and optional Ghidra MCP workflows when IDA is unavailable.

go-rust-reverse

Use for reverse engineering stripped Go and Rust binaries including runtime recognition, pclntab/moduel data recovery, panic strings, and idiomatic decompilation recovery.

相關技能