发布于: 2024-9-12最后更新: 2025-4-27字数 1224阅读时长 4 分钟

ptrace

ptrace 是 Linux 提供的一个系统调用,它允许一个进程(通常是父进程)监控和控制另一个进程(通常是子进程)。这个系统调用非常强大,因为它可以拦截系统调用、读取或修改被监控进程的内存和寄存器等。ptrace 常用于实现调试器(如 gdb)、系统调用跟踪工具(如 strace)以及其他需要监控进程行为的工具。
ptrace 的基本用法包括以下几个方面:
  1. 监控进程的系统调用:通过 PTRACE_TRACEMEPTRACE_ATTACH 可以让父进程监控子进程的系统调用。当子进程执行系统调用时,它会被暂停,父进程可以检查和修改子进程的状态,然后让子进程继续执行。
  1. 读取和修改内存:使用 PTRACE_PEEKDATAPTRACE_POKEDATA 可以读取和修改子进程的内存内容。
  1. 读取和修改寄存器:通过 PTRACE_GETREGSPTRACE_SETREGS 可以获取和设置子进程的寄存器值。
  1. 单步执行PTRACE_SINGLESTEP 可以让子进程单步执行,即执行一条指令后暂停。
  1. 设置断点:可以通过修改子进程的内存内容来设置断点,当子进程执行到该位置时会触发断点并暂停。
  1. 附加到运行中的进程PTRACE_ATTACH 允许父进程附加到一个已经运行中的子进程上进行监控。
  1. 从监控中脱离PTRACE_DETACH 可以让父进程停止监控子进程,子进程将继续独立运行

Seccomp

Seccomp(Secure Computing Mode)是Linux内核的一个安全特性,它允许进程限制自己可以执行的系统调用集合。Seccomp 有几种模式,包括严格模式(strict mode)、过滤模式(filter mode)、日志模式(log mode)和通知模式(notify mode)。其中,过滤模式(Seccomp BPF)是最灵活的,它使用Berkeley Packet Filter(BPF)程序来定义哪些系统调用是允许的。主要用来过滤我们要监控的系统调用, 配合ptrace来断点修改数据。
 
ptrace+seccomp的好处是足够的底层, 可以hook到系统调用, 避免aps使用svc防止inline hook, 来获取真实信息。
 

简单实现

跟踪: recvmsg ,recv,recvfrom系统调用
fork子进程, 设置 ptrace(PTRACE_SETOPTIONS, pid, NULL,default_ptrace_options | PTRACE_O_TRACESECCOMP);
拦截__NR_recvmsg 和 __NR_recvfrom 做modify修改mac返回值
 

Loading...
android aidl 提供跨进程api

android aidl 提供跨进程api

android 11 ota 静默升级

android 11 ota 静默升级

公告
 
花有重开日, 人无再少年~