frankheat/noxen
GitHub: frankheat/noxen
基于 Frida 的 Android 运行时拦截工具,用于捕获、检查、修改和转发应用组件间的 Intent 通信以映射攻击面。
Stars: 89 | Forks: 8
用于安全研究的 Android 运行时拦截工具。noxen 使用 **Frida** 来 hook 正在运行的 Android 进程中的 Java 方法,并映射应用程序组件在运行时的通信方式。它能够捕获攻击面事件(例如 `android.content.Intent` 对象),然后允许您在终端 UI 中检查、修改、转发或丢弃这些事件。



## 功能介绍
- 有助于在运行时映射组件通信和攻击面行为。
- 拦截常见的 Android 运行时入口点,例如 `getIntent`、`startActivity`、`sendBroadcast`、`startService` 以及 `PendingIntent` 的创建路径。
- 显示 action、component、data URI、flags、categories、extras、PendingIntent flags、可选的 Java 堆栈跟踪,以及可用的攻击面标签。
- 允许在转发之前修改 intent 的 action、data、categories、flags 和 extras。
- 允许丢弃被拦截的 intent。
- 将捕获的历史记录、结果、过滤器、列和修改过的 intent 快照存储在 `.noxen` 项目文件中。
- 提供独立的拦截和历史记录过滤器。
- 为 Root 后的测试设备提供可选的主页选项卡 `Input ANR bypass (experimental)`,主要用于解决当 noxen 有意保持目标线程时发生的输入分发 (input-dispatch) ANR 问题。
- 使用结构化的日志选项卡,具有对齐的来源/级别列,以及可选的 `Verbose logs` 用于详细的 hook 和绕过诊断。
- 使用 androguard 分析 APK 以生成 hook 配置。
## 快速开始
克隆仓库:
```
git clone https://github.com/frankheat/noxen.git
cd noxen
```
安装与您在 Android 设备上运行的 `frida-server` 版本相匹配的 Frida Python 包。例如:
```
pip install frida==17.7.3
```
然后安装 noxen:
```
pip install .
```
启动 noxen:
```
noxen
```
您也可以通过 Python 启动它:
```
python -m noxen
```
从主页选项卡中选择设备、模式和目标应用程序。使用 `noxen --project session.noxen` 打开现有项目,或使用 `noxen --new-project session` 创建新项目。
如果您还需要 `noxen-analyze` 命令来从 APK 生成特定于应用程序的 hook 定义,请安装可选的分析扩展:
```
pip install ".[analyze]"
noxen-analyze app.apk -o hooks.json
```
仅在开发 noxen 本身时使用可编辑安装:
```
pip install -e .
```
常规安装包含默认的 hook 配置和打包的 Frida JavaScript 运行时捆绑包,因此在安装后无需从源代码检出目录启动 noxen。
有关所有选项、命令、过滤器和项目管理的完整文档,请参阅 **https://frankheat.github.io/noxen-docs/**。
## 界面预览


## 演练应用
配套的 Android 目标应用位于 [noxen-playground](https://github.com/frankheat/noxen-playground) 仓库中。
它在设备上名为 `noxen playground`,使用的包名为 `com.frankheat.noxen.playground`。
在开发 noxen 时,可使用它来验证常见的运行时流程:
```
cd ../noxen-playground
./gradlew assembleDebug
```
请直接在 Android Studio 中打开 `noxen-playground/`,而不是其工作区父目录。
## 开发
该 Python 包采用 `src` 布局:可导入的代码位于 `src/noxen/` 中。这使仓库根目录与安装的包分离开来,避免了 `noxen` 命令与本地包目录之间的 shell 歧义。
在更改 Python 代码后,请运行单元测试。在验证 Frida 兼容性时,请使用您支持的 Frida 环境重复相同的检查。例如,本仓库通常使用本地的 Frida 16 和 Frida 17 虚拟环境进行测试:
```
../frida-16.6.6/bin/python -m compileall -q src/noxen
PYTHONPATH=src ../frida-16.6.6/bin/python -m unittest discover -s tests
../frida-17.7.3/bin/python -m compileall -q src/noxen
PYTHONPATH=src ../frida-17.7.3/bin/python -m unittest discover -s tests
```
在更改 `agent/script.js` 或 `agent/system_server.js` 之后,请重新构建提交的 Frida 捆绑包和打包的运行时副本:
```
npm install
npm run build
```
请提交更改后的源脚本、与之匹配的 `*_bundle.js` 文件以及同步的 `src/noxen/runtime/` 副本。不要提交 `node_modules/`。
## 许可证
noxen 基于 [GNU General Public License v3.0](LICENSE) 发布。
标签:Androguard, Android动态分析, APK分析, Frida Hook, Intent修改, Intent拦截, Java方法Hook, MITM代理, noxen, Python, Root设备, 代码生成, 安卓安全, 安卓漏洞挖掘, 应用安全评估, 攻击面分析, 数据可视化, 无后门, 渗透测试工具, 移动安全测试, 组件通信, 终端用户界面(TUI), 自定义脚本, 运行时拦截, 逆向工具