-
-
[原创]小菜花的IO重定向简析
-
发表于: 2022-1-4 17:11 13605
-
X:svc跟syscall的区别是啥
Y:xxxx唧唧哇哇oooo
X:怎么bypass 内存搜索还是ptrace
Y:va用的内存搜索+inline的(目前所看到的源码),隔壁珍惜大佬用的ptrace的
Y:大佬们要不要关注下我公众号,突然灵机一动,想写个openat,syscall,svc,和va io svcbypass处理的文章[皱眉]
以上纯属是个玩笑。当然了,本文要表述的这部分内容比较基础,大佬级别手下留情,给小菜花留点活路,感激涕零
我先去cv一点概念性的东西
用户态是怎么进入到内核态呢?这着实让人头疼。实际上常见的 kill方法 就会进入到内核态,而沟通内核态的方法就是sys_call方法。
咱们这里以android8.0 arm64为例: http://androidxref.com/8.0.0_r4
可以看到,open和openat的实现都是__openat,那就去__openat看下
那就看64位吧
svc出现了
使用方式:
源码:
svc 出现了
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
以 上述日常读文件方式 和 android8.0源码arm模式 为例:
都要由用户态进入内核态
进入内核态的逻辑由汇编实现(准备寄存器参数,然后swi/svc)
32位下是swi指令,64位下是svc指令
openat -> __openat -> __openat.S -> 准备系统调用号,然后swi/svc(这里可以理解写死调用号形式的汇编实现)
syscall -> syscall.S -> 准备系统调用号,然后swi/svc(这里可以理解为传参形式的汇编实现)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]小菜花的IO重定向简析 13606
- [原创]小菜花的Riru原理浅析和源码阅读 13928
- [原创]小菜花的frida-svc-interceptor 43719
- [原创]小菜花的frida-gadget持久化方案汇总 35048