首页
社区
课程
招聘
[原创]内核改机[一]:目标判断
发表于: 2022-6-18 11:00 10124

[原创]内核改机[一]:目标判断

2022-6-18 11:00
10124

改机作为一种攻击手段,存在着一劳永逸的优势,只要改的足够深,就极难应对。
接下来打算花时间慢慢把过去自己琢磨着玩的一些东西讲出来,都是一些没人讲过的东西,比较主流的东西就不出来丢人现眼了
这一篇先讲讲在内核里怎样进行目标判断

非侵入式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
bool isTargetByTask(struct task_struct* p)
{
    int time = 0;
    while(strcmp(p->comm,"init") != 0)
    {
        if(strstr(p->comm,"xxx") != 0)
        {
            return true;
        }
        if(time > 10)
        {
            return false;
        }
        time++;
        if(p->pid != p->tgid)
        {
            p = p->group_leader;
        }
        else
        {
            p = p->parent;
        }
    }
    return false;
}
 
bool isTargetByPid(int pid)
{
    struct task_struct* p;
    p = pid_task(find_get_pid(pid),PIDTYPE_PID);
    return isTargetByTask(p);
}
 
bool isTarget(void)
{
    return isTargetByTask(pid_task(find_vpid(task_tgid_vnr(current)),PIDTYPE_PID));
}

厂商可以故意制造孤儿进程,孤儿进程的ppid变成init,所以不能用ppid判断目标进程,而应使用tgid

缺点

内核内进程名最多15个字节,性能消耗相对高。
内核给进程生成动态资源时(比如/proc/xxx/maps)还没有给进程改名。

侵入式

  1. include/linux/sched.h中找到struct task_strcut,在末尾添加一个标志位,用于标识是否是目标进程
  2. kernel/fork.c中,复制一份自己的_do_fork(),在其执行完copy_process()后,把子进程的目标标志位置1
  3. 复制一份与fork一样的syscall,新增的syscall用于调用my_do_fork
  4. 在bionic依法复制clone和fork
  5. 在framework层里的zygote复制,在forkAndSpecialize里判断如果niceName是目标APP包名则使用定制的fork

    缺点

    理论上有可能会影响系统稳定性,这个取决于内核代码规范性,不规范就容易GG(我用了很久都没事)

非内核

c、c++代码和framework层就直接用syscall进内核判断就完事了。
service层的话mContext.getPackageManager().getNameForUid(Binder.getCallingUid())即可获取包名,即可根据包名判断是否为目标进程

未完成目录:

文件权限、读取、隐藏、存在、重定向
文件属性
基于真实内存伪造maps
修改网卡mac等相关信息
修改已启动时间
使用hash管理读入的需要使用的信息
rsa验证信息
暂时能想到的就这么多,其他的别人讲的少的东西都挺零零散散的,或者解决起来很简单一两句话搞定,到时候一篇文章搞定

 

有兴趣的欢迎探讨


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

最后于 2022-6-19 12:38 被又一个小菜鸟编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 4
活跃值: (499)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

感谢分享

最后于 2022-6-20 16:46 被Gordonhat编辑 ,原因:
2022-6-20 16:46
0
雪    币: 251
活跃值: (1495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
牛,学习
2022-8-12 10:09
0
雪    币: 38
活跃值: (919)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
netlink读取mac地址,这个正头疼呢
2022-10-21 17:26
0
雪    币: 1
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
老板接开发吗?可否留个联系方式
2023-4-1 22:31
0
游客
登录 | 注册 方可回帖
返回
//