firda获取普通方法hook
Frida获取普通方法Hook
前置
Frida Server
通过adb将FridaServer push进手机,再通过adb shell修改Fs(FridaServer)权限,运行Fsadb push ***\fsarm /data/local/tmp
,别问为什么放data/local/tmp目录,问就是习惯adb shell
su
如果你进入就是root权限自然可以省略cd data/local/tmp
chmod 777 fsarm
./fsarm
如果你使用的是真机且系统版本高于安卓7应该是不会报错的,但如果是模拟器会因为安卓版本过低报一句警告,无关痛痒
端口转发,进入虚拟环境
adb forward tcp:27042 tcp:27042
workon ***
***代指你创建的虚拟环境,如果你部署在实体环境里的就可以省略这一步
编写JS代码
逆向安卓app
首先你需要的是通过JEB或者Jadx或者Ak等一系列你用的习惯的逆向工具,找到你要hook的函数所在的类名与该app的包名,例如我需要找一个在text()类的plus(int a, int b)函数,且该app名为"com.Text.app"为例
编写JS代码
用你用的习惯的一切IDE乃至编辑器,编写如下一段代码,我在这里假设这段代码命名为Hook.js,且保存在D盘的hook目录下,详细解释我会放在代码里
function hookText(){ var text = Java.use("com.Text.app.text"); //这里就是你要Hook到的包名和类名 text.plus.implementation = function(a,b){ //注意这里的text.plus就是函数名,因为是普通方法所以就输入需要多少个参数,即a,b两个参数 var retext = this.plus(a,b); //JS会通过var自动检测类型,this.plus即调用原函数,当然这里你也可以不用调用原函数,自己新写一个函数也可以的 console.log(a,b,retext); //打印log内容,会反应到控制台中 return retext; //函数返回值 } } function main(){ //主函数 Java.perform(function(){ //不要问没解释的东西是什么,我也不知道,就是Frida的独有语法格式 hookText(); //调用上面写的方法 }); } setImmediate(main); //这里才是函数的开始
注入
在上面的内容都完成以后,在手机端启动com.Text.app,在你装好了frida的环境下,输入cd /d D:\hook
frida -U com.Text.app -l Hook.js
稍等一会注入就会完成,然后应该会显示[手机型号::com.Text.app]->
这样子,然后在手机端点击会触发plus()函数的交互界面,然后在->后面就会出现log里的内容啦