Frida Hook方法大全(普通、重载、构造、hook某类下的所有方法、主动调用)

一、普通方法

var act = Java.use("com.xxx.cxnppwx.MyJni"); 
console.log(act.func);  // func表示方法
act.func.implementation = function (a,b) {
	console.log(a);
	console.log(b);
	var result = this.func(a,b);
	console.log(result);
	return result;
}

二、重载方法

var act = Java.use("com.xxx.cxnppwx.MyJni"); // $:表示类中类
console.log(act.func);  // func表示方法
act.func.overload('java.lang.String').implementation = function (a) {
	console.log(a);
	var result = this.func.overload('java.lang.String').call(this,a)
	console.log(result);
	return result;
}

其他类型

.overload()
.overload('int')
.overload('java.lang.Exception')
.overload('android.content.Context')
.overload('java.lang.String')
.overload('android.content.Context', 'java.lang.String')
.overload('java.io.BufferedInputStream', 'java.io.BufferedInputStream', 'int')
.overload('android.content.Context', 'java.lang.String', 'java.lang.String', 'java.lang.String')

三、构造方法

var act = Java.use('com.xxx.fridatest.Money');
act.$init.implementation = function(a, b) {
	console.log(a);
	console.log(b);
	a = 100;
	b = "Frida";
	return this.$init(a, b);
}

四、hook某类下的所有方法

function logInf(classs){
    Java.perform(function (){
        var Modifier = Java.use("java.lang.reflect.Modifier");
        var Field = Java.use("java.lang.reflect.Field");
        var modifiers = classs.getModifiers();
        classs.setAccessible(true);
        if (Modifier.isStatic(modifiers)) {
            // 静态字段
            var value = classs.get(null);
            console.log(classs + " =>"  + value)
        } else {
             console.log(classs)
        }
    })
 
 
}
function getAllsonClass(classs){
    console.log('\n')
    console.log("查询到子类  =>" + classs.getName())
    hookClass(String(classs.getName()))
}
var thisclass = null;
//"java.security.MessageDigest"
function hookClass(CLASS){
Java.perform(function(){
    var classStudent = Java.use(CLASS);
    var classs = classStudent.class;
 
    //获取所有内部类
    var innerClasses = classs.getDeclaredClasses();
    if(innerClasses.length > 0){
        innerClasses.forEach(getAllsonClass);
    }
    console.log("===========" + classs + "中的所有变量==============")
    //输出所有变量
    classs.getDeclaredFields().forEach(logInf)
    console.log("===========" + classs +  "的所有方法==============")
    //输出所有方法,并hook
    classs.getDeclaredMethods().forEach(function(method){
        console.log(method)
       var methodsName = method.getName();
       var overloads  = classStudent[methodsName].overloads;
    //    console.log(overloads.length)
       for (var i=0; i< overloads.length; i++){
            overloads[i].implementation = function () {
            console.log('\n')
            console.warn("进入" + classs.getName() + "类的" + methodsName + "方法")
            for(var j=0; j<arguments.length; j++){
                console.error("参数" + j + " => " + arguments[j])
            }
            if (arguments.length === 0) {
              console.log("该函数无参数");
            }
            var result = this[methodsName].apply(this,arguments)
            console.error("结果是 => " + result)
            return result;
            };
        }
    })
    console.log('\n')
})
}
function main(){
    try {
        hookClass("com.xxx.MainActivity")
    }catch (e) {
        console.log("没有找到该类")
    }
}
 
setImmediate(main)

五、主动调用

function main(){
    Java.perform(function () {
    Java.choose("com.wuba.xxzl.fingerprint.FingerPrintSDK", {
        onMatch : function(instance) {
          console.log("bool_var:", instance.getXxid("22555"));
        }, onComplete : function() {


        }});
    });
}


setTimeout(main,1000);

六、打印私有属性

javFunc.implementation = function(){
	var n = this.getClass().getDeclaredField('n');
	n.setAccessible(true);
	var nValue = n.get(this);
	console.log('n  = ' + nValue);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云霄IT

感谢感谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值