-
-
[求助]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出错呢?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!