首页
社区
课程
招聘
[求助]Frida使用Java反射获取数据类型异常,文件写出为0
发表于: 2023-1-14 13:24 10458

[求助]Frida使用Java反射获取数据类型异常,文件写出为0

2023-1-14 13:24
10458

通过Java反射获取的数据类型异常,无法被识别为数组length获取不了长度,[0]取不了元素。


调用Java类Arry.get可以取出数组长度跟元素,但是写出的文件大小为0,


如果通过Java.use获取到类去调用Java方法,可以正常写出文件大小length取长度[0]取元素都可以使用。


var method = dex.getClass().getDeclaredMethod("getBytes", null);

method.setAccessible(true);

var dexBytes =method.invoke(dex, []);


var path = mFile.$new("/sdcard/gg.dex");

var rand = RandomAccessFile.$new(path, "rw");


var mBytes=Java.use("[B");

rand.write(Java.cast(dexBtes,mBytes));

rand.close();


dexBytes无法用js函数取长度,类型强转也无效。


所有代码已经上传附件,欢迎测试!把xp模块转换成js代码,


不想用Java.use方式获取函数跟变量.


因为不止这一个模块转换成脚本还有java数据类型问题,


有能写出文件的麻烦说下怎么处理谢谢!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2023-1-17 15:03 被冷冻猫咪编辑 ,原因:
上传的附件:
收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
尴尬浏览两百多次没一个说话的!
2023-1-14 19:33
0
雪    币: 1277
活跃值: (1959)
能力值: ( LV4,RANK:49 )
在线值:
发帖
回帖
粉丝
3
java.lang.reflect.Array.getLength
2023-1-14 20:44
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
哎呀!之前搜索Api没看到这个。。。大意了!!!
2023-1-14 20:53
0
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
安装Frida-server到目标设备上
在开发机上使用frida-ps -U查找要Hook的进程
使用frida -U <pid> -l script.js attach连接到目标进程
在脚本中使用Interceptor.attach()来挂载Hook函数
使用Interceptor.replace()来替换目标函数
2023-1-15 00:25
0
雪    币: 29
活跃值: (5647)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Application.attach通常会被内联,不进行处理的话会导致hook无效
2023-1-15 02:00
0
雪    币: 2328
活跃值: (10364)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
因为文字都懂,就是不知道在描述什么
2023-1-16 09:33
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
你瞒我瞒 因为文字都懂,就是不知道在描述什么

无法获取java反射返回的数组长度跟元素

最后于 2023-1-16 11:46 被冷冻猫咪编辑 ,原因:
2023-1-16 11:45
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9

上面是txt输出的文本,下面是代码写出byte[]为空。

2023-1-16 14:37
0
雪    币: 507
活跃值: (1742)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这路径不存在吧... /sdcardHook
2023-1-16 14:45
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
seeeseee 这路径不存在吧... /sdcardHook
路径是截图的时候删代码误删了/
2023-1-16 15:24
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
seeeseee 这路径不存在吧... /sdcardHook

写出的dex为0字节

2023-1-16 15:26
0
雪    币: 507
活跃值: (1742)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
因为你的arr是空的,你需要给定一个有长度的数组,比如这样

Java.array('byte', new Uint8Array(1024));
2023-1-16 16:41
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
seeeseee 因为你的arr是空的,你需要给定一个有长度的数组,比如这样 Java.array('byte', new Uint8Array(1024));
for是后来加的把java反射取出来的byte数组存到js数组里,因为js里取不了java反射取的数组长度跟元素。
2023-1-16 17:31
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
seeeseee 因为你的arr是空的,你需要给定一个有长度的数组,比如这样 Java.array('byte', new Uint8Array(1024));
测试了下加new Uint8Array(1024)创建数组,代码异常不执行app崩溃
2023-1-16 17:38
0
雪    币: 1277
活跃值: (1959)
能力值: ( LV4,RANK:49 )
在线值:
发帖
回帖
粉丝
16
把dexBytes直接给rand.write
2023-1-17 10:39
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
userapp 把dexBytes直接给rand.write

一样写出0,for转换byte数组是后面写的转换类型。

2023-1-17 11:59
0
雪    币: 1277
活跃值: (1959)
能力值: ( LV4,RANK:49 )
在线值:
发帖
回帖
粉丝
18
冷冻猫咪 一样写出0,for转换byte数组是后面写的转换类型。
既然在for中能遍历到值,试试用rand.write(arr[n])
2023-1-18 16:25
0
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
userapp 既然在for中能遍历到值,试试用rand.write(arr[n])
写出不了,arr也不能用js里的length取长度奇怪。用java反射类可以取出来。
2023-1-18 17:02
0
游客
登录 | 注册 方可回帖
返回
//