PayamDeveloper/PermSentry
GitHub: PayamDeveloper/PermSentry
PermSentry 通过静态解析 Android APK 的权限声明,识别危险权限和可疑权限组合并给出量化风险评分,帮助开发者快速筛查应用的安全风险。
Stars: 1 | Forks: 0
# PermSentry
一款针对 Android `.apk` 文件的静态权限风险扫描器。
PermSentry 会解析 APK 的 manifest 并标记以下内容:
- **危险权限**(Android 自身的运行时权限分类)
- **易被滥用权限** —— 未被官方归类为“危险”但在恶意软件/间谍软件/广告软件中异常常见的权限(`SYSTEM_ALERT_WINDOW`、`BIND_ACCESSIBILITY_SERVICE`、`QUERY_ALL_PACKAGES` 等)
- **可疑权限组合** —— 匹配已知恶意软件行为模式的特征(短信+联系人窃取、覆盖层/银行木马、OTP 拦截、下载器、指纹采集、跟踪软件)
……并将所有这些汇总为一个 0–100 的单一风险评分,附带 Low/Medium/High/Critical 标签。
这是一个**启发式筛查工具**,而非恶意软件的最终判定。它只是提示你需要更深入地检查哪些内容——它不能替代动态分析、代码审查或真正的逆向工程过程。
## 安装说明
```
git clone https://github.com//permsentry.git
cd permsentry
pip install -e .
```
或者,你也可以直接安装依赖项,并将其作为模块运行,而无需安装该包:
```
pip install -r requirements.txt
python -m permsentry.cli scan app.apk
```
## 使用方法
```
# 人类可读的终端报告
permsentry scan app.apk
# 机器可读的 JSON (用于管道传递到其他工具 / CI)
permsentry scan app.apk --json
# 将 JSON 直接写入文件
permsentry scan app.apk --output report.json
```
退出代码:`0` 表示 Low/Medium 风险,`2` 表示 High/Critical 风险——非常适合在 CI 流程中基于有风险的构建触发失败。
### 示例输出
```
╭──────────── PermSentry — APK Info ────────────╮
│ com.example.totallylegit │
│ version: 2.1 (21) min_sdk=21 target_sdk=30 │
╰────────────────────────────────────────────────╯
Risk score: 100/100 Risk level: Critical (6 permissions declared)
Flagged Permissions
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┓
┃ Permission ┃ Category ┃ Weight ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━┩
│ BIND_ACCESSIBILITY_SERVICE │ abuse-prone │ 9 │
│ QUERY_ALL_PACKAGES │ abuse-prone │ 5 │
│ READ_SMS │ dangerous │ 9 │
...
Suspicious Permission Combinations:
• Overlay / banking-trojan pattern (+35)
Can draw over other apps AND read/control screen content...
Matched: BIND_ACCESSIBILITY_SERVICE, SYSTEM_ALERT_WINDOW
```
## 运行原理
1. **解析** —— [androguard](https://github.com/androguard/androguard) 解码 APK 编译后的二进制文件 `AndroidManifest.xml`,提取出声明的 `` 列表以及包元数据。
2. **评分** —— `risk_engine.py` 根据两个静态表(`permissions_db.py`)和一组可疑的共现模式遍历权限列表,生成限制在 100 以内的加权分数。
3. **报告** —— `reporter.py` 会渲染出一个带有颜色的终端表格(通过 [rich](https://github.com/Textualize/rich))或 JSON。
## 项目布局
```
permsentry/
permissions_db.py # dangerous + abuse-prone permission tables
manifest_parser.py # androguard wrapper -> ApkInfo
risk_engine.py # scoring logic + suspicious combo patterns
reporter.py # terminal + JSON rendering
cli.py # argparse entry point
tests/
test_risk_engine.py # unit tests for scoring logic (no APK file needed)
```
## 路线图(v2 构想)
- 导出组件分析(带有 `android:exported="true"` 且没有权限保护的 activities/services/receivers)
- 检测会禁用现代 Android 安全默认设置的 `minSdkVersion` / `targetSdkVersion` 组合
- 证书/签名分析
- 导出 HTML 报告
- 批量扫描 APK 目录
## 局限性
- 它仅对声明的权限进行**静态**分析——它不会执行应用,因此无法看到运行时行为、混淆/动态加载的代码或 native 库行为。
- 声明了某个权限并不意味着它被恶意滥用;该工具旨在辅助聚焦人工审查重点,而非取代人工审查。
- 危险/易被滥用的权限表是手动维护的——请定期将其与[官方 Android 权限文档](https://developer.android.com/reference/android/Manifest.permission)进行核对,因为 Google 会偶尔添加或重新分类权限。
## 开源许可
MIT
标签:Android安全, APK分析, Python, 云安全监控, 无后门, 移动端安全, 逆向工具, 静态分析