Skip to content

Java 类类型别名 agent/src/android/lib/types.ts ​

为 agent 各模块通过 Java.use(...) 拿到的 Java 类句柄定义统一的 TypeScript 类型别名,避免到处写 any 散落。本模块不含运行时逻辑,仅做类型标注,被 pinning.ts、root.ts、shell.ts、userinterface.ts 等模块 import 后用作变量类型注解。

📋 模块概览 ​

项目值
源码路径agent/src/android/lib/types.ts
平台Android(仅类型,无运行时代码)
导出的 RPC无
导出的别名JavaClass、JavaMethodsOverloadsResult、以及 29 个具体 Java 类的别名(File、Runtime、Intent、KeyStore、SSLContext、CertificatePinner 等)+ FridaOverload
依赖无

🎯 解决的问题 ​

  • Java.use("java.lang.Runtime") 返回的对象结构复杂,业务代码只需把它当“Java 类句柄”用,统一别名为 JavaClass 后可读性更好。
  • 在 pinning.ts、root.ts 中声明局部变量时给出具体类型名(如 TrustManagerImpl、RootBeer),让 IDE 跳转与文档自解释更清晰。
  • 单点维护“哪些 Java 类被 agent 使用”的清单,新增模块时按需在此追加别名。

🏗️ 导出的类型 ​

基础别名 ​

别名定义位置
JavaClassanyagent/src/android/lib/types.ts:1
JavaMethodsOverloadsResultanyagent/src/android/lib/types.ts:3
FridaOverload{ implementation: (...args: any[]) => any; apply: (thisArg: any, args: any[]) => any }agent/src/android/lib/types.ts:34

FridaOverload 描述了 Java.use(...).<method>.overload(...) 返回的重载对象上可用的两个成员:implementation(赋值即替换实现)与 apply(以指定 this 调用原实现)。

具体 Java 类别名 ​

以下别名均定义为 JavaClass | any,对应各模块 Java.use(...) 的目标类:

别名对应 Java 类主要使用方
ClipboardManagerandroid.content.ClipboardManagerclipboard.ts
Filejava.io.Fileroot.ts(fileExistsCheck)、filesystem.ts
Throwablejava.lang.Throwable通用
PackageManagerandroid.content.pm.PackageManagerhooking.ts、intentUtils.ts
ArrayMapandroid.util.ArrayMap通用
ActivityThreadandroid.app.ActivityThreaduserinterface.ts、intentUtils.ts
Intentandroid.content.Intentintent.ts、intentUtils.ts
KeyStorejava.security.KeyStorekeystore.ts
KeyFactoryjava.security.KeyFactorykeystore.ts
KeyInfoandroid.security.keystore.KeyInfokeystore.ts
SecretKeyFactoryjavax.crypto.SecretKeyFactorykeystore.ts
X509TrustManagerjavax.net.ssl.X509TrustManagerpinning.ts
SSLContextjavax.net.ssl.SSLContextpinning.ts
CertificatePinnerokhttp3.CertificatePinnerpinning.ts
PinningTrustManagerappcelerator.https.PinningTrustManagerpinning.ts
SSLCertificateCheckernl.xservices.plugins.SSLCertificateCheckerpinning.ts
TrustManagerImplcom.android.org.conscrypt.TrustManagerImplpinning.ts
ArrayListjava.util.ArrayListpinning.ts
JavaStringjava.lang.Stringroot.ts(testKeysCheck)
Runtimejava.lang.Runtimeroot.ts(execSuCheck)、shell.ts
IOExceptionjava.io.IOExceptionroot.ts
InputStreamReaderjava.io.InputStreamReadershell.ts
BufferedReaderjava.io.BufferedReadershell.ts
StringBuilderjava.lang.StringBuildershell.ts
Activityandroid.app.Activityuserinterface.ts
ActivityClientRecordandroid.app.ActivityThread$ActivityClientRecorduserinterface.ts
Bitmapandroid.graphics.Bitmapuserinterface.ts
ByteArrayOutputStreamjava.io.ByteArrayOutputStreamuserinterface.ts
CompressFormatandroid.graphics.Bitmap$CompressFormatuserinterface.ts

⚙️ 实现要点 ​

  • 纯类型、零运行时:文件全是 export type,编译后不产生代码,对 agent 体积无影响。
  • JavaClass | any 的双保险:JavaClass 本就是 any,再 | any 看似冗余,但语义上表明“这是一个 Java 类句柄,可能是任何具体类”,便于阅读。
  • FridaOverload 仅标注关键成员:只列 implementation 与 apply 两个最常用成员,其余成员(overload、call 等)隐式落到 any,不阻碍使用。
  • 与 interfaces.ts 互补:interfaces.ts 描述跨 RPC 传递的数据结构(POJO 形状),types.ts 描述 Java 类句柄与 Frida 内部对象,两者共同构成 agent 的类型契约层。
  • 复用者:agent/src/rpc/android.ts:25 显式 import { JavaMethodsOverloadsResult },作为 androidHookingGetClassMethodsOverloads 的返回类型。

🔍 源码索引 ​

符号位置
JavaClassagent/src/android/lib/types.ts:1
JavaMethodsOverloadsResultagent/src/android/lib/types.ts:3
ClipboardManageragent/src/android/lib/types.ts:5
Fileagent/src/android/lib/types.ts:6
Throwableagent/src/android/lib/types.ts:7
PackageManageragent/src/android/lib/types.ts:8
ArrayMapagent/src/android/lib/types.ts:9
ActivityThreadagent/src/android/lib/types.ts:10
Intentagent/src/android/lib/types.ts:11
KeyStore / KeyFactory / KeyInfo / SecretKeyFactoryagent/src/android/lib/types.ts:12-15
X509TrustManager / SSLContext / CertificatePinner / PinningTrustManager / SSLCertificateChecker / TrustManagerImpl / ArrayListagent/src/android/lib/types.ts:16-22
JavaStringagent/src/android/lib/types.ts:23
Runtime / IOException / InputStreamReader / BufferedReader / StringBuilderagent/src/android/lib/types.ts:24-28
Activity / ActivityClientRecord / Bitmap / ByteArrayOutputStream / CompressFormatagent/src/android/lib/types.ts:29-33
FridaOverloadagent/src/android/lib/types.ts:34

🔗 相关文档 ​

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