首页
社区
课程
招聘
[原创]TikTok越狱检测之二 <调试器检测>
发表于: 2024-3-21 17:04 4583

[原创]TikTok越狱检测之二 <调试器检测>

2024-3-21 17:04
4583

来了,调试器检测。总结如下,多多指教:

检测app 是否被附加调试:
原理就是检测父进程是否 launchd启动,在OS X和iOS 系统中,用户环境始于launchd,为用户态出现的第一个进程,为所有的进程的祖先,launchd 的进程PID = 1,
正常情况下,app的启动都是launchd来启动的。当app 被调试的时候,PID 的值则变成了调试器的PID,不等于 1

下面是检测TikTok app 是否被附加调试三种方法,
1.是通过 sysctl函数调用
2.通过getppid 函数调用
3.利用汇编代码svc 调用
检测和反检测都是一目了然的,矛和盾的关系都是平等的。

//非Debug状态,返回值为1,Debug状态返回Debugserver进程id
//首先,它检查父进程 id (ppid) 是否与 /sbin/launchd 相同,后者为 1。不相等则为调试状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+(pid_t)GetParentPidByProc {
    int name[4];
    name[0] = CTL_KERN;
    name[1] = KERN_PROC;
    name[2] = KERN_PROC_PID;
    name[3] = getpid();
    struct kinfo_proc info;
    size_t info_size = sizeof(info);
    info.kp_proc.p_flag = 0;
    /*查询成功返回0*/
    int error = sysctl(name, sizeof(name) / sizeof(*name), &info, &info_size, NULL, 0);
    if (error == 0) {
        return  info.kp_eproc.e_ppid;
    }
    return 0;
}

//非Debug状态,返回值为1,Debug状态返回Debugserver进程id
//首先,它检查父进程 id (ppid) 是否与 /sbin/launchd 相同,后者为 1。不相等则为调试状态

1
2
3
4
5
6
7
8
9
10
+(pid_t) GetParentPid{
    bool bRet = false;
    pid_t LAUNCHD_PID = 1;
     
    pid_t ppid = getppid();
    if (ppid == LAUNCHD_PID) {
        bRet = true;
    }
    return ppid;
}

//通过svc 汇编代码来调用,非Debug状态,返回值为1,Debug状态返回Debugserver进程id

1
2
3
4
5
6
7
8
9
10
11
12
+(pid_t) GetParentPidBySvc{
    NSInteger ppid = 0;
    __asm__ volatile(
                     "mov x16,#39\t\n"
                     "svc 0x80\t\n"
                     "mov %0,x0\t\n"
                     :"=r"(ppid)
                     :
                     :
                     );
    return (pid_t)ppid;
}

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1229
活跃值: (1760)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这是开发者直接下线来,给送福利?
2024-3-23 01:40
0
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2024-3-23 20:48
1
游客
登录 | 注册 方可回帖
返回
//