firda获取普通方法hook

Frida获取普通方法Hook

前置

Frida Server

通过adb将FridaServer push进手机,再通过adb shell修改Fs(FridaServer)权限,运行Fs
adb 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里的内容啦