fxapk 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. fxapk-0.1.1/LICENSE +21 -0
  2. fxapk-0.1.1/PKG-INFO +211 -0
  3. fxapk-0.1.1/README.md +179 -0
  4. fxapk-0.1.1/apkscan/__init__.py +3 -0
  5. fxapk-0.1.1/apkscan/analyzers/__init__.py +5 -0
  6. fxapk-0.1.1/apkscan/analyzers/certificate.py +360 -0
  7. fxapk-0.1.1/apkscan/analyzers/components.py +351 -0
  8. fxapk-0.1.1/apkscan/analyzers/config_keys.py +689 -0
  9. fxapk-0.1.1/apkscan/analyzers/contacts.py +388 -0
  10. fxapk-0.1.1/apkscan/analyzers/crypto.py +651 -0
  11. fxapk-0.1.1/apkscan/analyzers/endpoints.py +920 -0
  12. fxapk-0.1.1/apkscan/analyzers/jadx.py +330 -0
  13. fxapk-0.1.1/apkscan/analyzers/js_bundle.py +1131 -0
  14. fxapk-0.1.1/apkscan/analyzers/manifest.py +390 -0
  15. fxapk-0.1.1/apkscan/analyzers/packing.py +393 -0
  16. fxapk-0.1.1/apkscan/analyzers/payment.py +615 -0
  17. fxapk-0.1.1/apkscan/analyzers/permissions.py +268 -0
  18. fxapk-0.1.1/apkscan/analyzers/sdk_fingerprint.py +383 -0
  19. fxapk-0.1.1/apkscan/cli.py +302 -0
  20. fxapk-0.1.1/apkscan/core/__init__.py +1 -0
  21. fxapk-0.1.1/apkscan/core/apk.py +431 -0
  22. fxapk-0.1.1/apkscan/core/context.py +64 -0
  23. fxapk-0.1.1/apkscan/core/device.py +142 -0
  24. fxapk-0.1.1/apkscan/core/infra.py +285 -0
  25. fxapk-0.1.1/apkscan/core/models.py +172 -0
  26. fxapk-0.1.1/apkscan/core/pipeline.py +371 -0
  27. fxapk-0.1.1/apkscan/core/registry.py +216 -0
  28. fxapk-0.1.1/apkscan/dynamic/__init__.py +61 -0
  29. fxapk-0.1.1/apkscan/dynamic/capture.py +599 -0
  30. fxapk-0.1.1/apkscan/dynamic/unpack.py +302 -0
  31. fxapk-0.1.1/apkscan/enrichers/__init__.py +4 -0
  32. fxapk-0.1.1/apkscan/enrichers/asn.py +171 -0
  33. fxapk-0.1.1/apkscan/enrichers/icp.py +201 -0
  34. fxapk-0.1.1/apkscan/enrichers/whois.py +162 -0
  35. fxapk-0.1.1/apkscan/report/__init__.py +1 -0
  36. fxapk-0.1.1/apkscan/report/html.py +255 -0
  37. fxapk-0.1.1/apkscan/report/json.py +61 -0
  38. fxapk-0.1.1/apkscan/report/pdf.py +159 -0
  39. fxapk-0.1.1/apkscan/report/templates/report.html.j2 +504 -0
  40. fxapk-0.1.1/apkscan/rules/certificate.yaml +56 -0
  41. fxapk-0.1.1/apkscan/rules/components.yaml +159 -0
  42. fxapk-0.1.1/apkscan/rules/config_keys.yaml +146 -0
  43. fxapk-0.1.1/apkscan/rules/contacts.yaml +136 -0
  44. fxapk-0.1.1/apkscan/rules/crypto.yaml +245 -0
  45. fxapk-0.1.1/apkscan/rules/endpoints.yaml +108 -0
  46. fxapk-0.1.1/apkscan/rules/js_bundle.yaml +92 -0
  47. fxapk-0.1.1/apkscan/rules/manifest.yaml +104 -0
  48. fxapk-0.1.1/apkscan/rules/packers.yaml +195 -0
  49. fxapk-0.1.1/apkscan/rules/payment.yaml +453 -0
  50. fxapk-0.1.1/apkscan/rules/permissions.yaml +409 -0
  51. fxapk-0.1.1/apkscan/rules/sdks.yaml +488 -0
  52. fxapk-0.1.1/fxapk.egg-info/PKG-INFO +211 -0
  53. fxapk-0.1.1/fxapk.egg-info/SOURCES.txt +79 -0
  54. fxapk-0.1.1/fxapk.egg-info/dependency_links.txt +1 -0
  55. fxapk-0.1.1/fxapk.egg-info/entry_points.txt +3 -0
  56. fxapk-0.1.1/fxapk.egg-info/requires.txt +11 -0
  57. fxapk-0.1.1/fxapk.egg-info/top_level.txt +1 -0
  58. fxapk-0.1.1/pyproject.toml +68 -0
  59. fxapk-0.1.1/setup.cfg +4 -0
  60. fxapk-0.1.1/tests/test_capture.py +406 -0
  61. fxapk-0.1.1/tests/test_certificate.py +233 -0
  62. fxapk-0.1.1/tests/test_components.py +243 -0
  63. fxapk-0.1.1/tests/test_config_keys.py +301 -0
  64. fxapk-0.1.1/tests/test_contacts.py +94 -0
  65. fxapk-0.1.1/tests/test_crypto.py +322 -0
  66. fxapk-0.1.1/tests/test_endpoints.py +400 -0
  67. fxapk-0.1.1/tests/test_enricher_asn.py +263 -0
  68. fxapk-0.1.1/tests/test_enricher_icp.py +318 -0
  69. fxapk-0.1.1/tests/test_enricher_whois.py +226 -0
  70. fxapk-0.1.1/tests/test_integration.py +125 -0
  71. fxapk-0.1.1/tests/test_jadx.py +87 -0
  72. fxapk-0.1.1/tests/test_js_bundle.py +295 -0
  73. fxapk-0.1.1/tests/test_manifest.py +309 -0
  74. fxapk-0.1.1/tests/test_packing.py +268 -0
  75. fxapk-0.1.1/tests/test_payment.py +95 -0
  76. fxapk-0.1.1/tests/test_pdf.py +108 -0
  77. fxapk-0.1.1/tests/test_permissions.py +212 -0
  78. fxapk-0.1.1/tests/test_pipeline.py +255 -0
  79. fxapk-0.1.1/tests/test_report.py +408 -0
  80. fxapk-0.1.1/tests/test_sdk_fingerprint.py +268 -0
  81. fxapk-0.1.1/tests/test_unpack.py +353 -0
