易游网-易游模拟器

 找回密码
 立即注册
查看: 2478|回复: 0

[破解逆向] frida java 反射

[复制链接]

1406

主题

1663

帖子

1万

积分

管理员

夏墨独周

Rank: 9Rank: 9Rank: 9

积分
10094

论坛元老技术达人

QQ
发表于 2020-5-31 15:18:20 | 显示全部楼层 |阅读模式
1、hook类构造方法var targetClass = Java.use("com.eumnq.app.XXXX");
targetClass.$init.implementation = function(a,b){
  console.log("hook start...");
  send(arguments[0]);
  send(arguments[1]);
  return this.$init(a,b);
}


2、hook类的重载方法
在方法后面加一个overload属性,参数为函数的类型,类型用字符串传入,用于指定具体要hook的方法。例如XXXX.test.overload("int").implementation。
注意,要填写类的路径,例如如果是字符串类型,则要用overload("int","java.lang.String")
XXXX.test.overload('int').implementation = function(a){
  console.log('hook start...');
  send(arguments[0]);
  console.log('hook success...');
  return 'this overload func is hooked';
}



3、hook对象参数的构造
使用一个类型的$new来实例化一个类对象


4、修改对象属性值
【公有属性】
如果obj.Attr获取到的还是对象,例如a.name的返回值是 {'value': '美元', 'fieldType': 2, 'fieldReturnType': {'className': 'java.lang.String', 'name': 'Ljava/lang/String;', 'type': 'pointer', 'size': 1}} 美元
这个时候使用a.name.value就能获取对象属性的值了。
【私有属性或者保护属性】
可以用java反射的方法设置。
在Java反射中,通过Java.cast(m.getClass(),clazz).getDeclaredField('num'),m为一个实例化对象,后面getDeclaredField可以获得属性。通过Java.use('java.lang.Class');获取类的构造器
这里,通过属性的get(ObjectsInstantiated)可以获取值,通过属性的setInt(ObjectsInstantiated,value)可以设置一个对象的属性值。ObjectsInstantiated为一个对象。
这里,对于反射后的值,用console.log可以很好的输出值,而send在此处会打印对象。

Java.perform(function(){
    var testutils = Java.use('com.eumnq.app.Utils');
    var XXXX = Java.use('com.eumnq.app.XXXX');
    testutils.test.overload('com.eumnq.app.XXXX').implementation = function(a){
      console.log('hook start...');
      var m = XXXX.$new(6666,"RMB");
      var clazz = Java.use('java.lang.Class');
      var num_id = Java.cast(m.getClass(), clazz).getDeclaredField('num');
      num_id.setAccessible(true);
      var value = num_id.get(m);
      console.log(value);
      send(value);
      num_id.setInt(m,23333);
      console.log(num_id.get(m));
      return this.test(m);
    }
  }
);

5、获取frida js里一个对象类型Object.prototype.toString.call(jsobj)  //返回[object String]代表一个字符串 [object Object]代表一个对象



来源:易游模拟器(QQ:207621422),转载请注明出处!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易游网-易游模拟器 Copyright @2015-2021 ( 浙ICP备15028007号-1 )

GMT+8, 2024-5-6 14:53 , Processed in 0.038083 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表