首页
社区
课程
招聘
[原创]android 脱壳通用技术 及 子进程调试技术解决方案
2017-4-20 16:43 8896

[原创]android 脱壳通用技术 及 子进程调试技术解决方案

2017-4-20 16:43
8896

好久不发帖了,今天来点干货

1、配置调试环境

首先,配置好调试环境。
Androidserver 的调试方法是 android_server -pxxxx 自定义port
Jdb的调试方法是 jdb -connect com.sun.jdi.SokcetAttach:hostname=xxxx,port=xxxx
2、断点
需要断在link中,主要是soinit函数。则找到BLX R4,十六进制代码是A0 47注意是thumb指令。由于高版本的安卓系统实行了ALSR技术,所以每次BLX R4指令加载的位置都不一样,但是可以进行搜索。
打开module,在libc.so中,断在fork上,监视子进程的建立。断在pthread_create上,监视子线程的建立。新的进程或者线程,都很有可能有anti代码的出现。
3、子进程调试技术
   思路,是修改plt表,got表,使用libc.sosleep函数,使子进程一建立就sleep。不能使用一个死循环,使用死循环后,由于时间片被占用完了,导致IDA attach不到子进程上面。然后就可以再用一个IDAattach上子进程,进行双IDA调试。这个需要再在android终端启动一个android_server,同时指定不同的端口。大概就是./android_server -p34568

   子进程从sleep中恢复出来后,只需要把堆栈修和寄存器修复好,就可以了。注意要恢复堆栈,否则会运行失败。这个时候,父进程的堆栈和子进程的堆栈和寄存器应该是一样的,或者大部分是一样的。

     在调试的过程中,可以把某些不重要的线程给挂起来。往往还是很有用的。

     顺便说一句,在linux其他的版本中,是可以通过设置内核的一些参数,来进行子进程调试的。

4、anti-debug技术

动态跟踪,慢慢的找吧。

查找/proc/xxx/android_server,gdbserver,trace

tracepid

notify fd了等等

还有一些利用IDA对thumb指令,arm指令翻译不好的问题等。

5、下面的指令是IDA插入的端点
thumb breakpoint
  0xDE10
  thumb2 breakpoint
  0xA000F7F0
  arm breakpoint
  0xEF9F0001
查了一下rtld_db_dlactivity函数,这个函数实则默认情况下为空函数,这里的值应该为0,而当有调试器时,这里会被改为断点指令,0xDE10实则为thumb指令的断点。函数的功能是用于处理一些调试器的特殊情况的。比如调试器对模块的某个地址进行下断,但这个地址实际不存在,得在模块加载后才存在等的特殊情况下的函数。起的作用就是类似于协商解决特殊问题。具体的各位可以自己去查询相关资料。



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (10)
雪    币: 2259
活跃值: (3355)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
奔跑的阿狸 1 2017-4-20 18:28
2
0
前排
雪    币: 6039
活跃值: (3257)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MaYil 2017-4-20 20:46
3
0
感谢分享,  新姿势get
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
百度Hello 2017-4-24 09:19
4
0
谢谢楼主,现在正好遇到子进程调试的问题,楼主能详细说下么?或者哪边有文章可以直接参考下?
雪    币: 4440
活跃值: (3476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
木志本柯 2017-4-24 10:29
5
0
好帖……
雪    币: 4440
活跃值: (3476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
木志本柯 2017-4-24 10:29
6
0
好帖……
雪    币: 234
活跃值: (666)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
追风燕子 1 2017-5-31 00:55
7
0
大牛、膜拜
雪    币: 69
活跃值: (335)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
pedies 2017-8-9 17:43
8
1
楼主可以拿一个案例,  来讲解android  子进程的调试不。
雪    币: 9
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
HeroRacing 2017-11-22 15:48
9
0
在blx  r4上下了断点,然后好像触发了反调试,直接退出怎么破?
雪    币: 416
活跃值: (499)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
lykseek 2017-11-22 16:56
10
0
应该是其他线程触发了反调试
建议,在libc.so中,把线程创建函数也给断点了
雪    币: 1636
活跃值: (653)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
琅環玉碎 2020-6-19 07:03
11
0
大神,干,真干货
游客
登录 | 注册 方可回帖
返回