梆梆脱壳分析1-所有线程抗gdb技术实现

转:http://blog.csdn.net/eewolf/article/details/44424765

对于目前Android平台上的脱壳技术,方法有很多,但对于一名coder而言,如何实现那些“奇技淫巧”,对我而言更加有趣些。

对于梆梆,之前有文章讨论可以attach到其binder线程上,通过gcore、dd来dump内存中的dex。(当然,脱壳方法有很多,不一定非要用这种方法。)

但对于其最新版本,当使用gdb attach到主进程的任一线程上时,要么permission denied,要么会退出,本文章会对其实现机理进行一下分析。

eewolf原创,转载请注明。

1.      主进程fork子进程c1,c1 fork子进程c2;

2.      c1会ptrace attach到主进程的主线程与GC线程(其也会操作memory,所以需要用ptrace方法保护),这样当试图ptrace attach时,会有permission denied;

3.      主进程为了能让c1这个子进程跟踪,需要调用prctl,option为SET_DUMPABLE。但这个API比较危险,其效果与AndroidManifest文件中debuggable选项设为true等价。如果不调用这个api,子进程是不能trace父进程的;

4.      c1也会ptrace到c2进程,来对其进行保护;

5.      这个三个进程间彼此用pipe进行通信;

6.      c1会向主进程内存空间注入大约52字节的数据,应为密钥;

7.      之后c1进入pipe读阻塞sleep;

8.      c2使用inotify监控主进程的每个clone process的mem与pagemap,于是当gdb、dd试图dump内存时,mem的access事件被触发,三个进程集体退出,导致内存dump不完整;

9.      c2并monitor主进程的task目录,来判断是否有新的clone process或现有的已消亡,来更新monitor的select loop的fd集合。


爱加密也是使用类似方法来实现其功能。

另外,梆梆还hook了write方法,来阻止在进程内部将header为dex的magic code的内容写入磁盘。


eewolf原创,转载请注明。


【原创】梆梆脱壳分析2-依然使用gcore脱壳的方法

转:http://bbs.pediy.com/showthread.php?t=198995

续前文:http://bbs.pediy.com/showthread.php?t=198778

前文中可以看出主进程的孙子进程是起到防gdb/gcore的关键,那么如何绕过它,依然使用gdb去dump出完整dex呢?
开始时,我是重新编译了一个rom,屏蔽与重定向了相关API,可以dump出来,显然这个方法相对烦躁一点,下面介绍一种在目前梆梆的版本上,更为简单粗暴的方法。

1. 首先通过ps找出孙子进程的pid,记为pid3;
2. 查看/proc/<pid3>/task找出孙子进程所有的thread,通常是3个,并记录下他们的tid;
3. 使用kill -20 <tid> 将其子线程挂起;
4. gdb 主进程,顺利gcore 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值