首页
社区
课程
招聘
[原创]seccomp-bpf+ptrace实现修改系统调用原理(附demo)
2022-12-13 11:43 42271

[原创]seccomp-bpf+ptrace实现修改系统调用原理(附demo)

2022-12-13 11:43
42271
收藏
点赞34
打赏
分享
打赏 + 20.00雪花
打赏次数 2 雪花 + 20.00
 
赞赏  万里星河   +10.00 2023/01/08 瑕不掩瑜 感谢分享
赞赏  守哥哥   +10.00 2022/12/13 我也想要源码
最新回复 (86)
雪    币: 268
活跃值: (543)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
全都是HOOK 2022-12-14 23:06
26
0
王麻子本人 比较呆的写法是这样:添加一条jump指令 BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_openat, 0, 2), BPF_JUMP(BPF_JMP+BPF_JEQ+ ...
终于搞的差不多了, 这样写可以拦截到想hook的系统调用
struct sock_filter filter[] = {
            BPF_STMT(BPF_LD | BPF_W | BPF_ABS, offsetof(struct seccomp_data, nr)),
            BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_execve, 3, 0),
            BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_write, 2, 0),
            BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_read, 1, 0),
            BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_openat, 0, 1),
            BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_TRACE),
            BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW)
    };

大佬, 有时间研究一下返回值的修改啊, proot项目中有, 但是看不懂 
雪    币: 1161
活跃值: (3459)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
王麻子本人 2022-12-15 00:23
27
0
mb_czxkzsmv 终于搞的差不多了, 这样写可以拦截到想hook的系统调用 struct sock_filter filter[] = { BPF_STMT(BPF_LD | BPF_W | ...
你仔细看一下哇还是比较简单的,思路比较吊,实现起来就那一点点代码而已。
雪    币: 5
活跃值: (985)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
恋一世的爱 2022-12-15 03:35
28
0
mb_czxkzsmv 终于搞的差不多了, 这样写可以拦截到想hook的系统调用 struct sock_filter filter[] = { BPF_STMT(BPF_LD | BPF_W | ...
打包注入方式,while(1)导致app主进程无法往下执行,怎么不漏掉最佳hook时机,又不影响主进程呢
雪    币: 268
活跃值: (543)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
全都是HOOK 2022-12-15 08:56
29
0
恋一世的爱 打包注入方式,while(1)导致app主进程无法往下执行,怎么不漏掉最佳hook时机,又不影响主进程呢
我还没有在安卓上运行, 以上代码都是我在Linux上实现的, Linux上运行调试比较方便学习, 暂时无法解答这个问题
雪    币: 1161
活跃值: (3459)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
王麻子本人 2022-12-15 11:38
30
0
恋一世的爱 打包注入方式,while(1)导致app主进程无法往下执行,怎么不漏掉最佳hook时机,又不影响主进程呢
注入进去的so是子进程附加app主进程。
雪    币: 8
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
小明是咸鱼 2022-12-15 17:35
31
0
大佬牛逼
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-2 05:07
32
0
本人有点菜 demo的编译环境是啥 linux还是windows 如果是windows 需要安装make 和 clang++吗?还是说ndk自带?如果ndk自带的话 如何具体操作来配置呢?
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-2 20:55
33
0
王麻子本人 注入进去的so是子进程附加app主进程。
H:\git\projects\ptrace-seccomp-demo>make
clang++ -target aarch64-linux-android21 arm_seccomp_ptrace.cpp -o tuziseccomp -static-libstdc++
arm_seccomp_ptrace.cpp:20:10: fatal error: 'arm64_seccomp.h' file not found
#include "arm64_seccomp.h"
         ^~~~~~~~~~~~~~~~~
1 error generated.
make: *** [Makefile:2: all] Error 1
大佬 这怎么搞
雪    币: 1161
活跃值: (3459)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
王麻子本人 2023-1-3 20:06
34
0
万里星河 H:\git\projects\ptrace-seccomp-demo>make clang++ -target aarch64-linux-android21 arm_seccomp_ptr ...
这个文件我git发了的
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-3 21:05
35
0
王麻子本人 这个文件我git发了的
用这个ptrace安卓应用后 会导致安卓的View卡死 但日志表明程序还在正常运行 这个问题大佬遇到过吗?
雪    币: 5
活跃值: (985)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
恋一世的爱 2023-1-4 02:19
36
0
万里星河 用这个ptrace安卓应用后 会导致安卓的View卡死 但日志表明程序还在正常运行 这个问题大佬遇到过吗?
我也遇到,不知道怎么解决
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 12:02
37
0
恋一世的爱 我也遇到,不知道怎么解决
我也是一头雾水 估计得系统学习一下ptrace原理才行
雪    币: 305
活跃值: (213477)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
shinratensei 1 2023-1-4 14:29
38
0
tql
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 14:30
39
0
恋一世的爱 我也遇到,不知道怎么解决

这个其实View也并不是直接卡死 貌似只是View的更新出了问题 从日志来看里面的view还是能响应点击时间的 只是Toast不出来 或者 无法更新View的内容 总之就是ptrace上之后 View就无法更新了 但还是能响应各种事件 这到底是什么问题呀 都快把我搞自闭了

最后于 2023-1-4 14:30 被万里星河编辑 ,原因:
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 16:08
40
0
万里星河 恋一世的爱 我也遇到,不知道怎么解决 这个其实View也并不是直接卡死 貌似只是View的更新出了问题 从日 ...
2023-01-04 16:03:53.579 9788-9820/com.example.systemcalldemo E/libEGL: error opening cache file /data/user_de/0/com.example.systemcalldemo/code_cache/com.android.skia.shaders_cache: Function not implemented (38)
2023-01-04 16:03:53.607 9788-9820/com.example.systemcalldemo E/vndksupport: Could not load /vendor/lib64/hw/gralloc.msm8998.so from sphal namespace: dlopen failed: library "/vendor/lib64/hw/gralloc.msm8998.so" not found.
2023-01-04 16:03:53.607 9788-9820/com.example.systemcalldemo E/HAL: load: module=/vendor/lib64/hw/gralloc.msm8998.so
    unknown
2023-01-04 16:03:53.607 9788-9820/com.example.systemcalldemo E/libc: Access denied finding property "hwservicemanager.ready"
2023-01-04 16:03:53.607 9788-9820/com.example.systemcalldemo E/libc: Access denied finding property "hwservicemanager.ready"
原因应该是拦截openat导致这个库没加载成功 把__NR_openat换成其他的就正常 具体怎么解决就看各位大佬的啦
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 16:18
41
0
万里星河 恋一世的爱 我也遇到,不知道怎么解决 这个其实View也并不是直接卡死 貌似只是View的更新出了问题 从日 ...
2023-01-04 16:17:09.580 10473-10507/com.example.systemcalldemo W/SharedPreferencesImpl: Cannot read /data/user/0/com.example.systemcalldemo/shared_prefs/embryo.xml
    java.io.FileNotFoundException: /data/user/0/com.example.systemcalldemo/shared_prefs/embryo.xml (Function not implemented)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:231)
        at java.io.FileInputStream.<init>(FileInputStream.java:165)
        at android.app.SharedPreferencesImpl.loadFromDisk(SharedPreferencesImpl.java:151)
        at android.app.SharedPreferencesImpl.access$000(SharedPreferencesImpl.java:54)
        at android.app.SharedPreferencesImpl$1.run(SharedPreferencesImpl.java:122)
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 16:29
42
0
感觉是影响了java层的open函数
雪    币: 1161
活跃值: (3459)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
王麻子本人 2023-1-4 17:28
43
0
万里星河 用这个ptrace安卓应用后 会导致安卓的View卡死 但日志表明程序还在正常运行 这个问题大佬遇到过吗?
在android运行在主线程安装seccomp子线程进行监听回调,有空我发个android的demo吧。
雪    币: 5
活跃值: (985)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
恋一世的爱 2023-1-4 18:05
44
0
万里星河 2023-01-04 16:03:53.579 9788-9820/com.example.systemcalldemo E/libEGL: error opening cache file /dat ...
不是吧,我就算没hook nr openat也是卡
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 20:24
45
0
恋一世的爱 不是吧,我就算没hook nr openat也是卡
你把kill(paid,SIGSTOP)注释掉就不会了
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 20:31
46
0
王麻子本人 在android运行在主线程安装seccomp子线程进行监听回调,有空我发个android的demo吧。
我觉得不是这个问题 感觉主要是没处理好与openat挂钩的java层的native函数 你看FileInputStream的open0函数 提示的错误是Function not implemented
雪    币: 62
活跃值: (566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-1-4 20:39
47
0
万里星河 我觉得不是这个问题 感觉主要是没处理好与openat挂钩的java层的native函数 你看FileInputStream的open0函数 提示的错误是Function not implemented
纯linux程序由于没有涉及jni 跑起来自然没问题 可一旦涉及安卓程序 就会出bug
雪    币: 5
活跃值: (985)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
恋一世的爱 2023-1-4 20:49
48
0
王麻子本人 在android运行在主线程安装seccomp子线程进行监听回调,有空我发个android的demo吧。
发出来我再测试看看,感觉就是会导致安卓APP主线程卡住
雪    币: 1161
活跃值: (3459)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
王麻子本人 2023-1-4 21:57
49
0
恋一世的爱 发出来我再测试看看,感觉就是会导致安卓APP主线程卡住
建议你仔细阅读demo理解每一行代码的用途自己研究一下吧你这个语气阿里p8大牛吧。
雪    币: 5
活跃值: (985)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
恋一世的爱 2023-1-4 22:12
50
0
王麻子本人 建议你仔细阅读demo理解每一行代码的用途自己研究一下吧你这个语气阿里p8大牛吧。
你可能误会了,我没有命令的语气,我是说如果你有发出来,我再测试看看,没有命令的语气,真比窦娥冤。
游客
登录 | 注册 方可回帖
返回