Skip to content

任务管理 agent/src/lib/jobs.ts ​

jobs.ts 实现 Agent 的 Hook 任务(Job)抽象。每个长时间生效的 Hook(如 watch class、SSL pinning disable、root disable、crypto monitor)都被封装为一个 Job,记录其 InvocationListener / Interceptor 替换 / Java 方法实现替换,便于后续 jobsKill 时统一清理。

📋 模块概览 ​

项目值
文件路径agent/src/lib/jobs.ts
平台通用
导出 RPC无(被 rpc/jobs.ts 包装为 jobsGet / jobsKill)
依赖lib/color.ts

🎯 解决的问题 ​

  • 给每个 Hook 会话分配唯一 identifier,Python 侧据此杀任务。
  • 统一管理三类 Hook 资源:Interceptor.attach 的 InvocationListener、Interceptor.replace 的 NativeCallback、Java 方法 implementation 替换。
  • 在 killAll 时按类型分别 detach / revert / 置空 implementation。

🏗️ 导出的方法 ​

符号说明
class Job任务容器,存 identifier / type / 三类 hook 句柄
Job.addInvocation(x)注册一个 InvocationListener
Job.addImplementation(x)注册一个 Java 方法 overload(implementation 替换)
Job.addReplacement(x)注册一个 Interceptor.replace 目标
Job.killAll()清理本任务全部 hook
identifier()生成 6 位随机数字 id
all()返回当前所有 Job
add(job)注册 Job 并 send 日志
hasIdent(ident) / hasType(type)查重
kill(ident)按 id 杀任务

⚙️ 实现要点 ​

  • 三类资源分别清理,因为它们的 detach 方式不同:
    ts
    // agent/src/lib/jobs.ts:41-70
    killAll(): void {
      if (this.invocations && this.invocations.length > 0) {
        this.invocations.forEach((invocation) => {
          invocation ? invocation.detach() : ...;
        });
      }
      if (this.replacements && this.replacements.length > 0) {
        this.replacements.forEach((replacement) => { Interceptor.revert(replacement); });
      }
      if (this.implementations && this.implementations.length > 0) {
        this.implementations.forEach((method) => {
          send(...);
          method.implementation = null;  // 还原 Java 方法
        });
      }
    }
  • identifier:用 Math.random().toString(36).substring(2,8) 生成 6 位 base36 串再转 Number,见 :77。在 add 时 send 注册日志,Python 侧据此显示任务编号。
  • addInvocation 容错:null 跳过、undefined 报 warn。iOS pinning / jailbreak 等模块在目标类不存在时返回 null,调用方据此跳过注册(见 ios/pinning.ts:518 的 job.addInvocation(trustKit(...)))。
  • addImplementation 容错:null(类未找到)跳过、undefined 打印堆栈,对应 android/pinning.ts:382-389 的 try/catch 返回 null 模式。
  • kill:先 killAll() 再从 currentJobs 数组过滤掉该 id,见 :112-131。

📐 Job 生命周期 ​

🔍 源码索引 ​

符号位置
class Jobagent/src/lib/jobs.ts:3
addInvocationagent/src/lib/jobs.ts:15
addImplementationagent/src/lib/jobs.ts:25
addReplacementagent/src/lib/jobs.ts:36
killAllagent/src/lib/jobs.ts:41
currentJobsagent/src/lib/jobs.ts:75
identifieragent/src/lib/jobs.ts:77
allagent/src/lib/jobs.ts:78
addagent/src/lib/jobs.ts:80
hasIdentagent/src/lib/jobs.ts:87
hasTypeagent/src/lib/jobs.ts:99
killagent/src/lib/jobs.ts:112

🔗 相关文档 ​

基于 GPL-3.0-or-later 许可发布