Skip to content

接口类型定义 agent/src/android/lib/interfaces.ts ​

集中定义 Android agent 各模块之间、以及 agent 与 Python 端之间通过 RPC 传递的数据结构(TypeScript interface)。本模块不含任何运行时逻辑,仅做类型契约,被 shell.ts、keystore.ts、heap.ts、hooking.ts 以及 RPC 聚合层 agent/src/rpc/android.ts 引用。

📋 模块概览 ​

项目值
源码路径agent/src/android/lib/interfaces.ts
平台Android(仅类型,无运行时代码)
导出的 RPC无
导出的接口IAndroidFilesystem、IExecutedCommand、IKeyStoreEntry、ICurrentActivityFragment、IHeapClassDictionary、IHeapObject、IHeapNormalised、IJavaField、IKeyStoreDetail
依赖frida-java-bridge(仅类型 JavaTypes)

🎯 解决的问题 ​

  • 让 shell.ts 返回的命令执行结果有统一形状(command / stdOut / stdErr),Python 端按字段名取值。
  • 让 keystore.ts 的 key/alias 列表与详情、heap.ts 的活动实例与字段、hooking.ts 的当前 Activity/Fragment 都有明确契约。
  • 在 RPC 聚合层 agent/src/rpc/android.ts 中作为参数/返回类型注解,提供编译期检查。

🏗️ 导出的接口 ​

文件系统与命令执行 ​

接口字段用途
IAndroidFilesystemfiles: any; path: string; readable: boolean; writable: booleanfilesystem.ts 返回目录列举与可读写性
IExecutedCommandcommand: string; stdOut: string; stdErr: stringshell.ts 返回的命令结果,见 agent/src/android/lib/interfaces.ts:10

Keystore ​

接口字段用途
IKeyStoreEntryalias: string; is_certificate: boolean; is_key: booleankeystore 列表项,区分证书与密钥,见 agent/src/android/lib/interfaces.ts:16
IKeyStoreDetailkeyAlgorithm?、keySize?、blockModes?、digests?、encryptionPaddings?、signaturePaddings?、purposes?、origin?、keystoreAlias?、isInsideSecureHardware?、isUserAuthenticationRequired? 等大量可选字符串字段keystore 密钥详情,全部可选以应对不同 API level 与设备支持度,见 agent/src/android/lib/interfaces.ts:47

IKeyStoreDetail 末尾标注了两个“crashy fields”——isTrustedUserPresenceRequired 与 isUserConfirmationRequired(agent/src/android/lib/interfaces.ts:67),部分设备上访问会抛异常,因此单列注释提醒。

Heap ​

接口字段用途
IHeapClassDictionary[index: string]: IHeapObject[]按类名分组的堆实例字典,见 agent/src/android/lib/interfaces.ts:27
IHeapObjecthashcode: number; instance: JavaTypes.Wrapper单个堆实例,instance 是 frida-java-bridge 的 Wrapper,见 agent/src/android/lib/interfaces.ts:31
IHeapNormalisedhashcode: number; classname: string; tostring: string规范化后的堆实例展示,不含 Wrapper,便于序列化回传 Python,见 agent/src/android/lib/interfaces.ts:36

Hooking 与字段 ​

接口字段用途
ICurrentActivityFragment`activivity: stringnull; fragment: string
IJavaFieldname: string; value: string堆实例字段名/值,见 agent/src/android/lib/interfaces.ts:42

⚙️ 实现要点 ​

  • 纯类型模块:文件只有 import type 与 export interface,编译后不产生运行时代码,对 agent 体积零影响。
  • JavaTypes.Wrapper 引用:IHeapObject.instance 显式标注为 frida-java-bridge 的 Wrapper 类型,避免在序列化路径上误用——Python 端无法直接接收 Wrapper,因此 IHeapNormalised 把它拆成 classname/tostring 两个字符串再回传。
  • 大量可选字段:IKeyStoreDetail 几乎所有字段都标 ?,因为 KeyInfo 的各属性在不同 Android 版本、不同硬件安全模块(HSM/TEE)上可用性不一,缺失字段不应当让整个 RPC 失败。
  • 字段名拼写遗留:ICurrentActivityFragment.activivity 是源码中的既有拼写(agent/src/android/lib/interfaces.ts:23),文档与下游代码需按此名访问,未做修正以免破坏契约。
  • 复用者:agent/src/rpc/android.ts:15-25 显式 import 了 IHeapObject、IJavaField、IKeyStoreDetail、ICurrentActivityFragment、IExecutedCommand、IKeyStoreEntry 作为 RPC 方法的参数/返回类型。

🔍 源码索引 ​

符号位置
IAndroidFilesystemagent/src/android/lib/interfaces.ts:3
IExecutedCommandagent/src/android/lib/interfaces.ts:10
IKeyStoreEntryagent/src/android/lib/interfaces.ts:16
ICurrentActivityFragmentagent/src/android/lib/interfaces.ts:22
IHeapClassDictionaryagent/src/android/lib/interfaces.ts:27
IHeapObjectagent/src/android/lib/interfaces.ts:31
IHeapNormalisedagent/src/android/lib/interfaces.ts:36
IJavaFieldagent/src/android/lib/interfaces.ts:42
IKeyStoreDetailagent/src/android/lib/interfaces.ts:47
“crashy fields” 注释agent/src/android/lib/interfaces.ts:66

🔗 相关文档 ​

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