首页
社区
课程
招聘
[原创]基于ptrace的Android系统调用跟踪&hook工具
发表于: 2022-3-18 15:07 17725

[原创]基于ptrace的Android系统调用跟踪&hook工具

2022-3-18 15:07
17725

前言

大概一年前写的吧,arm64版本已开源:8c5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6G2L8X3g2K6M7%4x3I4z5g2)9J5c8W2y4&6M7$3y4S2L8r3I4Q4y4h3k6A6L8Y4c8W2M7X3y4W2M7s2c8Q4y4h3k6S2M7X3@1$3y4q4!0q4c8W2!0n7b7#2)9^5z5q4!0q4y4W2!0n7x3g2)9^5x3Y4y4@1j5i4t1`.

 

hook svc的方案已经有好几种,前几天有个大佬开源的Frida-Seccomp,罗哥开源的krhook,内存搜索+inlinehook,还有一些大佬没开源的核武器

 

这个工具是基于ptrace实现的,开发涉及到的关键API都是直接参考官方文档988K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0j5h3^5%4i4K6u0W2L8%4u0Y4i4K6u0r3L8r3W2F1N6i4S2Q4x3V1k6E0j5h3&6Q4x3X3c8H3j5h3N6W2M7#2)9J5c8X3#2S2L8U0u0Q4x3V1k6H3N6s2u0S2j5$3g2Q4x3X3f1J5i4K6u0W2K9s2c8E0L8l9`.`.

使用

1
2
3
4
5
6
7
8
9
void show_helper(){
    printf(
            "\nSyscall_intercept -z <zygote_pid> -n <appname> -p <target_pid>\n"
            "options:\n"
            "\t-z <zygote_pid> : pid of zygote\n"
            "\t-t <appname> : application name\n"
            "\t-p <target_pid>: pid of application\n"
    );
}

支持spawn模式和attach模式

spawn模式

1
Syscall_intercept -z zygote_pid -n package_name

运行上述指令后手动打开目标app

attach模式

1
Syscall_intercept -p target_pid

打开目标app后运行上述指令

原理

主要就是依赖于ptrace的这个参数:

1
2
// the tracee to be stopped at the next entry to or exit from a system call
ptrace(PTRACE_SYSCALL, wait_pid, 0, 0);

spawn模式的原理是ptrace到zygote进程,然后跟踪zygote进程的fork系统调用,如果fork出来的新进程是指定包名的app,那么detach掉zygote进程,进而跟踪目标app进程的系统调用

 

attach模式的原理是直接ptrace目标app进程的所有线程

功能

大体功能和strace类似,实现原理也是一样的,主要是多了hook的能力

 

起初是想在strace的基础上改,源码框架没看太懂,转而自己写了个小玩具(逃

 

以拦截openat系统调用为例,运行结果:

 

 

对应源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void openat_item(pid_t pid,user_pt_regs regs){
    char        filename[256];
    char        path[256];
    uint32_t    filenamelength=0;
 
    get_addr_path(pid,regs.ARM_x1,path);
    if(strstr(path,"/data/app")!=0 || strstr(path,"[anon:libc_malloc]")!=0){
        getdata(pid,regs.ARM_x1,filename,256);
        if(strcmp(filename,"/dev/ashmem")!=0){
            print_register_enter(regs,pid,(char*)"__NR_openat",regs.ARM_x8);
            printf("filename: %s\n",filename);
            printf("path: %s\n",path);
            if(strcmp(filename,"/proc/sys/kernel/random/boot_id")==0){
                char tmp[256]="/data/local/tmp/boot_id";
                filenamelength=strlen(tmp)+1;
                putdata(pid,regs.ARM_x1,tmp,filenamelength);
                getdata(pid,regs.ARM_x1,filename,256);
                printf("changed filename: %s\n",filename);
            }
        }
    }
}

编译

1
clang++ -target aarch64-linux-android21 Syscall_intercept_arm64.cpp Syscall_item_enter_arm64.cpp -o Syscall_intercept_arm64 -static-libstdc++

用ndk里面自带的clang++编译即可

TODO

只是一个能跑的玩具,主要是把思路抛出来,后续可以适配更多的系统调用,可以添加栈回溯等等功能~


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

收藏
免费 11
支持
分享
最新回复 (12)
雪    币: 218
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
0x7
2
厉害
2022-3-18 15:29
0
雪    币: 102
活跃值: (2785)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
mark
2022-3-18 15:31
0
雪    币: 181
活跃值: (3538)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
great,再坐等cv一个seccomp组合的
2022-3-18 15:41
0
雪    币: 154
活跃值: (1262)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
mark
2022-3-18 17:10
0
雪    币: 632
活跃值: (604)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
2022-3-18 21:54
0
雪    币: 5064
活跃值: (3322)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
厉害,
2022-3-19 08:53
0
雪    币: 156
活跃值: (1352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
额 支持一下
2022-3-19 12:46
0
雪    币: 2333
活跃值: (2508)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
代码可以跑起来, 老哥威武
2022-12-12 14:11
0
雪    币: 171
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10

代码成功跑起来,大佬威武,github 已 star

最后于 2023-1-3 14:08 被liukuo362573编辑 ,原因:
2023-1-3 14:05
0
雪    币: 171
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
大佬,32 位的能开源么?(不敢相信,还有人白嫖)
2023-1-3 16:15
0
雪    币: 986
活跃值: (6287)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
12
liukuo362573 大佬,32 位的能开源么?(不敢相信,还有人白嫖)
只是一个小demo,系统性学习建议直接去看proot项目
2023-1-4 10:20
0
雪    币: 35
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
开发安卓系统上运行的so库/静态链接库
能够ptrace本进程以及子进程所有系统调用,类似于strace那种。有兴趣的可以加QQ:2223603917 聊具体细节
2023-7-10 16:03
0
游客
登录 | 注册 方可回帖
返回