1.获取 com.example.ClassName
类,并修改其中的 getVip(i) 方法。
Java.perform(function () {
var targetClass= Java.use('com.example.ClassName')//改为需要hook的类名
//重写其中的getVip(i) 函数
targetClass.getVip.implementation = function (i) {
console.log('i: ', i);
var result = this.getVip(i);
console.log('result: ', result);
return result;
}
});
2.从内存中寻找包含 com.example.ClassName
的类,并打印出来
Java.perform(function() {
Java.enumerateLoadedClasses({
onMatch: function(className) {
if (className.includes('com.example.ClassName')) {改为需要hook的类名
console.log(className);
}
},
onComplete: function() {
console.log('Class enumeration complete');
}
});
});
3.获取某类中的所有成员变量 打印:名称+数值+类型
Java.perform(function() {
// 找到目标类
var targetClass = Java.use('com.example.ClassName');//改为需要hook的类名
// hook指定函数从而找到实例,打印实例中所有的字段
targetClass.e.implementation = function(str) {
var fields = this.class.getDeclaredFields();
for (var i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);//确保可以访问
console.log("[*] Field " + fields[i].getName() + ": " + fields[i].get(this)," Type: ",fields[i].getType().getName());
}
}
});
4.Hook 已经存在的实例,通过构造函数或内存查找找到实例,从而调用其中的函数。不通过拦截某函数的方式。
global.instances = [];// 存储实例的全局数组
Java.perform(function () {
// 获取目标类
var MyClass =