fxapk-0.1.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 s-silt
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
fxapk-0.1.1/PKG-INFO ADDED
@@ -0,0 +1,211 @@
1
+ Metadata-Version: 2.4
2
+ Name: fxapk
3
+ Version: 0.1.1
4
+ Summary: 涉诈 APK 调证分析 CLI — 静态分析 + 配置键值/服务归属提取,产出调证线索清单
5
+ Author: s-silt
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/s-silt/fxapk
8
+ Project-URL: Repository, https://github.com/s-silt/fxapk
9
+ Project-URL: Issues, https://github.com/s-silt/fxapk/issues
10
+ Keywords: android,apk,forensics,fraud,reverse-engineering,security,androguard,调证,反诈
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Environment :: Console
16
+ Classifier: Topic :: Security
17
+ Classifier: Intended Audience :: Information Technology
18
+ Requires-Python: >=3.11
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: androguard>=4.1
22
+ Requires-Dist: jinja2
23
+ Requires-Dist: typer
24
+ Requires-Dist: python-whois
25
+ Requires-Dist: requests
26
+ Requires-Dist: pyyaml
27
+ Provides-Extra: dev
28
+ Requires-Dist: pytest; extra == "dev"
29
+ Requires-Dist: ruff; extra == "dev"
30
+ Requires-Dist: pyright; extra == "dev"
31
+ Dynamic: license-file
32
+
33
+ # fxapk
34
+
35
+ [![CI](https://github.com/s-silt/fxapk/actions/workflows/ci.yml/badge.svg)](https://github.com/s-silt/fxapk/actions/workflows/ci.yml)
36
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
37
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
38
+
39
+ *CLI 命令 `fxapk`(亦保留 `apkscan` 别名);PyPI 包名 `fxapk`。* · **English**: [README.en.md](README.en.md)
40
+
41
+ > 面向**反诈调证**的 APK 静态分析 CLI —— 不止列出 IP/域名,而是产出**调证线索清单**:
42
+ > 每条线索回答「**这是什么、归属哪家公司、能去找谁调取什么证据**」。
43
+
44
+ `pip install` 即可运行核心功能,**零环境**(不需要 JDK / 模拟器 / 真机)。专为涉诈 App 取证设计:
45
+ 抠出 App 里**真实配置的 key 值**(AppID / AppKey / AppSecret / 渠道号 / uni-app 应用 ID),
46
+ 识别第三方服务与加固厂商并映射到**可调证主体**,对域名/IP 做**「是否建议调证」分级**,
47
+ 把真正的诈骗服务器从成百上千条库/CDN 噪音里浮出来。
48
+
49
+ ---
50
+
51
+ ## 它产出什么(核心区别)
52
+
53
+ 普通工具告诉你「检测到个推 SDK」;fxapk 告诉你 **具体值 + 所属公司 + 调证建议**:
54
+
55
+ ```
56
+ 调用插件 / 配置键值(CONFIG_KEY)
57
+ GETUI_APPID = aBcD1234EfGh5678 → 每日互动股份有限公司(个推) [建议调证]
58
+ PUSH_APPSECRET = zZ9yX8wV7uT6sR5q → 每日互动股份有限公司(个推) [建议调证·强凭据]
59
+ __UNI__ = __UNI__A1B2C3D → 数字天堂(北京)网络技术有限公司(DCloud) [建议调证]
60
+ (示例值,已脱敏)
61
+
62
+ 主控域名(建议调证 —— App 自有/疑似 C2)
63
+ *.api-xxxxx.vip 建议调证:向注册商 / ICP 备案 / 云厂商调归属与租户
64
+ 通联域名 / IP(无需调证 —— 已知基础设施,默认折叠)
65
+ api.map.baidu.com / *.myqcloud.com / getui.net …
66
+
67
+ 调证建议:凭上述 AppSecret 向【个推】调开发者账号实名、应用注册主体、推送下发记录。
68
+ ```
69
+
70
+ 实际渲染的 HTML 报告(**演示数据,已脱敏**):
71
+
72
+ ![apkscan 报告示例](docs/images/report-demo.png)
73
+
74
+ ---
75
+
76
+ ## 安装
77
+
78
+ 要求 **Python 3.11+**。
79
+
80
+ ```bash
81
+ # 从 PyPI(发布后)
82
+ python -m pip install fxapk
83
+
84
+ # 或从源码
85
+ git clone https://github.com/s-silt/fxapk.git
86
+ cd fxapk
87
+ python -m pip install -e .
88
+ ```
89
+
90
+ 核心依赖:`androguard`(解析 APK)、`jinja2`、`typer`、`python-whois`、`requests`、`pyyaml`。
91
+
92
+ > 单元测试**不依赖 androguard、不联网、不需要真机/jadx/frida**(全部基于 `FakeContext` 合成数据):
93
+ > ```bash
94
+ > python -m pip install jinja2 typer python-whois requests pyyaml pytest
95
+ > python -m pytest -q # 324 passed
96
+ > ```
97
+
98
+ 可选依赖(缺失时对应能力**优雅降级**,核心不受影响、不报错):
99
+
100
+ | 可选项 | 启用的能力 |
101
+ |---|---|
102
+ | `jadx`(PATH 外部命令) | `jadx` 深度反编译增强器(不在 PATH 则自动跳过并在报告标注) |
103
+ | `frida-tools` + `frida-dexdump` | `unpack` 真机脱壳 |
104
+ | `mitmproxy` | `capture` 真机抓包流量解析 |
105
+ | Chrome / Edge / Chromium | `--fmt pdf` 报告导出(无头打印) |
106
+
107
+ ---
108
+
109
+ ## 快速开始
110
+
111
+ ```bash
112
+ # 默认:联网富化归属,产出 HTML + JSON 到 out/
113
+ fxapk analyze app.apk --out out
114
+
115
+ # 离线(不联网),加导出 PDF
116
+ fxapk analyze app.apk --out out --offline --fmt html,json,pdf
117
+
118
+ # 只产 JSON(机器读 / 留档)
119
+ fxapk analyze app.apk --fmt json
120
+ ```
121
+
122
+ 未安装为命令时等价用:`python -m apkscan.cli analyze app.apk --out out`。
123
+
124
+ ### 常用参数
125
+
126
+ | 参数 | 说明 |
127
+ |---|---|
128
+ | `--out DIR` | 报告输出目录(默认 `out`) |
129
+ | `--fmt html,json,pdf` | 输出格式,逗号分隔(默认 `html,json`;`pdf` 需 Chrome/Edge) |
130
+ | `--online` / `--offline` | 是否联网富化 WHOIS / ICP 备案 / IP-ASN(默认联网) |
131
+ | `--extra-dex PATH` | 并入脱壳 dump 出的 `.dex`(文件或目录)一起静态分析 |
132
+ | `--dynamic` | 静态分析后若探测到在线设备,自动跑 `unpack` + `capture` |
133
+
134
+ ---
135
+
136
+ ## 输出
137
+
138
+ - `out/report.html` —— 自包含单文件(CSS 内联,可直接分享/手机打开)
139
+ - `out/report.json` —— `Report` 完整序列化(机器读 / 二次处理)
140
+ - `out/report.pdf` —— `--fmt pdf` 时由本机 Chrome/Edge 无头打印生成
141
+
142
+ **报告版式(按调证视角)**:概览(含加固/uni-app 加密标记)→ **★调用插件/配置键值(具体值)**
143
+ → 主控域名(建议调证)/ 通联域名·IP(无需调证,折叠)→ 支付·SDK·联系方式·加固·签名线索
144
+ → 网络端点全表(WHOIS/ICP/ASN 富化、明文/内网标记)→ 技术附录(权限/组件/证书/crypto/密钥)
145
+ → 分析器与富化器运行状态(ran/skipped/error,透明不吞错)。
146
+
147
+ ---
148
+
149
+ ## 分析能力一览
150
+
151
+ **静态分析器(零环境,自动发现)**
152
+
153
+ | 分析器 | 产出 |
154
+ |---|---|
155
+ | `config_keys` ★ | manifest `<meta-data>` + uni-app 配置抠真实 `key=value`,映射调证主体;敏感凭据产 HIGH Finding |
156
+ | `sdk_fingerprint` | 第三方 SDK 指纹 → 厂商(支付/短信/推送/云存储/IM/统计/地图) |
157
+ | `payment` | 聚合支付/收款/商户号/USDT/钱包地址 → 资金线索 |
158
+ | `endpoints` | dex/资源/native/manifest 全量抽 URL/域名/IP(严格降噪) |
159
+ | `js_bundle` | uni-app/H5/RN 打包 JS **字符串字面量内**精确抽端点 + 硬编码密钥 |
160
+ | `jadx` | (需 jadx)深度反编译补端点/密钥 |
161
+ | `packing` | 加固厂商识别(梆梆/爱加密/360/腾讯乐固/娜迦/百度/网易易盾/阿里聚安全/几维) |
162
+ | `certificate` | 签名证书 → 跨样本关联同一开发者 |
163
+ | `contacts` | QQ/微信/Telegram/邮箱/手机号(带去误报) |
164
+ | `permissions` / `components` / `manifest` / `crypto` | 危险权限/导出组件/基础指纹/弱加密 |
165
+
166
+ **富化器(默认联网,`--offline` 可关,结果缓存)**:`whois`(注册人/注册商)、`icp`(ICP 备案主体)、`asn`(IP 归属云厂商/IDC)。
167
+
168
+ **「是否建议调证」分级**(`core/infra.py`):命中公有云/主流 SDK/开源 CDN/标准协议/运营商域名 → 「无需调证」;私网/无效 → 「待核」;其余疑似 App 自有 → 「建议调证」。
169
+
170
+ ---
171
+
172
+ ## 真机动态补全(unpack / 脱壳、capture / 抓包)
173
+
174
+ 涉诈 App 常加固(DEX 加密、运行时还原),静态拿不到真实 C2。apkscan 提供 **device-gated** 的动态补全:
175
+
176
+ ```bash
177
+ fxapk unpack app.apk --out out # root 设备 + frida-dexdump 脱壳,回灌重分析
178
+ fxapk capture <package> --duration 60 # mitmproxy + frida 绕证书绑定,抓运行时端点
179
+ ```
180
+
181
+ **无设备/缺工具时不报错**:返回 `status=skipped`,打印**可逐条复制的取证手册**(装 frida-server、推 CA、注入 SSL unpinning、`--extra-dex` 回灌等完整步骤)。脱壳得到的 DEX 可用 `fxapk analyze app.apk --extra-dex <dump_dir>` 并入静态分析,补全加固隐藏的端点/SDK/配置。
182
+
183
+ > 云端方案:在 root 真机 / 云手机(华为云手机、阿里无影等原生 ARM 安卓)上跑 frida-server,apkscan 部署在小 Linux VM 上经 ADB 驱动即可。
184
+
185
+ ---
186
+
187
+ ## 项目结构
188
+
189
+ ```
190
+ apkscan/
191
+ core/ models / context / apk(androguard 适配) / registry(自动发现) / pipeline / infra / device
192
+ analyzers/ 13 个静态分析器(见上表)
193
+ enrichers/ whois / asn / icp
194
+ dynamic/ unpack(脱壳)/ capture(抓包)
195
+ report/ html / json / pdf + templates/
196
+ rules/ *.yaml(SDK/加固/支付/配置键/权限等规则库,数据与代码分离)
197
+ tests/ 324 个单测(FakeContext,离线)
198
+ docs/ 设计文档
199
+ ```
200
+
201
+ ---
202
+
203
+ ## 合规边界
204
+
205
+ 本工具仅用于**授权的反诈调证 / 安全研究**,只做分析与线索提取,**不提供任何攻击、绕过、规避检测能力**;
206
+ 加固只识别不脱壳(脱壳为可选的真机取证步骤,需操作者自备授权环境),联网富化仅查公开的
207
+ WHOIS / ICP 备案 / ASN 信息。请在合法授权范围内使用。
208
+
209
+ ## License
210
+
211
+ [MIT](LICENSE)
fxapk-0.1.1/README.md ADDED
@@ -0,0 +1,179 @@
1
+ # fxapk
2
+
3
+ [![CI](https://github.com/s-silt/fxapk/actions/workflows/ci.yml/badge.svg)](https://github.com/s-silt/fxapk/actions/workflows/ci.yml)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
5
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
6
+
7
+ *CLI 命令 `fxapk`(亦保留 `apkscan` 别名);PyPI 包名 `fxapk`。* · **English**: [README.en.md](README.en.md)
8
+
9
+ > 面向**反诈调证**的 APK 静态分析 CLI —— 不止列出 IP/域名,而是产出**调证线索清单**:
10
+ > 每条线索回答「**这是什么、归属哪家公司、能去找谁调取什么证据**」。
11
+
12
+ `pip install` 即可运行核心功能,**零环境**(不需要 JDK / 模拟器 / 真机)。专为涉诈 App 取证设计:
13
+ 抠出 App 里**真实配置的 key 值**(AppID / AppKey / AppSecret / 渠道号 / uni-app 应用 ID),
14
+ 识别第三方服务与加固厂商并映射到**可调证主体**,对域名/IP 做**「是否建议调证」分级**,
15
+ 把真正的诈骗服务器从成百上千条库/CDN 噪音里浮出来。
16
+
17
+ ---
18
+
19
+ ## 它产出什么(核心区别)
20
+
21
+ 普通工具告诉你「检测到个推 SDK」;fxapk 告诉你 **具体值 + 所属公司 + 调证建议**:
22
+
23
+ ```
24
+ 调用插件 / 配置键值(CONFIG_KEY)
25
+ GETUI_APPID = aBcD1234EfGh5678 → 每日互动股份有限公司(个推) [建议调证]
26
+ PUSH_APPSECRET = zZ9yX8wV7uT6sR5q → 每日互动股份有限公司(个推) [建议调证·强凭据]
27
+ __UNI__ = __UNI__A1B2C3D → 数字天堂(北京)网络技术有限公司(DCloud) [建议调证]
28
+ (示例值,已脱敏)
29
+
30
+ 主控域名(建议调证 —— App 自有/疑似 C2)
31
+ *.api-xxxxx.vip 建议调证:向注册商 / ICP 备案 / 云厂商调归属与租户
32
+ 通联域名 / IP(无需调证 —— 已知基础设施,默认折叠)
33
+ api.map.baidu.com / *.myqcloud.com / getui.net …
34
+
35
+ 调证建议:凭上述 AppSecret 向【个推】调开发者账号实名、应用注册主体、推送下发记录。
36
+ ```
37
+
38
+ 实际渲染的 HTML 报告(**演示数据,已脱敏**):
39
+
40
+ ![apkscan 报告示例](docs/images/report-demo.png)
41
+
42
+ ---
43
+
44
+ ## 安装
45
+
46
+ 要求 **Python 3.11+**。
47
+
48
+ ```bash
49
+ # 从 PyPI(发布后)
50
+ python -m pip install fxapk
51
+
52
+ # 或从源码
53
+ git clone https://github.com/s-silt/fxapk.git
54
+ cd fxapk
55
+ python -m pip install -e .
56
+ ```
57
+
58
+ 核心依赖:`androguard`(解析 APK)、`jinja2`、`typer`、`python-whois`、`requests`、`pyyaml`。
59
+
60
+ > 单元测试**不依赖 androguard、不联网、不需要真机/jadx/frida**(全部基于 `FakeContext` 合成数据):
61
+ > ```bash
62
+ > python -m pip install jinja2 typer python-whois requests pyyaml pytest
63
+ > python -m pytest -q # 324 passed
64
+ > ```
65
+
66
+ 可选依赖(缺失时对应能力**优雅降级**,核心不受影响、不报错):
67
+
68
+ | 可选项 | 启用的能力 |
69
+ |---|---|
70
+ | `jadx`(PATH 外部命令) | `jadx` 深度反编译增强器(不在 PATH 则自动跳过并在报告标注) |
71
+ | `frida-tools` + `frida-dexdump` | `unpack` 真机脱壳 |
72
+ | `mitmproxy` | `capture` 真机抓包流量解析 |
73
+ | Chrome / Edge / Chromium | `--fmt pdf` 报告导出(无头打印) |
74
+
75
+ ---
76
+
77
+ ## 快速开始
78
+
79
+ ```bash
80
+ # 默认:联网富化归属,产出 HTML + JSON 到 out/
81
+ fxapk analyze app.apk --out out
82
+
83
+ # 离线(不联网),加导出 PDF
84
+ fxapk analyze app.apk --out out --offline --fmt html,json,pdf
85
+
86
+ # 只产 JSON(机器读 / 留档)
87
+ fxapk analyze app.apk --fmt json
88
+ ```
89
+
90
+ 未安装为命令时等价用:`python -m apkscan.cli analyze app.apk --out out`。
91
+
92
+ ### 常用参数
93
+
94
+ | 参数 | 说明 |
95
+ |---|---|
96
+ | `--out DIR` | 报告输出目录(默认 `out`) |
97
+ | `--fmt html,json,pdf` | 输出格式,逗号分隔(默认 `html,json`;`pdf` 需 Chrome/Edge) |
98
+ | `--online` / `--offline` | 是否联网富化 WHOIS / ICP 备案 / IP-ASN(默认联网) |
99
+ | `--extra-dex PATH` | 并入脱壳 dump 出的 `.dex`(文件或目录)一起静态分析 |
100
+ | `--dynamic` | 静态分析后若探测到在线设备,自动跑 `unpack` + `capture` |
101
+
102
+ ---
103
+
104
+ ## 输出
105
+
106
+ - `out/report.html` —— 自包含单文件(CSS 内联,可直接分享/手机打开)
107
+ - `out/report.json` —— `Report` 完整序列化(机器读 / 二次处理)
108
+ - `out/report.pdf` —— `--fmt pdf` 时由本机 Chrome/Edge 无头打印生成
109
+
110
+ **报告版式(按调证视角)**:概览(含加固/uni-app 加密标记)→ **★调用插件/配置键值(具体值)**
111
+ → 主控域名(建议调证)/ 通联域名·IP(无需调证,折叠)→ 支付·SDK·联系方式·加固·签名线索
112
+ → 网络端点全表(WHOIS/ICP/ASN 富化、明文/内网标记)→ 技术附录(权限/组件/证书/crypto/密钥)
113
+ → 分析器与富化器运行状态(ran/skipped/error,透明不吞错)。
114
+
115
+ ---
116
+
117
+ ## 分析能力一览
118
+
119
+ **静态分析器(零环境,自动发现)**
120
+
121
+ | 分析器 | 产出 |
122
+ |---|---|
123
+ | `config_keys` ★ | manifest `<meta-data>` + uni-app 配置抠真实 `key=value`,映射调证主体;敏感凭据产 HIGH Finding |
124
+ | `sdk_fingerprint` | 第三方 SDK 指纹 → 厂商(支付/短信/推送/云存储/IM/统计/地图) |
125
+ | `payment` | 聚合支付/收款/商户号/USDT/钱包地址 → 资金线索 |
126
+ | `endpoints` | dex/资源/native/manifest 全量抽 URL/域名/IP(严格降噪) |
127
+ | `js_bundle` | uni-app/H5/RN 打包 JS **字符串字面量内**精确抽端点 + 硬编码密钥 |
128
+ | `jadx` | (需 jadx)深度反编译补端点/密钥 |
129
+ | `packing` | 加固厂商识别(梆梆/爱加密/360/腾讯乐固/娜迦/百度/网易易盾/阿里聚安全/几维) |
130
+ | `certificate` | 签名证书 → 跨样本关联同一开发者 |
131
+ | `contacts` | QQ/微信/Telegram/邮箱/手机号(带去误报) |
132
+ | `permissions` / `components` / `manifest` / `crypto` | 危险权限/导出组件/基础指纹/弱加密 |
133
+
134
+ **富化器(默认联网,`--offline` 可关,结果缓存)**:`whois`(注册人/注册商)、`icp`(ICP 备案主体)、`asn`(IP 归属云厂商/IDC)。
135
+
136
+ **「是否建议调证」分级**(`core/infra.py`):命中公有云/主流 SDK/开源 CDN/标准协议/运营商域名 → 「无需调证」;私网/无效 → 「待核」;其余疑似 App 自有 → 「建议调证」。
137
+
138
+ ---
139
+
140
+ ## 真机动态补全(unpack / 脱壳、capture / 抓包)
141
+
142
+ 涉诈 App 常加固(DEX 加密、运行时还原),静态拿不到真实 C2。apkscan 提供 **device-gated** 的动态补全:
143
+
144
+ ```bash
145
+ fxapk unpack app.apk --out out # root 设备 + frida-dexdump 脱壳,回灌重分析
146
+ fxapk capture <package> --duration 60 # mitmproxy + frida 绕证书绑定,抓运行时端点
147
+ ```
148
+
149
+ **无设备/缺工具时不报错**:返回 `status=skipped`,打印**可逐条复制的取证手册**(装 frida-server、推 CA、注入 SSL unpinning、`--extra-dex` 回灌等完整步骤)。脱壳得到的 DEX 可用 `fxapk analyze app.apk --extra-dex <dump_dir>` 并入静态分析,补全加固隐藏的端点/SDK/配置。
150
+
151
+ > 云端方案:在 root 真机 / 云手机(华为云手机、阿里无影等原生 ARM 安卓)上跑 frida-server,apkscan 部署在小 Linux VM 上经 ADB 驱动即可。
152
+
153
+ ---
154
+
155
+ ## 项目结构
156
+
157
+ ```
158
+ apkscan/
159
+ core/ models / context / apk(androguard 适配) / registry(自动发现) / pipeline / infra / device
160
+ analyzers/ 13 个静态分析器(见上表)
161
+ enrichers/ whois / asn / icp
162
+ dynamic/ unpack(脱壳)/ capture(抓包)
163
+ report/ html / json / pdf + templates/
164
+ rules/ *.yaml(SDK/加固/支付/配置键/权限等规则库,数据与代码分离)
165
+ tests/ 324 个单测(FakeContext,离线)
166
+ docs/ 设计文档
167
+ ```
168
+
169
+ ---
170
+
171
+ ## 合规边界
172
+
173
+ 本工具仅用于**授权的反诈调证 / 安全研究**,只做分析与线索提取,**不提供任何攻击、绕过、规避检测能力**;
174
+ 加固只识别不脱壳(脱壳为可选的真机取证步骤,需操作者自备授权环境),联网富化仅查公开的
175
+ WHOIS / ICP 备案 / ASN 信息。请在合法授权范围内使用。
176
+
177
+ ## License
178
+
179
+ [MIT](LICENSE)
@@ -0,0 +1,3 @@
1
+ """apkscan — 涉诈 APK 调证分析 CLI。"""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,5 @@
1
+ """apkscan.analyzers — 静态分析器(零环境,永远可用)。
2
+
3
+ registry.discover_analyzers() 会用 pkgutil 自动发现本包内所有 BaseAnalyzer 具体子类,
4
+ 新增分析器模块无需改任何中心文件。
5
+ """