type
Post
status
Published
date
Jul 9, 2025
slug
summary
tags
系统调用
内核
内核模块
Linux
category
技术分享
icon
password
本篇文章的目的是为了修改系统调用表,而不是修改指令做什么inline hook,这里浅浅提一下,在arm64安卓平台,在内核的inline hook可以通过
aarch64_insn_write 实现,当然这个方法是不导出的需要使用kprobe去获取!PS:aarch64_insn_write是一个用于在 AArch64架构(ARM 64位架构)中向指定内存地址写入机器指令(instruction)的低级函数。它通常出现在操作系统内核、虚拟机监控程序(Hypervisor)或其他需要直接操作机器指令的底层代码中。他还有两个兄弟,一个是aarch64_insn_read:从内存中读取指令。还有一个是aarch64_insn_patch_text:内核中更高级的指令修改接口,封装了权限检查和缓存刷新。
详细请看项目:点我前往
原理
系统调用表是只读的,正常情况下没办法修改,其中x86的那个破坏内核只读的方法烂大街了,对我们arm64的安卓设备没什么鸟用,大部分操作都会导致手机死机,然后丢失数据!其实我们还可以用
kprobe 去hook系统调用,但是很奇怪啊,我的一加13这样玩会死机,别人又说不会死机,真奇怪!最开始不知名的臭傻逼|我认识的人叫我用下面的这个方法
喜提死机啊,后面在github寻寻溺溺找到一个这个
巧了,这玩意也趋势了,直接死机!可是我看arm64的linux源代码就用的这个玩意,为什么我的会爆炸呢?望有大佬解惑!
当然你们也知道这玩意需要地址必须是通过
vmalloc 或 module_alloc 分配的,但是呢我看见别人的rootkit在pages里面给要改的page加了个VMALLOC的flag直接绕过了,hhh,((但是没什么用,调用就死机了,呜呜呜,你看他的源代码,他也flush了哎?方法 | 优点 | 缺点 | 适用场景 |
update_mapping_prot | 底层控制精细,支持任意地址 | 兼容性差,需处理 TLB/缓存 | 内核开发、深度定制 |
set_memory_rw/ro | 官方 API,稳定安全 | 仅支持模块地址或 vmalloc 区域 | 常规模块开发 |
kprobes/ftrace | 无需修改页表,安全 | 挂钩开销大,不能修改已有代码 | 调试、追踪 |
直接写 CR0/WP 位(x86) | 绕过所有保护 | 仅限 x86,极端不稳定 | 学术研究、CTF 攻防 |
