DreamMark 发表于 2024-1-24 15:34

求解 frida 在主动调用so中,怎么写 Object 数组



要调用得方法    private static native Object[] main(int i, Object[] objArr);

求教我拿到so 中方法地址后, frida 怎么主动调用这个so方法?var funcAddr = baseAddr.add(0x185cc); // 32位需要加1
console.log("funcAddr:", funcAddr);
var func = new NativeFunction(funcAddr, "pointer", ['int','uchar']);这里怎么写
var env = Java.vm.tryGetEnv();
console.log("func: ", func)
console.log("env: ", JSON.stringify(env));
var p_1 = "asdkj12lk31";
var p_2 = 'asdjlajdlajksj';
var p_3 = "sajfljkflka231";
var s1 = str.$new(p_1);
var s2 = str.$new(p_2);
var s3 = str.$new(p_3);
var cls_2 = Java.cast(s2.getBytes(),objClass);
var cls_3 = Java.cast(s3.getBytes(),objClass);
var byteArray = Java.array("Ljava.lang.Object;",);
console.log(byteArray)
var cstr = func(2, byteArray);调用怎么写
console.log("cstr:", cstr)

debug_cat 发表于 2024-1-24 15:34

1、so中的函数参数是?private static native Object[] main(int i, Object[] objArr);这个看起来是定义在Java文件中的native函数声明,你确定是需要调用这个函数?
```

var module = Process.getModuleByName('haha.so');

// so中的函数的地址,我这里是按64位直接写了
var funcPtr = module.base.add(0x185cc);
console.log("Function address: " + funcPtr);

var func = new NativeFunction(funcPtr, 'pointer', ['int', 'pointer'], {
    exceptions: 'propagate'
});

// 字符串数组
var stringArray = ['asdkj12lk31', 'asdjlajdlajksj', 'sajfljkflka231'];
var arrayPtr = Memory.alloc(Process.pointerSize * stringArray.length);
for (var i = 0; i < stringArray.length; i++) {
    var strPtr = Memory.allocUtf8String(stringArray);
    Memory.writePointer(arrayPtr.add(Process.pointerSize * i), strPtr);
}

// 创建参数int 和那个array
var arg1 = 123;
var arg2 = arrayPtr;

var result = func(arg1, arg2);

console.log("Function result: " + result);

```

DreamMark 发表于 2024-1-25 14:43

debug_cat 发表于 2024-1-24 17:34
1、so中的函数参数是?private static native Object[] main(int i, Object[] objArr);这个看起来是定义在J ...

抱歉 描述有点错误, 是java 的 native 函数

DreamMark 发表于 2024-1-25 15:22

debug_cat 发表于 2024-1-24 17:34
1、so中的函数参数是?private static native Object[] main(int i, Object[] objArr);这个看起来是定义在J ...

这个arg2 是Object 类型的数据, 里面有String, 字节两种值, 可以都算作String 吗

debug_cat 发表于 2024-1-26 09:36

DreamMark 发表于 2024-1-25 15:22
这个arg2 是Object 类型的数据, 里面有String, 字节两种值, 可以都算作String 吗

既然是Obj,那么在Java端传递任何类型数据都可以,传递是传递,至于里面怎么用,是他解析的时候的情况了。如果你的第二个参数是个数组,有多个类型数据,只需要往数组丢进去就行了。只要你的参数是对的,对面解释出来没问题就行。
页: [1]
查看完整版本: 求解 frida 在主动调用so中,怎么写 Object 数组