Android 逆向ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )相关的知识,希望对你有一定的参考价值。





一、C 标准库 ptrace 函数简介



ptrace 函数 : 在 C 标准库 中有一个 ptrace 函数 , 该函数是一个系统调用方法 , 可以监视进程执行 , 查看 / 更改 被监视进程的 内存 和 寄存器 情况 , 常用于断点调试 ;

ptrace 函数对应的系统调用本质 : ptrace 标准库函数实际上调用的是 系统调用 __NR_ptrace ; 系统调用号 26 ;

ptrace 函数原型 : ptrace 函数实际上是由一系列的函数组成 , 具体调用哪个函数 , 要根据第一个参数确定 ;

       #include <sys/ptrace.h>

       long ptrace(enum __ptrace_request request, pid_t pid,
                   void *addr, void *data);

ptrace 函数参考文档 : https://man7.org/linux/man-pages/man2/ptrace.2.html

注入的原理就是围绕 ptrace 函数进行的一系列操作 ;


Linux 系统分为 用户层 和 内核层 , 在用户层调用的方法就是普通调用 , 内核层调用的方法是 系统调用 ;

系统调用 : 如果在用户层需要用到 内核层 相关函数 , 则产生中断 , 切换到内核层 , 由系统处理相应中断 , 中断处理完毕后 , 通过用户寄存器返回 , 用户层 可以通过读取 中断处理寄存器 , 获取中断处理结果 ;

Linux 中有 syscall 函数 , 专门用于系统调用 ;





二、ptrace 函数真实作用



注入并不是系统 bug , 是系统接口的特殊使用方式 ;

就像 Java 的反射一样 , 都是设计时就设计好的功能 ;


每个操作系统都需要 调试介入机制 , 用于 问题追踪 , 错误诊断 , 开发调试 等场景 ;

问题追踪 : 如果想要对程序的进程进行调试 , 获取程序运行中某个时间节点的 , 完整的内存信息 , 操作系统必须提供相应的支持 , 这里的 ptrace 函数就是为 支持 C 标准库的 Linux / android 系统提供的这种支持 ;

错误诊断 : 当程序运行出错时 , 系统或开发环境要进行报错 , 错误诊断的依据 需要 ptrace 函数追踪进程运行情况获取 ;

开发调试 : Linux 下的 strace , gdb 等工具 , 都要用到 ptrace 函数 ;


Android 中使用 ptrace 函数 , 必须有 root 或 system 权限 ;

以上是关于Android 逆向ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )(代

Android 逆向代码调试器开发 ( ptrace 函数 | 读寄存器 | 写寄存器 )

Android 逆向代码调试器开发 ( ptrace 函数 | 向进程内存写出数据 )

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )

Android 逆向代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )

android逆向面试几个问题点。