首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

文章目录 一、C 标准库 ptrace 函数简介 二、ptrace 函数真实作用 一、C 标准库 ptrace 函数简介 ---- ptrace 函数 : 在 C 标准库 中有一个 ptrace 函数..., 该函数是一个系统调用方法 , 可以监视进程执行 , 查看 / 更改 被监视进程的 内存 和 寄存器 情况 , 常用于断点调试 ; ptrace 函数对应的系统调用本质 : ptrace 标准库函数实际上调用的是...系统调用 __NR_ptrace ; 系统调用号 26 ; ptrace 函数原型 : ptrace 函数实际上是由一系列的函数组成 , 具体调用哪个函数 , 要根据第一个参数确定 ;...#include long ptrace(enum __ptrace_request request, pid_t pid,...void *addr, void *data); ptrace 函数参考文档 : https://man7.org/linux/man-pages/man2/ptrace.2.html 注入的原理就是围绕

52910
您找到你想要的搜索结果了吗?
是的
没有找到

GDB原理之ptrace实现原理

ptrace系统调用 ptrace() 系统调用是 Linux 提供的一个调试进程的工具,ptrace() 系统调用非常强大,它提供非常多的调试方式让我们去调试某一个进程,下面是 ptrace() 系统调用的定义...: request:指定调试的指令,指令的类型很多,如:PTRACE_TRACEME、PTRACE_PEEKUSER、PTRACE_CONT、PTRACE_GETREGS等等,下面会介绍不同指令的作用。...ptrace() 系统调用的使用,这个例子主要介绍怎么使用 ptrace() 系统调用获取当前被调试(追踪)进程的各个寄存器的值,代码如下(ptrace.c): #include <sys/ptrace.h...ptrace() 提供的操作比较多,所以本文只会挑选一些比较有代表性的操作进行解说,比如 PTRACE_TRACEME、PTRACE_SINGLESTEP、PTRACE_PEEKTEXT、PTRACE_PEEKDATA...,ptrace() 对 PTRACE_TRACEME 的处理就是把当前进程标志为 PTRACE 状态。

4.1K20

iOS逆向之【Anti ptrace】去掉ptrace反调试保护进行lldb调试的方案(内含demo)

,直接返回 2、分析如何调用的ptrace,hook ptrace 3、通过tweak,替换disable_gdb函数 4、修改 PT_DENY_ATTACH I、运行时期,断点ptrace,直接返回...> thread return > c > DONE II、分析如何调用的ptrace,hook ptrace 去掉ptrace的思路 当程序运行后,使用 debugserver *:1234...为验证是否调用了ptrace 可以 debugserver -x backboard *:1234 /BinaryPath(这里是完整路径),然后下符号断点 b ptrace,c 之后看ptrace第一行代码的位置...最后在 IDA 中找到调用ptrace的代码,分析如何调用的ptrace。 开始hook ptrace。...在ptrace上下断点,找到调用ptrace的地方 (lldb) b ptrace Breakpoint 1: no locations (pending).

2.2K10

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

文章目录 一、ptrace 函数族 1、进程附着 2、进程脱离 3、进程数据读写权限 4、进程对应的主线程寄存器读写 5、单步调试 6、继续向后执行 二、ptrace 函数族状态转换 一、ptrace...函数族 ---- ptrace 函数原型 : ptrace 函数实际上是由一系列的函数组成 , 具体调用哪个函数 , 要根据第一个参数确定 ; #include <sys/ptrace.h...data); ptrace 函数参考文档 : https://man7.org/linux/man-pages/man2/ptrace.2.html 下面是 enum __ptrace_request...: PTRACE_PEEKTEXT、PTRACE_PEEKDATA、PTRACE_PEEKUSER 写入进程数据权限 : PTRACE_POKETEXT、PTRACE_POKEDATA、PTRACE_POKEUSER..., 使用该 PTRACE_CONT 作为 ptrace 函数的 第一参数即可 ; CONTINUE 继续执行 ; 二、ptrace 函数族状态转换 ---- 进程 A 调试 进程 B , 进程 A 先

63110

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

