frida学习笔记

潘飞英
2023-12-01

准备工作 

#以python3.7为列,frida版本12.8.0(据说是最稳定的版本)
#创建虚拟环境
conda create --name frida-object python=3.7.0
#查询conda的环境列表
conda env list
#进入虚拟环境
conda activate frida-object
#安装fida
pip install frida==12.8.0
#安装frida-tools
pip install frida-tools==5.3.0
#注意安装顺序,一定要安装frida,因为frida-tool包括frida,如果先安装frida-tools那么frida的版本会不正确。
#安装objection
pip install objection==1.8.4

服务器配置: 

#查询手机CUP类型
adb shell
getprop ro.product.cpu.abi
#arm64-v8a
#下载arm
https://github.com/frida/frida/releases/download/12.8.0/frida-server-12.8.0-android-arm64.xz
#移到指定目录
mv /sdcard/frida-server-12.8.0-android-arm64 /data/local/tmp/frida  
#授权
chmod 777 frida  
#启动
./frida

定位关键代码 

#注入应用
objection -g com.sichuanol.cbgc explore
#hook java的string
android hooking watch class_method java.lang.String.getBytes --dump-args --dump-backtrace --dump-return  

frida注入

function sign(){
    Java.perform(function (){
    var sign = Java.use("com.sichuanol.cbgc.util.SignManager")
    sign.getSign.implementation=function(a,b,c){
        console.log("参数1:"+a);
        console.log("参数2:"+b);
        console.log("参数3:"+c);
        var result = this.getSign(a,b,c);
        console.log("返回值:"+result);
        return result;
    }
})
}

setImmediate(sign)

//主动调用
function call(){
    Java.perform(function (){
    var sign = Java.use("com.sichuanol.cbgc.util.SignManager")
    var result = sign.getSign("","","1646138183436")
    console.log(result)
})
}
#frida -UF -l hook.js
#注入到当前的进程
-F、 --attach-frontmost. 附加到最前面的应用程序
-U, --usb               connect to USB device

//hook so
var soAddress = Module.findBaseAddress("libwtf.so")
var funcAddress = soAddress.add(0xC90 +1);
//ida打开so文件,F5查防伪C代码,按tab键进入,再按下空格,左边就能看到地址了.text:00000C90
Interceptor.attach(funcAddress,{
    onEnter:function(args){
        console.log("args1:"+hexdump(args[0]))
        console.log("arg2:"+args[1].toInt32())
    },
    onLeave:function (retval) {

    }
})

var funcAddress = soAddress.add(0x8BC +1);
Interceptor.attach(funcAddress,{
    onEnter:function(args){
        this.arg = args[1]
        this.arg1 = args[0]
    },
    onLeave:function (retval) {
        console.log("args1:"+hexdump(this.arg))
        console.log("args2:"+hexdump(this.arg1))
    }
})
#frida 特俗写法
#构建StringBuilder对象
Java.use("java.lang.StringBuilder").$new("111")
#java强转
Java.cast(str,Java.use("java.lang.Object"));
#查看数据类型
str.$className

 类似资料: