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

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

2023-1-14 13:24
9740

通过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数据类型问题,


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


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

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

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

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

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

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

写出的dex为0字节

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

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

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

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