首页
社区
课程
招聘
[求助]关于Android下进程注入的ptrace_call
发表于: 2013-6-29 16:43 32253

[求助]关于Android下进程注入的ptrace_call

2013-6-29 16:43
32253
小弟近期用到了Android进程注入,用到了古河大人的libinject,在此拜谢~~~~~~~~~~

不过遇到问题,我在注入vold进程时,ptrace_call不返回,调试一下发现是waitpid一直不返回;注入不成功。但是我再次注入,注入成功(logcat可以看到注入函数的输出),但是注入目标就挂掉了,显示信息如下:
V/injectso(   31): Hook start !!
F/libc    (   31): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
I/DEBUG   (   34): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (   34): Build fingerprint: 'generic/sdk/generic:4.0.3/MR1/237985:eng/test-keys'
I/DEBUG   (   34): pid: 31, tid: 31  >>> /system/bin/vold <<<
I/DEBUG   (   34): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG   (   34):  r0 fffffff5  r1 00004000  r2 00000007  r3 00000022
I/DEBUG   (   34):  r4 00019318  r5 00000000  r6 bec3bb3c  r7 00000000
I/DEBUG   (   34):  r8 40051808  r9 00000023  10 00018088  fp 00018088
I/DEBUG   (   34):  ip 000173e8  sp bec3bafc  lr 00000000  pc 00000000  cpsr 60000010
I/DEBUG   (   34):  d0  0000000000000000  d1  0000000000000000
I/DEBUG   (   34):  d2  0000000000000000  d3  0000000000000000
I/DEBUG   (   34):  d4  0000000000000000  d5  41bf786ead000000
I/DEBUG   (   34):  d6  3f50624dd2f1a9fc  d7  414aea990035d532
I/DEBUG   (   34):  d8  0000000000000000  d9  0000000000000000
I/DEBUG   (   34):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   (   34):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   (   34):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   (   34):  scr 00000010
I/DEBUG   (   34):
I/DEBUG   (   34):          #00  pc 00000000
I/DEBUG   (   34):          #01  lr 00000000  <unknown>
I/DEBUG   (   34):
I/DEBUG   (   34): code around pc:
I/DEBUG   (   34): 00000000 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   34): 00000010 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   34): 00000020 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   34): 00000030 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (   34): 00000040 ffffffff ffffffff ffffffff ffffffff  ................

真心求教,希望各位大人指点,拜谢啊拜谢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
防秒沉 自己顶一下
2013-6-29 16:48
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
求大神们指教啊~~~~~~~~~~
2013-7-1 09:21
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
pc和lr都是0,从这块查查?
2013-7-2 23:31
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢提示 小弟只对x86的汇编了解 能看懂 arm的汇编 真心无奈 看来必须得学一下了

在此感谢回帖
2013-7-9 08:57
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
洗大师官网上 联系。。 里有个链接,LZ试试
http://code.google.com/p/libandroidinjector
2013-7-9 09:31
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
问题已经明白是怎么回事。

我使用的代码中,对目标进程的附加有2步:
1. PTRACE_ATTACH,附加到进程中;此时wait可以接收到信号,表明目标进程附加成功;此时目标进程已经停止,而且停止在系统调用的调用处(例如recv,read等)。
2. PTRACE_SYSCALL,让目标进程在下次进/出系统调用时,进行调试。

我使用的代码中,在注入某些进程时,出现阻塞现象(wait阻塞),先分析原因如下:

     在ptrace_attach中,有些情况较特殊,就是那些阻塞的系统调用,如read、recv等;在第一次PTRACE_SYSCALL后,wait会立即返回,表明目标进程已经进入系统调用(准确的说是系统调用已经开始了);此时去注入,会等到上一个系统调用返回后,才能开始注入。

解决办法:
     在PTRACE_ATTACH后,发一次PTRACE_SYSCALL后,wait(表明进入系统调用);再发一次PTRACE_SYSCALL,再wait(等待系统调用返回),这次的wait可能阻塞;等第二次wait返回后,在进行注入。

