首页
社区
课程
招聘
[求助]关于ptrace反调试的想法
发表于: 2020-1-10 14:37 7038

[求助]关于ptrace反调试的想法

2020-1-10 14:37
7038

背景

可能我的想法是错的,只是来求证一下,看我的思路对不对

 

ptrace来做反调试,在Android的反调试里面算比较常见的。然后我又一个想法,是否可以利用frida来主动调用ptracePTRACE_DETACH来取消ptrace的附加。

想法证明步骤

应用有三个进程,主进程被其中的一个进程attach上的,以我这个为例(由于是客户的产品,所以此处做了模糊处理):

 

图片描述

 

其中6521这个是主进程,6545这个进程附加了6521

 

图片描述

 

因为6521这个已经被ptrace附加了,所以用frida去附加会失败。我的想法是能不能附加到6545这个进程,然后对6521这个进程进行detach操作。于是我写了下面这一段脚本。

var ptrace_ptr = Module.getExportByName(null, 'ptrace');
var ptrace = new SystemFunction(ptrace_ptr, 'int', ['int', 'int', 'int', 'int']);

var PTRACE_TRACEME = 0;
var PTRACE_PEEKTEXT = 1;
var PTRACE_PEEKDATA = 2;
var PTRACE_PEEKUSR = 3;
var PTRACE_POKETEXT = 4;
var PTRACE_POKEDATA = 5;
var PTRACE_POKEUSR = 6;
var PTRACE_CONT = 7;
var PTRACE_KILL = 8;
var PTRACE_SINGLESTEP = 9;
var PTRACE_ATTACH = 16;
var PTRACE_DETACH = 17;
var PTRACE_SYSCALL = 24;
var PTRACE_SETOPTIONS = 0x4200;
var PTRACE_GETEVENTMSG = 0x4201;
var PTRACE_GETSIGINFO = 0x4202;
var PTRACE_SETSIGINFO = 0x4203;
var PTRACE_GETREGSET = 0x4204;
var PTRACE_SETREGSET = 0x4205;
var PTRACE_SEIZE = 0x4206;
var PTRACE_INTERRUPT = 0x4207;
var PTRACE_LISTEN = 0x4208;
var PTRACE_PEEKSIGINFO = 0x4209;

console.log("ptrace " + ptrace_ptr);
console.log("run ptrae PTRACE_DETACH");
var ret = ptrace(PTRACE_DETACH, 6521, 0, 0);
console.log("ptrace return value = " + ret.value);
console.log("errno " + ret.errno);

输出的结果如下:

Attaching...
ptrace 0xe7a76e85
run ptrae PTRACE_DETACH
ptrace return value = -1
errno 3
[Remote::PID::6545]->

这个errno为3,这个错误说的是No such process。就是没有这个进程。确实没搞懂为什么会报这个错。当然我的想法不一定正确,只是让各位帮忙分析一下这个思路是否可行。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 317
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
不行
2020-1-10 16:56
0
雪    币: 29
活跃值: (5682)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可以的,实际上magisk就会事先ptrace住zygote和zygote64,在这种情况下如果想要通过zygote进行全局注入就需要先ptrace住magisk让他detach掉,注入完毕后再重现帮它attach上去
最后于 2020-1-12 10:54 被不吃早饭编辑 ,原因:
2020-1-12 10:54
0
雪    币: 3549
活跃值: (941)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
不吃早饭 可以的,实际上magisk就会事先ptrace住zygote和zygote64,在这种情况下如果想要通过zygote进行全局注入就需要先ptrace住magisk让他detach掉,注入完毕后再重现帮 ...
厉害,研究的挺深入
2020-1-12 21:48
0
雪    币: 33
活跃值: (322)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
gg修改器就是这么干的 对于多进程互相ptrace就束手无策了
2020-1-13 13:27
0
游客
登录 | 注册 方可回帖
返回
//