ShareKing 发表于 2022-2-5 01:33

IO重定向简单分析

0x0 引言

[*]
X:svc跟syscall的区别是啥
[*]
Y:xxxx唧唧哇哇oooo
[*]
X:怎么bypass 内存搜索还是ptrace
[*]
Y:va用的内存搜索+inline的(目前所看到的源码),隔壁珍惜大佬用的ptrace的
[*]
Y:大佬们要不要关注下我,突然灵机一动,想写个openat,syscall,svc,和va io svcbypass处理的文章[皱眉]
    以上纯属是个玩笑。当然了,本文要表述的这部分内容比较基础,大佬级别手下留情,给小菜花留点活路,感激涕零

0x1 系统调用相关概念
我先去cv一点概念性的东西
   
用户态是怎么进入到内核态呢?这着实让人头疼。实际上常见的 kill方法 就会进入到内核态,而沟通内核态的方法就是sys_call方法。






0x2 跟踪openat源码
咱们这里以android8.0 arm64为例: http://androidxref.com/8.0.0_r4


可以看到,open和openat的实现都是__openat,那就去__openat看下

svc出现了

0x3 跟踪syscall源码
使用方式:pid_t pid = syscall(__NR_getpid);

源码:svc 出现了

0x4 io重定向
va:https://github.com/asLody/VirtualApp
ratel:https://github.com/virjarRatel/ratel-core
io重定向都是上述两个产品的核心功能之一,并且它俩的逻辑差不多哈,因为ratel是新开源的,所以直接拿ratel来看
(ps:io重定向可以干的事很多哈,如va的多开原理,ratel的一机多号原理,bypass文件检测等场景中,io重定向都起到了至关重要的作用)

函数hook

内存扫描 + hook


这部分优雅的写法主要是IORelocator.h中几个宏决定的,大家可以好好读读源码,然后学习和cv一波
frida方式见我的另一篇文章:https://mp.weixin.qq.com/s/TYwmqIE0jZ0BYWpunQ7TZw
0x5 总结
[*]int fd = openat(dirfd, "output.log", O_CREAT|O_RDWR|O_TRUNC, 0777);
[*]long fd = syscall(__NR_openat, dirfd, "output.log", O_CREAT|O_RDWR|O_TRUNC, 0777);
以 上述日常读文件方式 和 android8.0源码arm模式 为例:
[*]
都要由用户态进入内核态
[*]
进入内核态的逻辑由汇编实现(准备寄存器参数,然后swi/svc)
[*]
32位下是swi指令,64位下是svc指令
[*]
openat -> __openat -> __openat.S -> 准备系统调用号,然后swi/svc(这里可以理解写死调用号形式的汇编实现)
[*]
syscall -> syscall.S -> 准备系统调用号,然后swi/svc(这里可以理解为传参形式的汇编实现)
[*]
[*]
io重定向的应用场景很多
[*]
[*]
ratel hook了

[*]
以__openat为代表的文件操作相关函数
[*]
以__openat.S为代表的具体的文件操作方式的swi/svc逻辑(写死调用号形式的汇编实现)
[*]
app so自实现的具体的文件操作方式的swi/svc逻辑(写死调用号形式的汇编实现)(ps:目前hook时机在dlopen后,目标自实现svc汇编写法要和__openat.S中写法类似,才会生效。哈哈,这部分逻辑我提的pr,cv大法好。当然了,hook的时机、汇编特征、更多调用号的适配都可以继续优化)
[*]
ratel 未hook

[*]
syscall这个函数
[*]
syscall.S的汇编实现
[*]
va,ratel,fakexposed....等项目中有很多可以学习和cv的地方,*发了个人理解的方案流/算法流技术晋级路线
[*]
感谢上述的各位巨巨

自行车067 发表于 2022-2-5 01:39

感谢楼主

tULZD 发表于 2022-2-5 01:42

感谢楼主

抽屉29605 发表于 2022-2-5 02:00

谢谢分享

XeTI3 发表于 2022-2-5 03:20

我觉得楼主这帖很强!

tkmOD6 发表于 2022-2-5 06:03

有楼主这样的热心人真好

泥猴桃082 发表于 2022-2-5 06:41

Thanks~ 向楼主致敬!

heCJlyuDEv 发表于 2022-2-5 06:47

谢谢分享

afxKhM081 发表于 2022-2-5 07:52

火前留名!我相信一定会火!

KhnfGoBV 发表于 2022-2-5 07:52

谢谢分享
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: IO重定向简单分析