由于没有代码示例,仅用语言描述很难描述清楚,待会我会另开一贴,说一说我对‘libinject’的理解。
2013-7-10 15:06
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主好人 :)
2013-7-12 15:35
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我现在正在做android下 的进程注入,注入到其他程序中,出现了ptrace_attach: Operation not permitted,楼主知道是为什么吗?那个libinject到底怎么用root权限运行啊??谢谢
2013-8-5 12:22
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
主要要root权限
2013-10-10 14:49
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
如何防止别人ptrace自己,
是否自己先ptrace attach一次自己,别人就无法attach了?
2013-10-14 22:07
0
雪    币: 802
活跃值: (4433)
能力值: ( LV12,RANK:260 )
在线值:
发帖
回帖
粉丝
12
楼主的意思是注入前,依次调用:
ptrace(PTRACE_ATTACH, pid);//附加到进程
ptrace(PTRACE_SYSCALL,pid);//继续运行
wait(pid);//等待系统调用开始
ptrace(PTRACE_SYSCALL,pid);
wait(pid);//等待系统调用结束
。。。
开始注入
2013-11-21 10:17
0
雪    币: 802
活跃值: (4433)
能力值: ( LV12,RANK:260 )
在线值:
发帖
回帖
粉丝
13
楼主有没有遇到这种情况,有时注入后,恢复目标进程的寄存器后,
ptrace(PTRACE_CONT);
ptrace(PTRACE_DETACH);
目标进程不仅没有恢复执行,反而在注入进程退出后core dump了?
2013-11-21 10:22
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我偶尔会出现native 层的crash,是同一个原因吗,在使用ptrace注入结束,恢复被注入进程的时候
2014-4-2 12:57
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
if ( ptrace( PTRACE_ATTACH, pid, NULL, 0  ) < 0 )
293   {
294     perror( "ptrace_attach" );
295     return -1;
296   }
297
298   waitpid( pid, NULL, WUNTRACED );
299
300   //DEBUG_PRINT("attached\n");
301
302   if ( ptrace( PTRACE_SYSCALL, pid, NULL, 0  ) < 0 )
303   {
304     perror( "ptrace_syscall" );
305     return -1;
306   }
307   waitpid( pid, NULL, WUNTRACED );
308   if ( ptrace( PTRACE_SYSCALL, pid, NULL, 0  ) < 0 )
309   {
310     perror( "ptrace_syscall" );
311     return -1;
312   }
313   waitpid( pid, NULL, WUNTRACED );                                                                                                                        
314
315   return 0;
逻辑和你的类似,但是也会出现crash
2014-4-2 13:00
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
其实ATTACH后,就可以进行远程函数调用了。

你说这个现象的原因我总结是:系统调用阻塞了(比如read、recv),你看一下hotpatch等注入代码,写的比较完善的都有系统调用重启(EIP--)这样的操作;古河提供的注入代码,我觉得写的很奔放,有些细节并未涉及(可能本身就是演示性代码)。
2014-4-2 13:58
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
I/DEBUG   (  209): pid: 27398, tid: 27398, name: .mobileqq:qzone  >>> com.tencen
t.mobileqq:qzone <<<
I/DEBUG   (  209): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000
1
I/DEBUG   (  209):     r0 00000001  r1 00000220  r2 00000005  r3 0000021c
I/DEBUG   (  209):     r4 00000001  r5 79fbb21c  r6 79fbb291  r7 00000001
I/DEBUG   (  209):     r8 00000000  r9 79fbb220  sl 4300e038  fp bee43354
I/DEBUG   (  209):     ip 415b7d20  sp bee431e0  lr 4158ee61  pc 400bc804  cpsr
20070010
都是signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000001这个错误
2014-4-2 14:18
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
建议你再找找,我觉得还是你代码问题;我注system_server、com.android.phone、mediaserver等进程均无问题。
2014-4-3 09:08
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
如果注入zygote,就不行。。。一直卡在了ptrace_call 的"waitpid( pid, NULL, WUNTRACED );",但如果要做到拦截所有应用,好像必须要注入zygote...
2014-6-9 11:40
0
雪    币: 86
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
这个root权限的利用,你搞定了么,是不是最后都得把ptrace的代码编译为一个可执行的elf文件中,比如命名为main,并放到/system/bin目录下,然后通过Runntime.getRuntime().exec("su main")来运行,是这样的么?我也不清楚怎么弄。
2014-11-25 19:43
0
游客
登录 | 注册 方可回帖
返回
//