首页
社区
课程
招聘
[原创]小菜花的IO重定向简析
发表于: 2022-1-4 17:11 13605

[原创]小菜花的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期)

最后于 2022-1-4 18:32 被huaerxiela编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//