Hook普通方法(包括静态方法)

想学习安卓逆向可以联系1847076032
#HOOK重载方法

jscode =""" Java.perform(function () {
var utils = Java.use(‘com.qianyu.fridaapp.Utils’);
utils.test.overload(“int”).implementation = function (a) {
console.log(“Hook Start…”);
send(arguments[0]);
send(“Success!”);
return “qianyu”;
} });
“”"

第一个修改的点:
格式,程序的包名+方法所在类

程序包名:
在这里插入图片描述
类名:
在这里插入图片描述
修改效果;

在这里插入图片描述

HOOK普通方法实例:注册机为例;
首先:把这里附加的程序包名一定记得改了:这个包名就是你要HOOK的程序的包名;
在这里插入图片描述

第一个点:包名+类名

在这里插入图片描述
第二个点:要HOOK的方法名+该方法的参数:
在这里插入图片描述
保存代码;
要HOOK的程序在运行状态,然后点击运行Spyder,此观察状态:
在这里插入图片描述
点击手机程序注册按钮,效果:
在这里插入图片描述

补充:这个类似java里面使用类实例的对象一样,然后就可以用这个变量去使用里面的方法;

在这里插入图片描述
#HOOK构造方法
#HOOK构造方法

jscode = “”" Java.perform(function () {
var money = Java.use(‘com.qianyu.zhuceji.MainActivity’);
money.KaTeX parse error: Expected '}', got 'EOF' at end of input: … return this.init(10000, “美元”);
}
});

以Frida为例子;
来到类下面看java源码:
只有Money这个方法有构造方法
在这里插入图片描述
点进去;
在这里插入图片描述
这边的HOOK构造方法还可以换一种方法:
直接来这个类,HOOK这个构造方法;

jscode = “”" Java.perform(function () {
var money = Java.use(‘com.qianyu.fridaapp.Money’);
money.Money.implementation = function (a, b) {
console.log(“Hook Start…”);
send(arguments[0]);
send(arguments[1]);
send(“Success!”);
return this.$init(100, “美元”);
}
});

同样可以达到效果;

#HOOK构造对象参数

#HOOK构造对象参数 先解释一下里面的语句 “”" jscode = “”" Java.perform(function () {
var utils = Java.use(‘com.qianyu.fridaapp.Utils’); //获取类Utils,定义变量utils;
var money = Java.use(‘com.qianyu.fridaapp.Money’); //获取Money类,定义变量money;
utils.test.overload().implementation = function () { //使用变量utils获取Utils类的方法test,因为这个方法重载了,所以加overload
//send(“Hook Start…”);
var mon = money.$new(1995,‘张栋’); //然后使用mon这个变量去HOOK money,里面可以传入我们想要传进去的值;
send(mon.getInfo()); //这句什么意思?
return this.test(800); //如果这里是this.test();,返回结果是什么?
} });DD
“”"

验证:
在这里插入图片描述
如果这里是this.test();,返回结果是什么?
返回的还是:
在这里插入图片描述
#HOOK重载方法

“”" jscode = Java.perform(function () {
var utils = Java.use(‘com.qianyu.fridaapp.Utils’);
utils.test.overload(“int”).implementation = function (a) { //重载方法这里要使用overload;
console.log(“Hook Start…”);
send(arguments[0]);
send(“Success!”);
return “qianyu”;
}
});

#HOOK修改对象属性

“”" jscode = Java.perform(function () { var utils = Java.use(‘com.qianyu.fridaapp.Utils’); var money = Java.use(‘com.qianyu.fridaapp.Money’); var clazz = Java.use(‘java.lang.Class’); utils.test.overload().implementation = function () { send(“Hook Start…”); var mon = money.$new(200,‘港币’); send(mon.getInfo()); var numid= Java.cast(mon.getClass(),clazz).getDeclaredField(‘num’); numid.setAccessible(true); //send(numid.get(mon)); numid.setInt(mon, 1000); send(mon.getInfo()); return this.test(800); } }); “”"