前言:一个反调试IsDebuggerPresent的CreackMe

IsDebuggerPresent函数的了解:

IsDebuggerPresent
作用
确定调用进程是否由用户模式的调试器调试。
语法
BOOL WINAPI IsDebuggerPresent(void);
参数
该函数没有参数
返回值
如果当前进程运行在调试器的上下文,返回值为非零值。
如果当前进程没有运行在调试器的上下文,返回值是零。

IsDebuggerPresent函数检测调试过程:

1、直接加载入OD,观察是否具有IsDebuggerPresent的windows api函数,来验证反调试是不是使用的是IsDebuggerPresent,发现确实存在

2、利用IsDebuggerPresent进行下断点,然后运行程序F9,然后单步走

关键的第一个api函数,PostQuitMessage,其作用是发送结束消息

然后我们继续单步走,最后来到第二个关键的api 结束进程的函数ExitProcess


IsDebuggerPresent函数防调试的绕过

1、载入OD,进行IsDebuggerPresent api函数的断点,然后用户返回到执行代码,同时也可以发现返回值为00000001,不为0,所以IsDebuggerPresent判断为调试中,就会结束进程

2、分析汇编代码可知如下,那么让下面的je跳转进行跳转就可以了,那么直接修改jmp 进行无条件跳转,再F9

3、成功绕过


IsDebuggerPresent反调试的原理:

1、重新载入OD进行分析,运行程序,断下点来到如下

7C81F424 >  64:A1 18000000  MOV EAX,DWORD PTR FS:[18]                ; 将7FFDD018地址中的值7FFDD00赋值给eax
7C81F42A 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] ; 将7FFDD30的地址的机器码7FFDE000赋值给eax
7C81F42D 0FB640 02 MOVZX EAX,BYTE PTR DS:[EAX+2] ; 将7FFDE02的第一字节机器码赋值给eax,这里的第一字节的机器码也就是01
7C81F431 C3 RETN ; 那么返回值中的eax值也就是01,判断为被调试,结束程序

2、那么也就是将eax中的值改为00000000,所以就可以绕过了

学习:反调试之IsDebuggerPresent的更多相关文章

  1. IsDebuggerPresent的反调试与反反调试

    一.调用系统的IsDebuggerPresent函数 (1)实现程序 最简单也是最基础的,Windows提供的API接口:IsDebuggerPresent(),这API实际上就是访问PEB的Bein ...

  2. WinDbg调试流程的学习及对TP反调试的探索

    基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...

  3. 学习:逆向PUSH越界/INT 68/反调试导致的程序

    自己根据shark恒老师的分析,总结一下: 一般反调试自动关闭程序利用的函数有: 1.CreateToolhelp32Snapshot 2.FindWindow 3.ExitProcess 4.Pos ...

  4. 学习:反调试之ZwQueryInformationProcess

    SetUnhandledExceptionFilter触发条件:1.当程序有异常,且没相应的处理 2.没有人进行反调试,满足这两个条件的时候,就会其中传输的参数(实则就是一个异常处理函数) 来进行处理 ...

  5. Windows 下常见的反调试方法

    稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度. ①最简单也是最基础的,Windows提供的API接口:IsDebu ...

  6. 反调试技术常用API,用来对付检测od和自动退出程序

    在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己.为了了解如何破解反调试技术 ...

  7. 基于TLS的反调试技术

    TLS(Thread Local Storage 线程局部存储) 一个进程中的每个线程在访问同一个线程局部存储时,访问到的都是独立的绑定于该线程的数据块.在PEB(进程环境块)中TLS存储槽共64个( ...

  8. PEB标记反调试方法

    PEB标记反调试方法 一丶PEB结构简介 PEB.简称进程环境快. 我们在讲DLL隐藏的时候已经说过了. 具体博客链接: https://www.cnblogs.com/iBinary/p/96018 ...

  9. 反调试手法之CreateProcess反调试

    反调试手法之CreateProcess反调试 在学习Win32 创建进程的时候.我们发现了有一个进程信息结构体. STARTUPINFO. 这个结构体可以实现反调试. 具体CreateProcess可 ...

随机推荐

  1. python爬虫初认识

    一.爬虫是什么? 如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛, 沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程 ...

  2. matlab键盘快捷键无法使用的解决办法

    打开matlab,在主页里点击 预设/preferences 左栏找 键盘/keyboard 点开键盘点击 快捷方式/shortcuts 在右边 活动设置 /Active settings 里选择 W ...

  3. [HDU6288]Tree

    题目 题解 首先读题就很成问题....英语咋办呐!!! 直接考虑有点复杂,直接分析每一条边能否被选入最终答案.对于这条边,看看他的\(size[v]\) 与 \(n-size[v]\) 是否都大于等于 ...

  4. vue--npm的使用

    npm介绍 NPM 全称 Node Package Manager,它是 JavaScript 的包管理工具, 并且是 Node.js 平台的默认包管理工具.通过NPM 可以安装.共享.分发代码,管理 ...

  5. 如何创建Azure Face API和计算机视觉Computer Vision API

    在人工智能技术飞速发展的当前,利用技术手段实现人脸识别.图片识别已经不是什么难事.目前,百度.微软等云计算厂商均推出了人脸识别和计算机视觉的API,其优势在于不需要搭建本地环境,只需要通过网络交互,就 ...

  6. 立足于运维与监控的前端框架 NoahV

    NoahV是一个致力于解决中后台前端效率问题的前端框架,立足于运维和监控的应用场景,使用当前前端最新的技术栈并结合团队在项目开发中的最佳实践从而推出的前端开发框架. NoahV提供的功能覆盖了从开发到 ...

  7. 让iphone5s 支持 flex 布局

    /* Center slide text vertically */display: -webkit-box;display: -ms-flexbox;display: -webkit-flex;di ...

  8. 自己实现LinkedList

    public class MyLinkedList<E> { private Node first; private int size; public int size(){ return ...

  9. 【深度学习】K-L 散度,JS散度,Wasserstein距离

    度量两个分布之间的差异 (一)K-L 散度 K-L 散度在信息系统中称为相对熵,可以用来量化两种概率分布 P 和 Q 之间的差异,它是非对称性的度量.在概率学和统计学上,我们经常会使用一种更简单的.近 ...

  10. 使用Java操作Elasticsearch(Elasticsearch的java api使用)

    1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...