首页
论坛
课程
招聘
[原创]self-debugging反调试
4天前 1459

[原创]self-debugging反调试

4天前
1459

self-debugging反调试的原理

当前的进程就是父进程,也就是即将被调试的进程
图片描述
然后通过父进程来fork一个子进程
图片描述
这个子进程实现了调试器的功能:
图片描述
作为调试器的子进程附加父进程:
图片描述
通过子进程调试父进程,进而阻止其他调试器来调试父进程
图片描述
图片描述

两个关键点:

创建子进程的fork函数,子进程通过附加调试父进程;
一般的调试器,先要附加要调试程序的进程,获取相关进程的信息,才能进行相应的动态调试;
如果由子进程来附加调试父进程,那么其他调试器就不能附加该进程,因为同一时刻,一个进程只能被一个进程附加;

演示self-debugger调试器的反调试流程

先把这两个文件push到手机目录:data/local/tmp
图片描述
分别给最高权限
图片描述
指令命令:ps | grep com,过滤一下手机中以com开头的进程,选这这个phone结尾的
图片描述
运行debugger,调试这个进程
图片描述
根据上节课知识,如果进程被调试,他的进程pid值会发生变化,
执行命令: cat /proc/10529/status
图片描述
这个tracepid的值是22229,这个是什么呢?
我们继续执行命令:ps | grep debugger,看一下debugger的进程信息
图片描述
发现有两个,第一个进程22229就是刚才被调试程序的tracepid的值,第二个是系统的,可以不用管;
此时就说明debugger调试器附加成功了,既然附加成功,说明这个调试器的实现是没有问题的;
我们运行self debugger来测试一下
图片描述
这里有主进程pid和子进程pid
图片描述
我们尝试用debugger附加他的主进程:发现失败
图片描述
这是为什么?因为他的主进程在被子进程调试,此时debuger再去附加,就会报错;前面我们讲过,一个进程只能被一个进程附加
图片描述

过掉self-debugger反调试

我们可以附加它的子进程
图片描述
如果有的apk直接用IDA附加调试是附加不上的,如果存在这种情况,有可能会有IDA反调试;
解决办法:双开IDA,找到创建进程的位置,直接在Fork函数下断


[公告]看雪技术峰会,技术大牛大型线下交流见面会,2020年10月23日 上海浦东喜来登由由大酒店!

收藏
点赞1
打赏
分享
最新回复 (4)
雪    币: 726
活跃值: 活跃值 (249)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lhxdiao 活跃值 3天前
2
0
思路很好,其实简化思路就是只要进程在被附加调试,别的调试器就附加不上。
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
lzq123218 活跃值 3天前
3
0
不错!
雪    币: 100
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
文生 活跃值 3天前
4
0
lzq123218 不错!
谢谢夸奖
雪    币: 100
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
文生 活跃值 3天前
5
0
lhxdiao 思路很好,其实简化思路就是只要进程在被附加调试,别的调试器就附加不上。
多谢指教 嘿嘿嘿
游客
登录 | 注册 方可回帖
返回