ptrace的小例子

原创 2016年05月30日 10:34:06

#include <sys/ptrace.h>

#include <sys/types.h>

#include <sys/wait.h>

#include <unistd.h>

#include <sys/user.h>

#include <errno.h>

#include <stdlib.h>

#include <stdio.h>

#include <signal.h>

#include <stddef.h>


static void* const break_addr = (void*)0x40074d;

static long text;


int main(int argc, char *argv[])

{
    pid_t pid;
    long err;

    struct user_regs_struct regs;


    pid = fork();
    if (pid == 0)
    {
        int i =0;
        sleep(1);
        printf("hello=%d\n",i++);
        printf("world=%d\n",i++);
    }
    else if (pid > 0)
    {
        err = ptrace(PTRACE_ATTACH, pid, NULL, NULL);
        if (err == -1)
        {
            printf("attach err due to %d\n",errno);
        }
        waitpid(pid, NULL, 0);

        // set trap at breakpoint
        {
            text = ptrace(PTRACE_PEEKTEXT, pid, break_addr, NULL);
            if (text == -1)
            {
                printf("peek text err due to %d\n",errno);
            }

            long trap = (text & (~0xff)) | 0xcc;
            err = ptrace(PTRACE_POKETEXT, pid, break_addr, (void*)trap);
            if (err == -1)
            {
                printf("poke text err due to %d\n",errno);
            }

            ptrace(PTRACE_CONT, pid, NULL, NULL);
            waitpid(pid,NULL,0);
        }

        // restore at breakpoint
        {
            sleep(5);
            err = ptrace(PTRACE_GETREGS, pid, NULL, &regs);
            if (err == -1)
            {
                printf("get regs err due to %d\n",errno);
            }
#if 0
            for(i=0;i<sizeof(regs)/sizeof(unsigned long long int);i++)
            {
                unsigned long long int *p = (unsigned long long int *)&regs;
                printf("reg:%llx\n",p[i]);
            }
#endif
            regs.rip = (unsigned long long int)break_addr;
            err = ptrace(PTRACE_SETREGS, pid, NULL, &regs);
            if (err == -1)
            {
                printf("restore regs err due to %d\n",errno);
            }

            err = ptrace(PTRACE_POKETEXT, pid, break_addr, (void*)text);
            if (err == -1)
            {
                printf("restore text err due to %d\n",errno);
            }

            ptrace(PTRACE_CONT, pid, NULL, NULL);
        }

        waitpid(pid,NULL,0);
        printf("exit\n");
    }
    return 0;
}

Android Ptrace 注入

由于安卓采用的是修改后的linux内核,所以linux上的很多注入技术都可以用于安卓。ptrace远程注入技术便是一种。现在我们将实现对一款游戏进行注入。该例子是腾讯游戏安全实验室提供的,再此表示感谢...
  • u012417380
  • u012417380
  • 2017年04月04日 10:35
  • 1489

linux 3.5.4 ptrace源码分析分析(系列一)

ptrace是linux系统中为了调试专门设立的一种系统调用。要想调试调试一个进程,有两种方式: PTRACE_TRACEME和PTRACE_ATTACH。这两种方式的主要区别可以概括为: PTRAC...
  • shen332401890
  • shen332401890
  • 2013年12月13日 11:04
  • 2450

基于ARM的Ptrace

转:http://hi.baidu.com/harry_lime/item/cce5161e4af86d4a71d5e8ff 前面提到过打算研究一下基于ARM的Ptrace,并在Mobile上实现H...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2014年01月06日 16:13
  • 2464

Android ptrace简介

1. ptrace 本身的实现 1.1 ptrace用户态定义 见bionic/libc/bionic/ptrace.c extern long __ptrace(int request, pid_t...
  • MyArrow
  • MyArrow
  • 2013年07月29日 16:27
  • 11636

尝试绕过ptrace保护 不知道算不算成功

源码如下 #include int main() {     int i=0;     if(ptrace(PTRACE_TRACEME,0,0,0)     {         pr...
  • lixiangminghate
  • lixiangminghate
  • 2014年11月04日 20:55
  • 1295

[Ptrace]Linux内存替换(五)x86_64平台代码注入

上一节完成了x86平台的简单代码注入,本节将该过程移植到x86_64平台下测试成功。 【测试环境】 CentOS 5.4 (Final)x86_64 Linux version 2.6.18-16...
  • Dearggae
  • Dearggae
  • 2015年08月12日 20:52
  • 1014

linux ptrace函数

【ptrace系统调用】 功能描述: 提供父进程观察和控制另一个进程执行的机制,同时提供查询和修改另一进程的核心影像与寄存器的能力。主要用于执行断点调试和系统调用跟踪。父进程可通过调用fork,...
  • gfsfg8545
  • gfsfg8545
  • 2012年11月25日 21:35
  • 3506

x86 下的 Ptrace 的 PTRACE_GETREGS 取寄存器的值

在java里的jstack -F/-m 在打线程的堆栈的信息在linux下的实现是用ptrace 来取被跟踪的进程的寄存器的信息,而这个取的request 的类型 是用PTRACE_GETREGS。 ...
  • raintungli
  • raintungli
  • 2011年06月23日 16:36
  • 4161

ptrace 不允许操作解决方法

sudo gedit /etc/sysctl.d/10-ptrace.conf kernel.yama.ptrace_scope = 0 reboot
  • cws1214
  • cws1214
  • 2013年09月22日 09:57
  • 1351

Windows下的"ptrace"-父进程监视子进程Debugging API

原文地址:http://blog.csdn.net/ariesjzj/article/details/7226443  Linux下有功能强大ptrace,用于让父进程监视/修改/控制子进程的状态。...
  • ariesjzj
  • ariesjzj
  • 2012年02月03日 08:35
  • 3354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ptrace的小例子
举报原因:
原因补充:

(最多只允许输入30个字)