技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 677|回复: 0
收起左侧

linux ptrace实验

[复制链接]

272

主题

446

帖子

4791

积分

用户组: 真·技术宅

UID
2
精华
61
威望
148 点
宅币
3613 个
贡献
131 次
宅之契约
0 份
在线时间
616 小时
注册时间
2014-1-25
发表于 2016-5-1 17:23:06 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
本帖最后由 元始天尊 于 2016-5-1 17:33 编辑

ptrace是所有调试和跟踪程序所用的基础,包括gdb,strace,ltrace等工具
ptrace也用于反调试,因为对于一个线程ptrace之后便不能再ptrace
ptrace有2种启动方式:
1.在子进程中ptrace通知父进程调试自己
2.从一个进程对另一个进程进行ptrace

因此ptrace的结构也分为3种(网上收集):
1.父进程调试子进程
int pid=fork())
if(pid == -1)
{
}
else if(pid == 0)//子进程
{
        ptrace(PTRACE_TRACEME,0,0,0);                       
}
else//父进程
{
        wait(0);
}

2.子进程调试父进程
   pid_t pid = fork();
    assert(pid != -1);
    int status;
    long readme = 0;
    if (pid)
    {
        readme = 42;
        printf("parent: child pid is %d\n", pid);
        assert(pid == wait(&status));
        printf("parent: child terminated?\n");
        assert(0 == status);
    }
    else
    {
        pid_t tracee = getppid();
        printf("child: parent pid is %d\n", tracee);
        sleep(1); // give parent time to set readme
        assert(0 == ptrace(PTRACE_ATTACH, tracee));
        assert(tracee == waitpid(tracee, &status, 0));
        printf("child: parent should be stopped\n");
        printf("child: peeking at parent: %ld\n", ptrace(PTRACE_PEEKDATA, tracee, &readme));
    }

3.A进程调试B进程
[mw_shl_code=c,true
        int wait_val = 0;
        int pid = 0;
        printf("selfpid=%d,please input pid:",getpid());
        scanf("%d",&pid);
        int ret = ptrace(PTRACE_ATTACH,pid,0,0);
        if(ret != -1)
        {
                printf("pid=%d,ptrace=%d,errno=%d\n",pid,ret,errno);
                wait(0);
                printf("waited\n");
                ptrace(PTRACE_CONT,pid,NULL,NULL);
                printf("continued\n");
                getchar();
        }
mw_shl_code]

同时,下面2种情况测试失败:
1.ptrace自身
2.互相ptrace

反反调试的构思:(用户态)
由于不存在环回ptrace,因此对于由于已经ptrace而无法调试的程序,找到第一个发出ptrace的进程(/proc/self/status TracerPid),注入并执行ptrace DETACH,
之后对下一级同样操作直到最后的子进程

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-5-22 08:48 , Processed in 0.105288 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表