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);
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用Frida进行hook构造方法,首先需要在电脑上安装Frida。可以使用以下命令来安装Frida的CLI工具、Python绑定和Node.js绑定:pip install frida-tools、pip install frida和npm install frida。 安装完成后,可以使用以下命令来启动Frida并进行hook操作:frida -U -l /path/to/script.js package.name。其中,/path/to/script.js是包含hook逻辑的JavaScript脚本的路径,而package.name是要进行hook的应用程序的包名。 在你的脚本中,你可以使用Frida的API来hook构造方法。可以参考Frida的官方文档或其他资源来了解如何使用Frida的API进行hook操作。 总结起来,要使用Frida进行hook构造方法,你需要在电脑上安装Frida并编写包含hook逻辑的JavaScript脚本,然后使用Frida启动服务并指定要进行hook的应用程序包名。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Frida_Windows_Hook](https://download.csdn.net/download/weixin_42116921/16660845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [如何使用Frida在Android上进行hook](https://blog.csdn.net/chzphoenix/article/details/121291351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云霄IT

感谢感谢!

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

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

打赏作者

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

抵扣说明:

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

余额充值