🛡️ API 监控层(apimonitor 包)
com.android.reverse.apimonitor— ZjDroid 的敏感行为感知中枢,由 1 个管理器 + 2 个抽象基类 + 17 个具体 Hook 类构成,在模块加载时批量注册,对目标 App 的 20 类敏感 API 调用实施全面监控。
📌 包整体职责
当 ReverseXposedModule 在目标 App 进程中加载时,它调用:
java
ApiMonitorHookManager.getInstance().startMonitor();这一行代码触发对 17 个 Hook 类(共覆盖 20+ 个敏感 API 方法)的批量 Xposed Hook 注册。此后,每当目标 App 调用短信、电话、网络、通讯录、账号、摄像头、录音等敏感 API 时,框架自动:
- 通过 AbstractBahaviorHookCallBack 打印
Invoke 类名->方法名调用头 - 通过各 Hook 类的
descParam()提取并记录关键参数 - 所有输出统一走
Logger.log_behavior(),tag 形如zjdroid-apimonitor-<包名>
🗂️ 全部类清单
框架基础设施(3 个)
| 类名 | 职责一句话 |
|---|---|
| ApiMonitorHookManager | 单例调度器,持有所有 Hook 实例,通过 startMonitor() 批量激活 |
| ApiMonitorHook | 所有 Hook 类的抽象基类,提供共享 hookhelper 并声明 startHook() 契约 |
| AbstractBahaviorHookCallBack | 行为日志回调基类,统一输出调用头并委托 descParam() 提取参数 |
短信 / 电话(2 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| SmsManagerHook | 短信发送(文本/数据/长短信)、SIM 卡短信读取 | 查看文档 |
| TelephonyManagerHook | 本机号码读取、电话状态订阅(通话/基站/信号) | 查看文档 |
网络(2 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| NetWorkHook | HTTP 请求(HttpURLConnection + Apache HttpClient),含响应状态码 | 查看文档 |
| ConnectivityManagerHook | 网络连接状态查询与变化监听 | 查看文档 |
通讯录 / 数据存储(1 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| ContentResolverHook | 通讯录、短信、通话记录、浏览器书签的 CRUD 操作(含 SQL 语义日志) | 查看文档 |
账号(1 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| AccountManagerHook | 设备已登录账号枚举(全类型 / 按类型查询) | 查看文档 |
摄像头 / 录音 / 录像(3 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| CameraHook | Camera1 拍照、三种预览帧回调注册 | 查看文档 |
| AudioRecordHook | AudioRecord 麦克风录音启动 | 查看文档 |
| MediaRecorderHook | MediaRecorder 音视频录制 | 查看文档 |
进程 / Shell(2 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| RuntimeHook | Runtime.exec() Shell 命令执行 | 查看文档 |
| ProcessBuilderHook | ProcessBuilder.start() 进程创建 | 查看文档 |
系统服务 / 广播(2 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| ContextImplHook | Context.getSystemService() 系统服务获取 | 查看文档 |
| ActivityThreadHook | 主线程 Handler 消息、广播接收注册 | 查看文档 |
通知 / 闹钟(2 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| NotificationManagerHook | 通知发送(notify()) | 查看文档 |
| AlarmManagerHook | 闹钟 / 定时任务注册 | 查看文档 |
包管理 / Activity 管理(2 个)
| 类名 | 监控目标 | 文档 |
|---|---|---|
| PackageManagerHook | 应用包信息查询(已安装列表等) | 查看文档 |
| ActivityManagerHook | Activity / Service 管理操作 | 查看文档 |
文档说明
上表中的 MediaRecorderHook、RuntimeHook、ProcessBuilderHook、ContextImplHook、NotificationManagerHook、AlarmManagerHook、ConnectivityManagerHook、PackageManagerHook、ActivityManagerHook、ActivityThreadHook 共 10 个类的详细文档由另一位同事负责编写,链接将在完成后生效。
🔗 整体架构关系图
📍 在项目中的位置
src/com/android/reverse/
├── mod/
│ └── ReverseXposedModule.java ← 调用 ApiMonitorHookManager.startMonitor()
├── apimonitor/ ← 本包
│ ├── ApiMonitorHookManager.java ← 单例调度入口
│ ├── ApiMonitorHook.java ← 抽象基类
│ ├── AbstractBahaviorHookCallBack.java ← 回调基类
│ ├── SmsManagerHook.java
│ ├── TelephonyManagerHook.java
│ ├── NetWorkHook.java
│ ├── ContentResolverHook.java
│ ├── AccountManagerHook.java
│ ├── CameraHook.java
│ ├── AudioRecordHook.java
│ ├── MediaRecorderHook.java
│ ├── RuntimeHook.java
│ ├── ProcessBuilderHook.java
│ ├── ContextImplHook.java
│ ├── ActivityThreadHook.java
│ ├── NotificationManagerHook.java
│ ├── AlarmManagerHook.java
│ ├── ConnectivityManagerHook.java
│ ├── PackageManagerHook.java
│ └── ActivityManagerHook.java
└── hook/
├── HookHelperFacktory.java ← 工厂,供 ApiMonitorHook 使用
└── HookHelperInterface.java扩展新 Hook 的步骤
- 新建
XxxHook extends ApiMonitorHook,实现startHook() - 在
startHook()中用RefInvoke.findMethodExact()定位目标方法 - 调用
hookhelper.hookMethod(method, new AbstractBahaviorHookCallBack() { ... }) - 在
ApiMonitorHookManager中添加字段、实例化、调用startHook()
四步完成一个新监控点的接入。