首页
论坛
课程
招聘
[原创]解决多进程ptrace反调试保护的一种方法
2016-7-11 18:39 17695

[原创]解决多进程ptrace反调试保护的一种方法

2016-7-11 18:39
17695
前言:我们经常看到很多加固都采用多进程ptrace的方式来反调试,这里想到一个小技巧绕过这种保护,测试目标是一款娜迦加固的APK,效果如下:


原理:多进程都是通过fork出来的,因此我们修改/bionic/libc/bionic/fork.c里面的fork函数来使得目标进程fork失败,代码如下:


结果:修改fork函数后,目标APK只剩下一个进程了,使用gdb attach正常,效果如下:


结束语:有兴趣的同学可以试试其他的加固系统。

[培训] 优秀毕业生寄语:恭喜id:一颗金柚子获得阿里offer《安卓高级研修班》火热招生!!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (18)
雪    币: 481
活跃值: 活跃值 (21)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
goddkiller 活跃值 2016-7-11 19:06
2
0
你的思路很活跃啊!!!
雪    币: 1256
活跃值: 活跃值 (256)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guijingwen 活跃值 2016-7-11 19:59
3
0
系统的其他应用也不能fork成功了吧,如果一个app像360手机卫士这类的,多个进程,应该也会不能工作了吧
雪    币: 146
活跃值: 活跃值 (263)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 活跃值 1 2016-7-11 23:36
4
0
他这个get_target2函数就是作为过滤条件用的。
可以考虑结合注入+HOOK
雪    币: 146
活跃值: 活跃值 (263)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 活跃值 1 2016-7-11 23:39
5
0
get_target2过滤用的。
雪    币: 92
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Dsh骗天 活跃值 2016-7-12 10:06
6
0
get_target2 调用的 getpid() 未必是加壳的APK所在进程。

任何进程都会在 get_target2 处返回1
雪    币: 146
活跃值: 活跃值 (263)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 活跃值 1 2016-7-12 20:48
7
0
这个函数的实现,可以按照自己的需要修改的。
雪    币: 87
活跃值: 活跃值 (926)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
龙飞雪 活跃值 2016-7-12 22:12
8
0
楼主,真实无私奉献。
雪    币: 25
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jieniruyan 活跃值 2016-7-13 00:25
9
0
这不科学啊,我fork失败是不运行的
雪    币: 107
活跃值: 活跃值 (72)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
njxxdx 活跃值 2016-7-14 09:48
10
0
人家的只是例子,你可以自己判断下
雪    币: 3476
活跃值: 活跃值 (233)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
不知世事 活跃值 1 2016-7-14 14:37
11
0
大神这种思路挺好,从根本上解决问题
雪    币: 48
活跃值: 活跃值 (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
五鬼星 活跃值 2016-7-15 09:41
12
0
如何判断启动的进程是反调试的进程,这是个问题
雪    币: 2661
活跃值: 活跃值 (2683)
能力值: ( LV15,RANK:685 )
在线值:
发帖
回帖
粉丝
无名侠 活跃值 11 2016-8-2 01:25
13
0
我的想法是:
在fork处下断,修改子进程逻辑为死循环,然后步过fork~
因为子进程逻辑是死循环,可以用IDA去附加,然后修改回原指令。
稍麻烦,但是应该可行。
雪    币: 389
活跃值: 活跃值 (96)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
王正飞 活跃值 2016-8-3 11:38
14
0
嗯,这样还可以防止加固系统对fork失败的处理
雪    币: 227
活跃值: 活跃值 (75)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
大王叫我挖坟 活跃值 3 2016-8-4 20:26
15
0
1
雪    币: 1129
活跃值: 活跃值 (171)
能力值: ( LV13,RANK:810 )
在线值:
发帖
回帖
粉丝
Anskya 活跃值 20 2016-8-26 22:01
16
0
和穿山甲一样,将部分代码故意制造异常处理由父进程接管异常。
你可以扒掉代码,可惜你处理不了异常。
而且交互方式有很多种~~这样的加固早就有了,楼主有兴趣可以试试。

楼主现在做的crack方法其实就和当年hook来对付反调试一样。只要交互复杂一点就没戏了
雪    币: 64
活跃值: 活跃值 (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
AqCxBoM 活跃值 2016-8-29 16:16
17
0
从源码上解决问题,不错!
雪    币: 2
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
djcsdjcs 活跃值 2017-2-11 14:03
18
0
为啥我的fori在这个位置,kernel/fork.c  /*
*  Ok, this is the main fork-routine.
*
* It copies the process, and if successful kick-starts
* it and waits for it to finish using the VM if required.
*/
long do_fork(unsigned long clone_flags,
              unsigned long stack_start,
              struct pt_regs *regs,
              unsigned long stack_size,
              int __user *parent_tidptr,
              int __user *child_tidptr) 长成这样子
雪    币: 12
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hmlyn 活跃值 2017-3-6 17:06
19
0
请问 /bionic/libc/bionic/fork.c,在哪里啊?
游客
登录 | 注册 方可回帖
返回