14.安卓逆向2-frida hook技术-HookJava主动调用
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
工具下载:
链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89
提取码:zy89
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:13.安卓逆向2-frida hook技术-HookJava构造方法
调用静态方法,无参
注入之后调用指定方法
Java.perform(function () {var Utils = Java.use('com.luoge.com.Utils');var ret = Utils.getOver();console.log(ret);
})
function getJSOver() {var Utils = Java.use('com.luoge.com.Utils');var ret = Utils.getOver();console.log(ret);
}
调用静态方法,传参
Java.perform(function () {var Utils = Java.use('com.luoge.com.Utils');var ret = Utils.getOver(9998);console.log(ret);
})
function getJSOver() {var Utils = Java.use('com.luoge.com.Utils');var ret = Utils.getOver(9999);console.log(ret);
}
非静态方法(对象方法)调用,如下图,可以看到它把内存中所有 com.luoge.com.Money 的对象都找到了并且执行了getInfo方法
Java.perform(function () {var Money = Java.use('com.luoge.com.Money');/*** Java.choose是用来在内存中找一个对象的* 第一个参数是要找的对象的路径* 第二个参数是回调函数,回调函数中有三个参数,分别是obj, onMatch(找到对象后执行), onComplete(onMatch执行完后执行)* 下面代码的意思是在内存中找一个com.luoge.com.Money的对象,找到后执行onMatch方法,然后调用它的obj.getInfo()方法* */Java.choose('com.luoge.com.Money', {// obj是com.luoge.com.Money的对象,也就是this// onMatch 是找到对象后执行,也就是找到com.luoge.com.Money后执行onMatch方法onMatch: function (obj) {console.log('obj ', obj.getInfo());},onComplete:function(){// 当 onMatch 执行完后会执行 onComplete 方法console.log('执行完成');}})
})
创建类对象并修改属性调用方法
Java.perform(function () {// 获取目标类var MoneyClass = Java.use('com.luoge.com.Money');// 创建对象实例,这里假设使用无参构造函数var moneyObj = MoneyClass.$new("frdaNewName", 99999);// 获取 name 属性的引用var nameField = MoneyClass.class.getDeclaredField('name');// 如果属性是私有的,需要设置可访问nameField.setAccessible(true); // 修改 name 属性值nameField.set(moneyObj, "frdaNewName222");// 直接赋值MoneyClass.flag.value = 'frdaNewFlag';// 调用对象的方法var result = moneyObj.getInfo();// 打印结果console.log('调用 getInfo 方法的结果: ', result);
});