Frida Hook getAuthToken方法后无法打印mAuthToken成员问题求助
解决Frida Hook中无法正确打印类成员mAuthToken的问题
嗨,我刚好遇到过类似的问题!你看到[object Object]是因为mAuthToken不是字符串、数字这类基础类型,而是一个Java对象,直接打印会输出它的默认对象描述。下面给你几种可行的解决思路和代码示例:
1. 先搞清楚mAuthToken的真实类型
首先我们可以先打印出这个对象的类型和类名,帮你定位它到底是什么:
Java.use("你的目标类全名").getAuthToken.implementation = function() { // 打印类型和所属类 console.log("mAuthToken 类型:", typeof this.mAuthToken); console.log("mAuthToken 所属类:", this.mAuthToken.getClass().getName()); // 调用原方法 return this.getAuthToken(); };
2. 针对不同类型的处理方式
情况一:mAuthToken是Java字符串(String)
如果它是Java的String对象,直接打印会显示[object Object],你可以通过以下方式转成JS字符串:
Java.use("你的目标类全名").getAuthToken.implementation = function() { // 方式一:用字符串拼接转换 console.log("mAuthToken 值:", this.mAuthToken + ""); // 方式二:调用toString方法 console.log("mAuthToken 值:", this.mAuthToken.toString()); return this.getAuthToken(); };
情况二:mAuthToken是自定义对象
如果它是一个自定义的AuthToken类(比如包含token字段或getToken方法),你需要先把它转换成对应的类,再访问内部字段或方法:
// 先获取自定义AuthToken类的引用 const AuthTokenClass = Java.use("自定义AuthToken的类全名"); Java.use("你的目标类全名").getAuthToken.implementation = function() { // 将mAuthToken强转成自定义类 const authTokenObj = Java.cast(this.mAuthToken, AuthTokenClass); // 方式一:直接访问内部字段(比如字段名是mToken或token) console.log("真实Token值:", authTokenObj.mToken); // 方式二:调用类的getter方法(如果有的话) try { console.log("真实Token值:", authTokenObj.getToken()); } catch(e) { console.log("调用getter失败:", e); } return this.getAuthToken(); };
情况三:不知道对象结构?先看所有属性
如果不确定这个对象有哪些字段,可以用Object.getOwnPropertyNames列出所有属性,找到存储Token的字段:
Java.use("你的目标类全名").getAuthToken.implementation = function() { const props = Object.getOwnPropertyNames(this.mAuthToken); console.log("mAuthToken的所有属性:", props); // 遍历属性尝试打印值 props.forEach(prop => { console.log(`${prop}:`, this.mAuthToken[prop]); }); return this.getAuthToken(); };
小提示
如果mAuthToken是私有字段,Frida也能直接访问,不需要额外处理权限问题;如果遇到混淆后的字段名(比如a、b这类),可以结合反编译工具查看类的结构来找到对应字段。
内容的提问来源于stack exchange,提问作者Arya
相关产品推荐
相关产品推荐

