首页
社区
课程
招聘
[原创]解决多进程ptrace反调试保护的一种方法
发表于: 2016-7-11 18:39 21934

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

2016-7-11 18:39
21934

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


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


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


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


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

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

任何进程都会在 get_target2 处返回1
2016-7-12 10:06
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
这个函数的实现,可以按照自己的需要修改的。
2016-7-12 20:48
0
雪    币: 562
活跃值: (4347)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
楼主,真实无私奉献。
2016-7-12 22:12
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这不科学啊,我fork失败是不运行的
2016-7-13 00:25
0
雪    币: 133
活跃值: (587)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
人家的只是例子,你可以自己判断下
2016-7-14 09:48
0
雪    币: 3712
活跃值: (1401)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
大神这种思路挺好,从根本上解决问题
2016-7-14 14:37
0
雪    币: 48
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
如何判断启动的进程是反调试的进程,这是个问题
2016-7-15 09:41
0
雪    币: 6911
活跃值: (9069)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
13
我的想法是:
在fork处下断,修改子进程逻辑为死循环,然后步过fork~
因为子进程逻辑是死循环,可以用IDA去附加,然后修改回原指令。
稍麻烦,但是应该可行。
2016-8-2 01:25
0
雪    币: 398
活跃值: (286)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
14
嗯,这样还可以防止加固系统对fork失败的处理
2016-8-3 11:38
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
1
2016-8-4 20:26
0
雪    币: 1272
活跃值: (746)
能力值: ( LV13,RANK:810 )
在线值:
发帖
回帖
粉丝
16
和穿山甲一样,将部分代码故意制造异常处理由父进程接管异常。
你可以扒掉代码,可惜你处理不了异常。
而且交互方式有很多种~~这样的加固早就有了,楼主有兴趣可以试试。

楼主现在做的crack方法其实就和当年hook来对付反调试一样。只要交互复杂一点就没戏了
2016-8-26 22:01
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
从源码上解决问题,不错!
2016-8-29 16:16
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
为啥我的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) 长成这样子
2017-2-11 14:03
0
雪    币: 0
活跃值: (639)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
请问 /bionic/libc/bionic/fork.c,在哪里啊?
2017-3-6 17:06
0
游客
登录 | 注册 方可回帖
返回
//