frida
静态方法和实例方法的hook
- 不需要区分修饰符,也不需要区分静态和实例方法,hook代码的写法都是一样的
得到Money类对象
var money = Java.use("com.xiaojianbang.hook.Money"); |
hook实例方法
money.getInfo.implementation = function(){ |
hook静态方法
money.setFlag.implementation = function(a){ |
函数参数和返回值的修改
var money = Java.use("com.xiaojianbang.hook.money"); |
构造方法的hook
var money = Java.use("com.xiaojianbang.hook.Money"); |
对象参数的构造与修改 $new
var wallet = Java.use("com.xiaojianbang.hook.Wallet"); |
HashMap的打印
var utils = Java.use("com.xiaojianbang.hook.Utils"); |
重载方法的hook
var utils = Java.use("com.xiaojianbang.hook.Utils"); |
hook方法的所有重载
var utils = Java.use("com.xiaojianbang.hook.Utils"); |
主动调用
静态方法
var money = Java.use("com.xiaojianbang.hook.Money"); money.setFlag("xiaojianbang");
- 实例方法 创建新对象
- ```javascript
var moneyObj = money.$new("卢布",1000);
console.log(moneyObj.getInfo());实例方法 获取已有对象(Java.choose)
Java.choose("com.xiaojianbang.hook.Money",{ onMatch:function(obj){ console.log(obj.getInfo()); }, onComplete:function(){ console.log("内存中的Money对象搜索完毕"); } });
### 获取和修改类的字段
- 静态字段
```javascript
var money = Java.use("com.xiaojianbang.hook.Money");
console.log(money.flag.value);
money.flag.value = "VX:xiaojianbang8888";
console.log(moeny.flag.value);实例字段 创建新对象
var moneyObj = money.$new("欧元",2000); console.log(moneyObj.currency.value); moneyObj.currency.value = "xiaojianbang currency"; console.log(moneyObj.currency.value)
- 实例字段 获取已有对象
- ```javascript
Java.choose("com.xiaojianbang.hook.Money",{
onMatch:function(obj){
console.log("Java.choose Money:",obj.currency.value);
}, onCompelte:function(){
}
});
//如果字段名和方法名一样 需要加下划线前缀
Java.choose("com.xiaojianbang.hook.BankCard",{
onMatch:function(obj){
console.log("Java.choose BankCard:",obj._accountName.value);
},onComplete:function(){
}
});
hook内部类与匿名类
Java.choose("com.xiaojianbang.hook.Wallet$InnerStructure",{ |
jadx动态调试
cat default.prop |
混淆函数的Hook方法
Java.perform(function(){ |
将类名进行base64加密
原因:防止乱码和空格
枚举所有已加载的类
- 枚举的是已经加载的类
- 出现的类,也不一定能hook到,原因是类加载器的关系
console.log(Java.enumerateLoadedClassesSync().join("\n")); |
枚举类的所有方法
var wallet = Java.use("com.xiaojianbang.gook.Wallet"); |
hook类的所有方法
function hookFunc(methodName){ |
Frida注入dex
Java.openClassFile("/data/local/tmp/Testclasses.dex").load(); |
Frida写文件
var ios = new File("/data/data/com.xiaojianbang.app/xiaojianbang.txt","w"); |
Java.cast
- 向上转型的,不能用toString直接得到i结果,比如Map、List类型的打印
var utils = Java.use("com.xiaojianbang.hook.Utils"); |
数组的构造
Java.perform(function(){ |
hook动态加载的dex
Java.enumerrateClassLoaders({ |
包装
var Bool = Java.use("java.lang.Integer"); |
hook定位接口的实现类
Java.perform(function(){ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo!