首页
社区
课程
招聘
[求助]x86架构的so注入,遇到点坑。。。
发表于: 2016-8-23 17:28 6360

[求助]x86架构的so注入,遇到点坑。。。

2016-8-23 17:28
6360
RT,网上有关于Android x86平台的so注入代码。我研究了好几天,总算把原理和实现给弄明白了。然而我编译成功以后,出现了一个蛋疼的现象:

1.如果注入我自己写的原声C程序然后交叉编译放到x86平台上的可执行程序,so注入就可以成功
2.如果注入任何一款在x86模拟机上面运行的APP,so注入就失败,程序报错。。

然后根据我深入地研究发现,事实上mmap函数在目标进程都能执行成功,问题主要出现在了dlopen函数上,注入APP的时候,dlopen的返回值(eax寄存器)一直都是0。。。

然后我修改了网上的代码,做了个判断,当返回值是0的时候打印输出为啥会出错,也就是调用dlerror函数。。。然而调用成功了返回的字符串地址,我再去读取的时候总是报错,我也不知道为啥。。

    if (ptrace_call_wrapper(target_pid, "dlopen", dlopen_addr, parameters, 2, ®s) == -1)
        goto exit;

    void * sohandle = ptrace_retval(®s);

    if (sohandle == NULL){
        if (ptrace_call_wrapper(target_pid, "dlerror", dlerror_addr, parameters, 0, ®s) == -1)
            goto exit;
        /*
        void * error_str = ptrace_retval(®s);
        char * read_error;
        ptrace_readdata(target_pid, error_str, read_error, 20);
        printf("dlerror! : %s\n", read_error);
        */
        goto exit;
    }


我自己写了一个APP,然后使用JNI调用这个指定的so(我把so放在了/system/lib/libhello.so中,一开始放到/root/libhello.so,居然会出现Native层找不到这个so),经过测试是没有问题的。。但是为何使用网上的代码在注入so的时候会出现dlopen出错呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 222
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你要注入的app有x86 so库吗? 模拟器可以模拟执行arm so ,你如果用x86注入arm so 当然是dlopen报错了。
2016-8-24 15:20
0
雪    币: 7
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很明显有x86的so啊,我自己去注入一个自己写的Native程序都可以注入成功的。

今天再确认了下,只要注入的是apk程序,一开始mmap就出问题了,并不是dlopen函数。。
2016-9-21 11:42
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2楼说的对
2016-9-21 12:17
0
雪    币: 120
活跃值: (1597)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
确定有x86的so吗
我现在也遇到这样的问题,x86的hook,可以hook住系统so,但是无法Hook  apk的so,后来查明,是因为apk的so中,没有x86的库,只有arm  的库,所以在dlopen时报错了。
2017-4-10 12:28
0
雪    币: 186
活跃值: (198)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
请问大神解决了这个问题吗?跪求解答
2020-3-19 00:10
0
游客
登录 | 注册 方可回帖
返回
//