首页 > 其他分享 >花指令与anti-debug

花指令与anti-debug

时间:2024-10-11 20:21:25浏览次数:1  
标签:request pid 进程 指令 anti ptrace debug 调试 PTRACE

花指令

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

标签:request,pid,进程,指令,anti,ptrace,debug,调试,PTRACE
From: https://www.cnblogs.com/Un1corn/p/18401033

相关文章

  • 深入解析Semantic Kernel的编码误区:如何让本地模型“不再犯傻”
           SemanticKernel在AI领域的应用越来越广泛。然而,在使用SemanticKernel时,如果不注意一些细节问题,可能会导致你的模型表现异常,甚至出现“胡说八道”的情况。今天,我将分享一个关于使用SemanticKernel的小细节,这个问题曾让我一度陷入困惑,幸好最终找到了问题的根源......
  • 使用AVX2指令集加速推荐系统MMR层余弦相似度计算
    原文:blog.fanscore.cn/a/62/1.背景前一段时间公司上线了一套Go实现的推荐系统,上线后发现MMR层虽然只有纯计算但耗时十分离谱,通过pprof定位问题所在之后进行了优化,虽然降低了非常多但是我们认为其中还有优化空间。可以看到日常平均耗时126ms,P95360ms。MMR层主要耗时集中在了......
  • 【Linux探索学习】第三弹——Linux的基础指令(下)——开启新篇章的大门
    Linux基础指令(上):【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇-CSDN博客Linux基础指令(中):【Linux探索学习】第二弹——Linux的基础指令(中)——夯实基础第二篇-CSDN博客前言:在前面我们已经讲了有十几个Linux的基础指令及相关的知识了,今天我们再补充......
  • Debug GEM5
    Debugginggem5原英文版在https://www.gem5.org/documentation/learning_gem5/part2/debuggingUsingdebugflags调试标志用于debug。通常在gem5,不能使用std::cout,而应借助调试标志进行输出。gem5通过可选的调试标志(--debug-flag)提供printf风格的跟踪/调试支持。用--debug......
  • 【AIGC】通过OpenAi Canvas修改论文(附40条论文优化指令)
    目录1、用ChatGPT优化论文大纲和逻辑2、用ChatGPT充实论文内容3、用ChatGPT寻找案例和数据4、用ChatGPT检查语法和字词错误5、如何直接使用ChatGPT4o、o1、OpenAICanvas6、OpenAICanvas增强了啥?7、编程功能增强在刚开始撰写学术论文时,很多小伙伴感觉无从下手,使用......
  • git_常用指令合集
    1.忽略已经提交至远程分支文件1.1忽略文件:Git工作区的根目录下创建一个特殊的 .gitignore 文件具体规则详见:https://github.com/github/gitignore1.2 删除远程分支文件格式:gitrm--cached 路径报错:fatal:notremoving'.svn'recursivelywithout-r加参数-r......
  • 逆向 Virustotal 搜索接口 X-VT-Anti-Abuse-Header
    搜索示例搜索123,网页地址为:https://www.virustotal.com/gui/search/123/comments请求接口GET/ui/search?limit=20&relationships%5Bcomment%5D=author%2Citem&query=123HTTP/1.1Accept-Encoding:gzip,deflate,br,zstdAccept-Ianguage:en-US,en;q=0.9,es;q=0.8Accep......
  • 分布式理论-拜占庭将军问题(The Byzantine Generals Problem)
    文章目录模拟拜占庭问题苏秦的困境两忠一判难题口信消息型拜占庭问题之解两轮方案原则两轮方案实现签名消息型拜占庭问题之解苏秦问题和分布式的关系分布式环境下常见容错算法有哪些本文借助战国苏秦合纵六国灭秦国的故事探讨拜占庭将军问题,充分展示拜占庭将军问题......
  • 今天终于解决lazarus debug模式为GDB时中文变量显示出错的问题
    之前已修复fpdebug中文变量的Bug,但GDB还存在问题(提示:Invalidcharacterxxxxinexpression)修复步骤:打开lazarus/components/lazdebuggergdbmi/gdbmidebugger.pp,按红色代码修改。在TGDBMIExceptionInfo=record后添加functionischinese(s:string):string(1790行):TGD......
  • MySQL常用指令介绍及使用
    ​简述MySQL:MySQL属于关系型数据库,即可以数据按照类别进行存储,每个类别的数据放在一个被创建的表中,表与表之间可以相互关联。MySQL的优势:开源免费:MySQL是一个开源数据库管理系统。可靠性:具备数据完整性和安全性。丰富的功能:支持存储过程、触发器、视图和全文搜索等功能,满足......