frida [java.lang.Object 构造
背景
在学习frida的过程中,遇到一个比较有趣的函数,需要对其进行hook,函数如下:
public static void foo(Object[] data){
......
}
其中data 可以传多个不同类型的数据,比如true,1233,string等,我需要对其进行调用
调用
由于参数是一个array,使用frida的Java.array(data,class)进行调用,但是当我传递
var array = Java.array('java.lang.Object',[aClass.$new(),true,123])的时候,frida 就报错了
Error: invalid argument value
at frida/node_modules/frida-java-bridge/lib/env.js:166
at frida/node_modules/frida-java-bridge/lib/class-factory.js:106
at /test.js:36
at ye (frida/node_modules/frida-java-bridge/lib/class-factory.js:574)
at frida/node_modules/frida-java-bridge/lib/class-factory.js:557
搜了一堆资料之后,偶然发现了Integer这个类,突然想到在java中,基本类型是不继承Object类的,所以123,true
这些值是不能存在于数组中的。知道了问题的根源后,其实解决方案也很好做,只要使用继承自Object的类就行了
于是就有了如下的代码
var array = Java.array('java.lang.Object',[aClass.$new(),aClass.$new()])
array[1]= Java.cast(Boolean.$new(true), Objectx);
this.Check(array);
总结
frida 的大部分hook代码都用js编写,除了要了解js的语法之外,frida自带的api功能也很强大,但是自己对这块用的太少了,看到大佬们的代码,发现真的好多都没看懂
原文始发于微信公众号(SecurityWay):Frida Travel 1
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论