|
发表于 2020-10-17 16:53:46
|
查看: 7317 |
回复: 0
self-debugging反调试的原理 当前的进程就是父进程,也就是即将被调试的进程
self-debugging反调试的原理
然后通过父进程来fork一个子进程
self-debugging反调试的原理
这个子进程实现了调试器的功能:
self-debugging反调试的原理
作为调试器的子进程附加父进程:
self-debugging反调试的原理
通过子进程调试父进程,进而阻止其他调试器来调试父进程
self-debugging反调试的原理
self-debugging反调试的原理
两个关键点: 创建子进程的fork函数,子进程通过附加调试父进程;
一般的调试器,先要附加要调试程序的进程,获取相关进程的信息,才能进行相应的动态调试;
如果由子进程来附加调试父进程,那么其他调试器就不能附加该进程,因为同一时刻,一个进程只能被一个进程附加;
演示self-debugger调试器的反调试流程 先把这两个文件push到手机目录:data/local/tmp
self-debugging反调试的原理
分别给最高权限
self-debugging反调试的原理
指令命令:ps | grep com,过滤一下手机中以com开头的进程,选这这个phone结尾的
self-debugging反调试的原理
运行debugger,调试这个进程
self-debugging反调试的原理
根据上节课知识,如果进程被调试,他的进程pid值会发生变化,
执行命令: cat /proc/10529/status
self-debugging反调试的原理
这个tracepid的值是22229,这个是什么呢?
我们继续执行命令:ps | grep debugger,看一下debugger的进程信息
self-debugging反调试的原理
发现有两个,第一个进程22229就是刚才被调试程序的tracepid的值,第二个是系统的,可以不用管;
此时就说明debugger调试器附加成功了,既然附加成功,说明这个调试器的实现是没有问题的;
我们运行self debugger来测试一下
self-debugging反调试的原理
这里有主进程pid和子进程pid
self-debugging反调试的原理
我们尝试用debugger附加他的主进程:发现失败
self-debugging反调试的原理
这是为什么?因为他的主进程在被子进程调试,此时debuger再去附加,就会报错;前面我们讲过,一个进程只能被一个进程附加
self-debugging反调试的原理
过掉self-debugger反调试 我们可以附加它的子进程
self-debugging反调试的原理
如果有的apk直接用IDA附加调试是附加不上的,如果存在这种情况,有可能会有IDA反调试;
解决办法:双开IDA,找到创建进程的位置,直接在Fork函数下断
|
温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【 投诉建议】板块发帖举报。
|