[frida]注入/rpc模块 背景注入:用于调试,找接口。 rpc:向程序提供接口。 注入Java.perform(function () { var EncryptNativeUtils = Java.use('com.***.***.EncryptNativeUtils'); var JString = Java.use('java.lang.String'); // 这里的[B 表示byte][] EncryptNativeUtils.encodeByHmac.overload("int", "[B").implementation = function (v1, v2) { var result = this.encodeByHmac(v1, v2); // 将byte[]转化成字符串 var sign = JString.$new(Java.array('byte', result)); return result; } EncryptNativeUtils.parseNovel.overload("[B", "java.lang.String").implementation = function (v1, v2) { var result = this.parseNovel(v1, v2); var content = JString.$new(Java.array('byte', result)); console.log(JString.$new(Java.array('byte', v1))); console.log(v2) return result; }; var aos = Java.use('e.a0.s'); aos.J.overload("java.lang.String", "java.lang.String").implementation = function (v1, v2) { var result = this.J(v1, v2); if (v1 == 'USER_TOKEN') { console.log(result); } return result; }; }); rpc写这个模块的时候还有点小插曲,我发现驼峰命名在frida中会不生效,一直提示方法不存在,后来改成全小写就正常了;下划线命名也会找不到方法。 rpc主要是向python提供接口,等注入调试完后就可以根据注入结果去写接口了,有了接口就能跑脚本。 rpc.exports = { decryptchapter(amd5, encode) { var content = ''; Java.perform(function () { var EncryptNativeUtils = Java.use('com.***.***.EncryptNativeUtils'); var JString = Java.use('java.lang.String'); var base64 = Java.use('android.util.Base64'); var a5 = base64.decode(amd5, 0); var decode = EncryptNativeUtils.parseNovel(a5, encode); // 需要注意parseNovel返回的是byte[]类型,引用传递过程中会报错,使用toString()等方法进行深拷贝传值 content = JString.$new(Java.array('byte', decode)).toString(); }); return content; } } #frida [frida]注入/rpc模块 http://blog.icy8.cn/posts/6981/ 作者 icy8 发布于 2021年9月4日 许可协议 小米9 miui12稳定版 安装并激活magick 上一篇 chrome插件开发 下一篇