花指令与anti-debug

news/2024/10/11 20:32:33

花指令

anti-Debug

  1. ptrace反调试
    (1) ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。
    函数原型:

     \#include <sys/ptrace.h>long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
    

    ptrace有四个参数:
    - enum __ptrace_request request:指示了ptrace要执行的命令。
    - pid_t pid: 指示ptrace要跟踪的进程。
    - void *addr: 指示要监控的内存地址。
    - void *data: 存放读取出的或者要写入的数据。
    返回值:
    - 成功时,ptrace()返回0,否则返回-1并设置errno。

    部分Ptrace request:

    • PTRACE_TRACEME
      表示本进程将被其父进程跟踪,交付给这个进程的所有信号(除SIGKILL之外),都将使其停止,父进程将通过wait()获知这一情况。
      它通常总是与 fork/exec 一起使用。对于每一个进程,PTRACE_TRACEME 只能被调用一次。
    • PTRACE_ATTACH
      根据pid将调试进程附加到被调试进程上,PTRACE_ATTACH向被调试进程发送SIGSTOP信号使之停下.
      但是在ptrace(PTRACE_ATTACH,pid,0,0)执行完毕时被调试进程可能还没有暂停,可以使用waitpid()等待其停下.
    • PTRACE_DETACH
      将被调试进程与调试进程分离,使被调试进程正常运行.
    • PTRACE_SYSCALL
      使被调试进程继续运行,但是在下一个系统调用的入口处或出口处停下,或者是执行完一条指令后停下.
      例如,调试进程可以监视被调试进程系统调用入口处的参数,接着再使用SYSCALL,监视系统调用的返回值.

    (2) ptrace系统调用号为101,则syscall(101,0,0,0,0)表示ptrace(0,0,0,0)而当request参数为0时,表示PTRACE_TRACEME.相当于Ptrace自己的进程.然而一个程序只能被ptrace一次,所以当调试的时候,ptrace(0,0,0,0)会失败返回-1.
    依此便可以生成一个反调试的脚本.

     \#include <sys/ptrace.h>int main() {if(-1 == ptrace(0, 0, 0, 0);{   printf("debugger!\n");return -1;}printf("not debugger!\n");return 0;}
    

    example:[sctf SGAME]
    img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

禁止嵌套 iframe

vim /etc/nginx/nginx.conf 在:http 中加入:server { add_header X-Frame-Options "SAMEORIGIN"; } -----------------如:------------------------------------------ -------------------------------------------- 重启: cd /usr/sbin ./nginx -s relo…

诸多注解的作用

@Configuration标明这个类是一个配置类 @ComponentScan()用于设定扫描路径,此注解只能添加一次,多个注解用数组格式 @Scope注解是 Spring IOC 容器中的一个作用域,@Scope(singleton)标明为单例对象(默认也是单例),@Scope(prototype)标明为多例对象 影响Servlet生命周期的…

最终的方案

每个人维护一个歌单,建议一周一随,直接随出来几个歌单编号,由个人直接来决定最终歌曲,已经选过的歌单会等最后选完再重新计入。(两个机房的都可以贡献歌单) 现在建立新的歌单,曾经的那个仅供参考。 规则与上次相同。征求歌单!!! 原公告地址: 《公告》 CLOI在此向其…

南沙C++信奥赛陈老师解一本通题 1950:【10NOIP普及组】接水问题

​ 【题目描述】学校里有一个水房,水房里一共装有m个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。 现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n 编号,i号同学的接水量为w。接水开始时,1 到m 号同学各占一个水龙头,并同…

如何快速上手一个新项目?

前言 最近知识星球中有小伙伴问我:如何快速上手一个新项目? 这个问题是一个公共问题,估计很多换了公司的小伙都想问这个问题。 我在工作的这些年当中,换过几次工作,接手过同事的一些项目,需要经常上手一些不同类型的新项目。 今天这篇文章跟大家一起聊聊我的一些总结和思…

Nacos服务相关

nacos是阿里开源的一款用于微服务的多服务管理工具,通过服务注册进入内部服务器可以看到注册的服务; 服务注册原理: 在微服务远程调用的过程中,包括两个角色: 服务调用者,调用其他服务的接口,服务提供者,提供接口给其他服务调用 在大型微服务项目中,服务提供者的数量会…

熵权法

熵是热力学的一个物理概念,是体系混乱度或无序度的度量,熵越大表示系统越乱(即携带的信息越少),熵越小表示系统越有序(即携带的信息越多)。 信息熵借鉴了热力学中熵的概念,香农把信源所含有的信息量称为信息熵,用于描述平均而言事件信息量的大小,所以在数学上,信息熵…

MacOS在VS code上运行Python失败,通过更改pythonPath解决

问题描述安装完成python后,默认的运行python命令是python3,而VSCode上默认命令是python 解决办法在file\preference\settings下(或使用快捷键Ctrl + ,),搜索python.pythonPath然后点击Add Item,加入 "python.pythonPath" = "python3"再修改一下调试结…