能力值:
( LV8,RANK:120 )
|
-
-
2 楼
好贴啊,支持
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
好技术!验证一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
实现了注入,楼主有没有研究过如何hook系统API啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
好贴啊,支持
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
请问楼主怎样编译?
花了2天时间找都不知道怎样编译 。。。。
|
能力值:
( LV12,RANK:200 )
|
-
-
7 楼
收藏了,支持古河
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
怎么用呢?????
|
能力值:
( LV13,RANK:330 )
|
-
-
9 楼
对比着LBE早起代码看,差不多原样抄过来的,虽说代码能编译成功并运行,同时也发现些疑问,期待各位高手解惑
疑问一: 为何要加0x3C00?否则注入进程后出行Segment fault 错误。
mmap分配到内存映射,为什么不用返回的地址直接做代码基址,而必须加上 0x3C00,尝试过改为其他值比如0x100或者0x4偶尔成功,但出错几率99%以上
// 设置远程代码存储空间地址
remote_code_ptr = map_base+[COLOR="Red"][B]0x3C00[/B][/COLOR]; // + 0x3C00
LBE无论早期版本还是最新版本,也都是固定要加上0x3C00这个偏移,不知为何?
应该与ARM指令对其无关吧?
疑问二:为何要加 0x20? 经测试这个在严谨计算偏移后,完全没必要,删除了不会影响程序功能和运行。
dlopen_param1_ptr = local_code_ptr + code_length + [COLOR="Red"][B]0x20[/B][/COLOR];
疑问三:get_module_base 有不太准确的地方,是小问题但会影响程序运行。
void* get_module_base( pid_t pid, const char* module_name )
{
// ... ...
snprintf( filename, sizeof(filename), "/proc/self/maps", [B][COLOR="Red"]pid[/COLOR][/B] ); // pid是多余的吧!
pch = [COLOR="Blue"][B]strtok( line, "-" ); [/B][/COLOR]// 此处完全没有必要调用API切分字符串,直接改为[COLOR="DarkRed"] [B]line[8]=0[/B];[/COLOR] 更合适
if ( [B][COLOR="Blue"]strstr[/COLOR][/B]( line, module_name ) ) // 这么比对模块名,在有近似名是可能会找错对象
// ... ...
}
疑问四: shellcode.s中为什么不用相对偏移,避免导出有些符号并去运行时修正这些地址,应该有优化的余地?
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
我觉得0x3c00之前是为了给后续调用预留栈空间,之后给插入代码用
楼上的ida是哪个版本,能转换ARM汇编到c code,能给个下载地址么?
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
https://bitbucket.org/mikukon/android-test/overview
里面包括了makefile及libso文件。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
确实是这样的~~
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
多谢大神们的共享啦
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
有没有不需要Root就能够注入的办法?
|
能力值:
( LV3,RANK:20 )
|
-
-
15 楼
有没有编译成功呢 要用什么编译呢
|
能力值:
( LV3,RANK:20 )
|
-
-
16 楼
utils/Log.h: No such file or directory
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
可以参考参考这个,有makefile的 https://bitbucket.org/tewilove/injectso
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
if ( ptrace_attach( target_pid ) == -1 )
return EXIT_SUCCESS;
为什么返回成功呢?
|
能力值:
( LV13,RANK:330 )
|
-
-
19 楼
通过最近再次学习ARM方面的内容,已经明白了上面几个疑问
答疑问一:加0x3C00,是因为把前3c00空间做为栈使用,其实在.s文件中保护好寄存器,自己提供栈空间是有没有必要的,由于sp始终指向栈顶,不可能会覆盖进程中正在使用的数据,至于出现栈空间不够的可能性也极小。通过栈空间直接注入代码,可避免远进程的内存申请。 regs.ARM_sp=(long)remote_code
答疑问二:为何要加 0x20?,是因为ARM数据要求4字节对齐,加20没必要,只要保证数据是对齐即可。所有的数据都有修正为4字节对齐,可以用宏实现
疑问三:get_module_base 函数完全没必要,系统调用层的地址各个进程都一样,无需重新计算偏移,可直接使用
疑问四: shellcode.s中数据部分,可移至.BSS段减少代码文件尺寸
.bss .global _inject_data_s _inject_data_s: .space 1024*4 导出的符号放在与代码发在一个段就是为了使用相对偏移,如果代码在.text,数据在.data反而需要重新修正指针,LDR也得用伪指令,将数据和代码外装在.DATA,不影响代码编译,已经是最优的选择。
注入成功的效果图
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
学习了,感谢HSQ的深入分析。
|
能力值:
( LV4,RANK:50 )
|
-
-
21 楼
先留个脚印
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
一切正常,就是没有调用so里面的函数,肿么破?
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
谁能写个详细的用法么?感激不尽
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
可能是因为你不是在Android源码环境下编译,需要手动建立LOG的宏定义,解决方法可以参考这个博客:http://qgjie456.blog.163.com/blog/static/3545136720125297123324/
|
能力值:
( LV9,RANK:140 )
|
-
-
25 楼
这个不是早就有么?
我以前有一个更好的实现版本。
|
|
|