文章目录 一、等待进程状态改变 二、detach 脱离进程调试 PTRACE_DETACH 三、调试中继续运行程序 PTRACE_CONT 一、等待进程状态改变 ---- 上一篇博客 【Android...---- 如果需要 detach 脱离调试进程 , 停止调试 , 调用 ptrace 方法 , 传入 PTRACE_DETACH 参数 ; ptrace(PTRACE_DETACH, m_nPid,...NULL, 0) 参数含义参考 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace...---- 调试过程中 , 如果需要被调试进程继续运行 , 运行到下一个断点或者运行一行代码 , 调用 ptrace 方法 , 传入 PTRACE_CONT 参数 , 可以让被调试进程继续执行 ; ptrace...(PTRACE_CONT, m_nPid, NULL, 0) 调试中继续运行程序完整代码 : int CPtrace::contProc() { if (ptrace(PTRACE_CONT, m_nPid

35610

CVE-2019-13272 Linux Kernel< 5.1.17 PTRACE_TRACEME 漏洞复现

日前,Linux官方发布一则通告, kernel 5.1.17之前版本中存在安全漏洞,该漏洞源于kernel/ptrace.c文件的ptrace_link没有正确处理对凭证的记录。...由于PTRACE_TRACEME允许的borked权限,利用bug在概念上很有趣。对象生命周期处理问题可能会导致内存损坏,但它需要以精确的方式进行代码竞争。...事实PTRACE_TRACEME证明,除了父进程之外,内核还记录了跟踪器的凭据。研究人员概述的方案涉及一个父进程,该进程分叉一个孩子,这个孩子会分叉。...第一个子进程使用命令pkexec(用于以root身份运行程序),第二个子进程运行PTRACE_TRACEME,然后第一个子进程丢弃其权限。...最终结果是父进程可以使用ptrace来控制第一个子进程,后者可以使用ptrace来控制第二个子进程 - 从而让攻击者获得对两个进程的控制权。

82020

【Android 逆向】代码调试器开发 ( ptrace 函数 | 读取进程内存数据 )

文章目录 一、读取进程内存数据 二、读取流程 三、完整代码 一、读取进程内存数据 ---- 使用 ptrace 函数读取内存数据 : ptrace(PTRACE_PEEKTEXT, m_nPid, (void...*)pRemoteAddr, 0); 传入的第一个参数可以是 PTRACE_PEEKTEXT / PTRACE_PEEKDATA / PTRACE_PEEKUSER , 这三个参数效果相同 ; 传入的第二个参数是...进程号 PID , ptrace 函数可以同时调试多个进程 ; 传入的第三个参数是内存地址 , void* 指针类型的 ; 传入的第四个参数默认为 0 ; 上述读取进程内存数据的 ptrace 方法的返回值是一个...(PTRACE_PEEKTEXT, m_nPid, (void*)pRemoteAddr, 0); // 将读取的数据拷贝到 laddr 地址中 memcpy(laddr, d.chars,...4); pRemoteAddr += 4; laddr += 4; } // 读取最后不足 4 字节的数据 if (remain > 0) { d.val = ptrace(PTRACE_PEEKTEXT

36910

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

文章目录 一、向进程内存写出数据 二、写出流程 三、完整代码 一、向进程内存写出数据 ---- 向内存写出数据 : 每次最多能写出 4 字节 ; ptrace(PTRACE_POKETEXT, m_nPid..., (void*)pDestAddr, d.val); 参数一 : 写出数据标志 PTRACE_POKETEXT ; 参数二 : 进程号 PID ; 参数三 : 写出去数据的地址 ; 参数四 : 写出的数据内容...(PTRACE_POKETEXT, m_nPid, (void*)pDestAddr, d.val); pDestAddr += 4; laddr += 4; } 最后再读取一次末尾不足 4...(PTRACE_POKETEXT, m_nPid, (void*)pDestAddr, d.val);//整体写入 部分代码示例 : // 写出末尾不足 4 字节的数据部分 // 读取的时候 ,...(PTRACE_POKETEXT, m_nPid, (void*)pDestAddr, d.val);//整体写入 } return PTERR_SUCCESS; }

32320

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

, 传入 PTRACE_ATTACH 参数 ; 具体的 ptrace 函数族的参数 , 参考 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限...(pid_t pid) { /* attach 关联 要调试的 目标进程 */ if (ptrace(PTRACE_ATTACH, pid, NULL, 0) < 0) { perror("ptrace_attach...函数 PTRACE_GETREGS 读取寄存器值 在 ptrace_getregs 函数中 , 调用 ptrace(PTRACE_GETREGS, pid, NULL, regs) 方法 , 获取目标进程的寄存器数据..., 传入 PTRACE_GETREGS 参数 ; 具体的 ptrace 函数族的参数 , 参考 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限...* regs) { if (ptrace(PTRACE_GETREGS, pid, NULL, regs) < 0) { perror("ptrace_getregs: Can not get register

43520
领券