首页
社区
课程
招聘
[原创]【从源码过反调试】二、过PTRACE_TRACEME
发表于: 2022-10-10 17:10 13796

[原创]【从源码过反调试】二、过PTRACE_TRACEME

2022-10-10 17:10
13796

PTRACE_TRACEME 反调试
原理有两条
反调试先附加自己,防止其他ptrace附加。
反调试后附加自己失败,则被其他ptrace附加
其实就这样:

常见的过这个反调试是hook ptrace调用,过滤参数,返回。

我的反反调试思路也和这个差不多:
伪造ptrace(PTRACE_ME,...)的返回值为0,这样
反调试先附加自己,以为自己附加成功了,实际上失败了,我们调试器可以附加上。
反调试后附加自己,以为自己附加成功了,实际上他失败了,所以认为没有其他ptrace附加。

这也就骗过了反调试。

可修改源码的情况下,这里直接return即可。
图片描述

但是这样相当于禁用了全局的 ptrace 的PTRACE_TRACEME功能, 有没有其他影响我还没有发现,目前还没遇到有问题的地方,后面遇到的话打算在这里加个pid筛选功能,只针对特定进程开启过滤。

和这帖子的方法有异曲同工之处,也是自己改完想学学大佬的方法,才发现的。比较下来,还是感觉改系统源码这种方式一劳永逸,但也学习了大佬的思路。(如果没有破坏稳定性的话)
https://bbs.pediy.com/thread-212404.htm

如果有其他方式调用,绕过了这种反反调试,还是可以在ptrace_traceme函数内部直接return的
图片描述

if (ptrace(PTRACE_TRACEME,...) == -1)
{
       // exit ... 
}
if (ptrace(PTRACE_TRACEME,...) == -1)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 8
支持
分享
最新回复 (16)
雪    币: 2745
活跃值: (1846)
能力值: ( LV12,RANK:298 )
在线值:
发帖
回帖
粉丝
2

反调试升级:

连附加自己两次,检测第一次是否成功且第二次是否失败

最后于 2022-10-10 19:23 被KuCha128编辑 ,原因:
2022-10-10 19:22
1
雪    币: 493
活跃值: (1287)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
KuCha128 反调试升级:连附加自己两次,检测第一次是否成功且第二次是否失败

感谢指点,进程第一次attach自己返回成功,之后再attach自己,若再attach前已detach则本次attach返回成功,若未detach则返回失败。基于这个思路,并且尽可能的少改源码,我维护了两个全局变量,一个是上次traceme的进程task指针,一个是判断是否detach。原理:

未detach 连续ptraceme,若取得的task指针相同,说明连续attach自己,所以第一次ptraceme返回0,后面一直返回-1

若detach ptraceme后detach,则下次ptraceme后,还让其返回成功。


对于单进程traceme可以过反调试,但存在“A进程traceme,再B进程traceme,再A进程traceme,会绕过这种反反调试”所以更合适的办法是维护一个动态数组,保存{进程、调用traceme状态、调用detach状态},根据不同状态返回不同值。

但实现起来稍复杂,还没摸清内核的c语言能用哪些已经内置的数据机构,担心破坏系统稳定性,后面遇到可以再写。

最后于 2022-10-11 11:44 被xxxlion编辑 ,原因:
2022-10-11 11:38
0
雪    币: 1709
活跃值: (850)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
再升级:
先附加自己,成功后检查 /proc/self/status 里的 TracerPid 是否为自己的 pid,如果不是则该结果为攻击者伪造的
2022-10-12 10:56
0
雪    币: 493
活跃值: (1287)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
残页 再升级: 先附加自己,成功后检查 /proc/self/status 里的 TracerPid 是否为自己的 pid,如果不是则该结果为攻击者伪造的
这个考虑到了,有方式过,我现在手头没试验环境,验证ok了的话 下篇帖子发。
2022-10-12 14:53
0
雪    币: 493
活跃值: (1287)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
残页 再升级: 先附加自己,成功后检查 /proc/self/status 里的 TracerPid 是否为自己的 pid,如果不是则该结果为攻击者伪造的
无论是用cat命令 还是用fopen打开文件 最后都会调用到open函数,可以在open.c中。过滤掉proc status字符串,发现打开文件直接return -1。
现在我担心的主要是
1:是否会有性能问题
2:无法打开这个文件,是否会破坏系统稳定性
等我验证后再下篇帖子详细说明
2022-10-12 14:57
0
雪    币: 2122
活跃值: (3934)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
TracePid的话网上有很多方法,那个双进程守护的话可以从ptrace入手,ptrace里面有个task结构体,里面有pid和ppid,遍历一下,如果ptrace的主体与目标存在父子关系就返回,这样的话没有父子关系的ida或其它进程可以随意附加,自身没法附加自身,正常apk基本都没问题,但是碰到那些专门针对这个的就有问题了,比如年初CTF里面的那个crackme,就专门针对traceme进行了处理,检测到无法traceme就直接退出进程
2022-10-21 23:34
0
雪    币: 493
活跃值: (1287)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
lxcoder TracePid的话网上有很多方法,那个双进程守护的话可以从ptrace入手,ptrace里面有个task结构体,里面有pid和ppid,遍历一下,如果ptrace的主体与目标存在父子关系就返回,这样 ...
既然是要改内核源码,那肯定要做到一劳永逸的过检测。
1:设定启动时机,在一个进程启动早期,记录它所有fork的进
程pid,对这些pid 的ptrace行为,伪造出无论traceme和是守护进程都无法检测出的方案。
2:ptrace 黑名单或者白名单,我的下一篇文章给系统增加syscall,传给pid就是为此做铺垫的。只允许特定进程ptrace,其余进程一律直接返回失败,或者只不允许特定进程ptrace。
2:去掉ptrace内部的锁,允许多个进程附加到同一个进程上。这个我觉得可能比较有意思。如果ptrace附加只是为了读写内存 不调试的话,感觉没有问题。调试的话需要再看看怎么处理
2022-11-25 16:39
1
雪    币: 197
活跃值: (1343)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享!
2022-11-28 11:41
0
雪    币: 2428
活跃值: (10698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大佬,这是那个版本的内核代码?
2023-1-10 14:28
0
雪    币: 493
活跃值: (1287)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
你瞒我瞒 大佬,这是那个版本的内核代码?
不好意思帖子没看到消息,linux 5.10, 其实这些源码各个版本不会变动太多的
2023-6-12 14:55
0
雪    币: 3443
活跃值: (14163)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
12
你可以尝试调试一下hunter,现在都是内存检测,并不是检测环境。
2023-6-13 12:42
0
雪    币: 434
活跃值: (2884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
珍惜Any 你可以尝试调试一下hunter,现在都是内存检测,并不是检测环境。
修改后frida可以附加hunter了
2023-6-13 14:28
0
雪    币: 3443
活跃值: (14163)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
14
会退出的才对,没提示高风险设备么?
2023-6-13 19:34
0
雪    币: 2428
活跃值: (10698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
xxxlion 不好意思帖子没看到消息,linux 5.10, 其实这些源码各个版本不会变动太多的
感谢感谢
2023-6-15 09:08
0
雪    币: 2428
活跃值: (10698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
cydian 修改后frida可以附加hunter了
大佬能不能把frida server分享一下
2023-6-15 09:09
0
雪    币: 3535
活跃值: (31011)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
感谢分享
2023-6-15 09:17
1
游客
登录 | 注册 方可回帖
返回
//