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

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

2022-10-10 17:10
12276

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

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

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

 

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

这也就骗过了反调试。

 

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

 

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

 

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

 

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


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞8
打赏
分享
最新回复 (16)
雪    币: 2745
活跃值: (1826)
能力值: ( LV12,RANK:298 )
在线值:
发帖
回帖
粉丝
KuCha128 1 2022-10-10 19:22
2
1

反调试升级:

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

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