Skip to content

🛡️ 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 时,框架自动:

  1. 通过 AbstractBahaviorHookCallBack 打印 Invoke 类名->方法名 调用头
  2. 通过各 Hook 类的 descParam() 提取并记录关键参数
  3. 所有输出统一走 Logger.log_behavior(),tag 形如 zjdroid-apimonitor-<包名>

🗂️ 全部类清单

框架基础设施(3 个)

类名职责一句话
ApiMonitorHookManager单例调度器,持有所有 Hook 实例,通过 startMonitor() 批量激活
ApiMonitorHook所有 Hook 类的抽象基类,提供共享 hookhelper 并声明 startHook() 契约
AbstractBahaviorHookCallBack行为日志回调基类,统一输出调用头并委托 descParam() 提取参数

短信 / 电话(2 个)

类名监控目标文档
SmsManagerHook短信发送(文本/数据/长短信)、SIM 卡短信读取查看文档
TelephonyManagerHook本机号码读取、电话状态订阅(通话/基站/信号)查看文档

网络(2 个)

类名监控目标文档
NetWorkHookHTTP 请求(HttpURLConnection + Apache HttpClient),含响应状态码查看文档
ConnectivityManagerHook网络连接状态查询与变化监听查看文档

通讯录 / 数据存储(1 个)

类名监控目标文档
ContentResolverHook通讯录、短信、通话记录、浏览器书签的 CRUD 操作(含 SQL 语义日志)查看文档

账号(1 个)

类名监控目标文档
AccountManagerHook设备已登录账号枚举(全类型 / 按类型查询)查看文档

摄像头 / 录音 / 录像(3 个)

类名监控目标文档
CameraHookCamera1 拍照、三种预览帧回调注册查看文档
AudioRecordHookAudioRecord 麦克风录音启动查看文档
MediaRecorderHookMediaRecorder 音视频录制查看文档

进程 / Shell(2 个)

类名监控目标文档
RuntimeHookRuntime.exec() Shell 命令执行查看文档
ProcessBuilderHookProcessBuilder.start() 进程创建查看文档

系统服务 / 广播(2 个)

类名监控目标文档
ContextImplHookContext.getSystemService() 系统服务获取查看文档
ActivityThreadHook主线程 Handler 消息、广播接收注册查看文档

通知 / 闹钟(2 个)

类名监控目标文档
NotificationManagerHook通知发送(notify()查看文档
AlarmManagerHook闹钟 / 定时任务注册查看文档

包管理 / Activity 管理(2 个)

类名监控目标文档
PackageManagerHook应用包信息查询(已安装列表等)查看文档
ActivityManagerHookActivity / 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 的步骤

  1. 新建 XxxHook extends ApiMonitorHook,实现 startHook()
  2. startHook() 中用 RefInvoke.findMethodExact() 定位目标方法
  3. 调用 hookhelper.hookMethod(method, new AbstractBahaviorHookCallBack() { ... })
  4. ApiMonitorHookManager 中添加字段、实例化、调用 startHook()

四步完成一个新监控点的接入。

基于 MIT 协议发布 · 本文档仅用于安全研究与教学目的