查看: 350|回复: 0

[转载图文] self-debugging反调试的原理

[复制链接]
发表于 2020-10-17 16:53:46 | 显示全部楼层 |阅读模式
self-debugging反调试的原理  当前的进程就是父进程,也就是即将被调试的进程

self-debugging反调试的原理

self-debugging反调试的原理
  然后通过父进程来fork一个子进程

self-debugging反调试的原理

self-debugging反调试的原理
  这个子进程实现了调试器的功能:

self-debugging反调试的原理

self-debugging反调试的原理
  作为调试器的子进程附加父进程:

self-debugging反调试的原理

self-debugging反调试的原理
  通过子进程调试父进程,进而阻止其他调试器来调试父进程

self-debugging反调试的原理

self-debugging反调试的原理

self-debugging反调试的原理

self-debugging反调试的原理
两个关键点:  创建子进程的fork函数,子进程通过附加调试父进程;
  一般的调试器,先要附加要调试程序的进程,获取相关进程的信息,才能进行相应的动态调试;
  如果由子进程来附加调试父进程,那么其他调试器就不能附加该进程,因为同一时刻,一个进程只能被一个进程附加;
演示self-debugger调试器的反调试流程  先把这两个文件push到手机目录:data/local/tmp

self-debugging反调试的原理

self-debugging反调试的原理
  分别给最高权限

self-debugging反调试的原理

self-debugging反调试的原理
  指令命令:ps | grep com,过滤一下手机中以com开头的进程,选这这个phone结尾的

self-debugging反调试的原理

self-debugging反调试的原理
  运行debugger,调试这个进程

self-debugging反调试的原理

self-debugging反调试的原理
  根据上节课知识,如果进程被调试,他的进程pid值会发生变化,
  执行命令: cat /proc/10529/status

self-debugging反调试的原理

self-debugging反调试的原理
  这个tracepid的值是22229,这个是什么呢?
  我们继续执行命令:ps | grep debugger,看一下debugger的进程信息

self-debugging反调试的原理

self-debugging反调试的原理
  发现有两个,第一个进程22229就是刚才被调试程序的tracepid的值,第二个是系统的,可以不用管;
  此时就说明debugger调试器附加成功了,既然附加成功,说明这个调试器的实现是没有问题的;
  我们运行self debugger来测试一下

self-debugging反调试的原理

self-debugging反调试的原理
  这里有主进程pid和子进程pid

self-debugging反调试的原理

self-debugging反调试的原理
  我们尝试用debugger附加他的主进程:发现失败

self-debugging反调试的原理

self-debugging反调试的原理
  这是为什么?因为他的主进程在被子进程调试,此时debuger再去附加,就会报错;前面我们讲过,一个进程只能被一个进程附加

self-debugging反调试的原理

self-debugging反调试的原理
过掉self-debugger反调试  我们可以附加它的子进程

self-debugging反调试的原理

self-debugging反调试的原理
  如果有的apk直接用IDA附加调试是附加不上的,如果存在这种情况,有可能会有IDA反调试;
  解决办法:双开IDA,找到创建进程的位置,直接在Fork函数下断



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表