如何使用Frida在运行时从方法中提取Token变量值?
Frida Hook 提取 Token 方案
首先你需要明确几个关键信息(如果代码里的com.xx.xx不是目标X类,替换成实际的X类全路径):
- 目标final方法的具体名称(比如假设叫
fetchAuthResult) - 该方法返回的
result对象可调用getToken()方法获取token
以下是两种适配场景的补全代码:
场景1:直接Hook目标X类的final方法(推荐)
如果目标final方法是X类的成员方法,直接Hook该方法,在方法执行后提取token:
Java.perform(function () { // 替换成实际的X类全路径,比如com.example.app.XClass const TargetClass = Java.use("com.xx.xx"); // 替换成目标final方法的真实名称 TargetClass.目标方法名.implementation = function() { // 调用原方法获取result对象 const result = this.目标方法名.apply(this, arguments); // 调用result的getToken()提取token const token = result.getToken(); // 打印提取到的token console.log("提取到的Token:", token); // 返回原方法结果,不影响应用正常逻辑 return result; }; console.log("Hook 已加载,等待目标方法执行..."); });
场景2:基于Java.choose枚举实例后Hook(适配你提供的代码框架)
如果需要枚举内存中X类的实例,再Hook实例的目标方法:
Java.perform(function () { Java.choose("com.xx.xx", { onMatch: function (inst) { // 替换成目标final方法的真实名称 const methodName = "目标方法名"; // Hook该实例的目标方法 inst[methodName].implementation = function() { const result = this[methodName].apply(this, arguments); const token = result.getToken(); console.log("提取到的Token:", token); return result; }; // 可选:找到实例后停止枚举,避免重复Hook return "stop"; }, onComplete: function () { console.log("实例枚举完成"); } }); console.log("Done"); });
注意事项
- 替换代码中的
com.xx.xx为实际的X类全限定名(比如com.example.app.XClass) - 替换
目标方法名为该final方法的真实名称(比如getAuthResult) - 如果目标方法有参数,Hook时需要匹配参数类型,例如方法是
getAuthResult(String, int),则代码需调整为:TargetClass.getAuthResult.implementation = function(username, age) { const result = this.getAuthResult(username, age); // ...后续提取token逻辑 }; - 执行你提供的命令即可:
frida -U -f "xxx.apk" -l test.js;若应用已启动,可移除-f参数并指定应用包名(比如frida -U com.example.app -l test.js)
内容的提问来源于stack exchange,提问作者nora
相关产品推荐
相关产品推荐

