吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 597|回复: 4
收起左侧

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

[复制链接]
DreamMark 发表于 2024-1-24 15:34
25吾爱币


要调用得方法    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;",[s1,cls_2,cls_3]);
console.log(byteArray)
var cstr = func(2, byteArray);  调用怎么写
console.log("cstr:", cstr)

最佳答案

查看完整内容

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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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[i]);
    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端传递任何类型数据都可以,传递是传递,至于里面怎么用,是他解析的时候的情况了。如果你的第二个参数是个数组,有多个类型数据,只需要往数组丢进去就行了。只要你的参数是对的,对面解释出来没问题就行。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 00:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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