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

但是这个异常处理函数如果被用来检测是否有人为进行反调试的时候,这个就可以用来当作反调试

1、载入OD,给UnhandledExceptionFilter下断点,因为UnhandledExceptionFilter里面又调用了ZwQueryInformationProcess进行反调试检测

2、可以发现ZwQueryInformationProcess传入的参数为如下

3、跟随缓冲区的数据为如下

4、F8单步步过,发现缓冲区保存的值已经发生了改变,当这个值不是为00000000的时候那么被判断为有人为的在进行调试

然后直接被结束进程

5、那么如果我们把缓冲区的值置为0看下,已经知道了接下来会进行的事情SetUnhandledExceptionFilter触发条件,有异常,没人处理,没人调试,所以肯定触发SetUnhandledExceptionFilter中传入的处理参数,那么给这个处理函数也下个断点

6、下完之后,重复如上操作,然后缓冲区的值置为0,就被断到如下地址

7、F8,来到关键跳,来到这里就已经代表了,此时是正常运行,并且把输入的值进行正常的判断,如果这个跳转跳了那么就是输入错误,没跳就是输入正确,那么将ZF置1进行不跳转,发现成功

总结:程序的作者先是故意触发异常,让UnhandledExceptionFilter进行处理,然后在其中调用了ZwQueryInformationProcess进行反调试的检测,如果发现没有人进行反调试,并且当程序有异常,且没相应的处理 ,就会将SetUnhandledExceptionFilter中处理异常的函数进行处理,而这个异常的函数处理也就是账号密码的验证

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

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

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

  2. 学习:反调试之IsDebuggerPresent

    前言:一个反调试IsDebuggerPresent的CreackMe IsDebuggerPresent函数的了解: IsDebuggerPresent 作用 确定调用进程是否由用户模式的调试器调试. ...

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

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

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

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

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

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

  6. Delphi 19种反调试检测法

    //使用IsDebuggerPresent这个API来检测是否被调试function FD_IsDebuggerPresent(): Boolean;beginif IsDebuggerPresent ...

  7. Win7 x86内核调试与TP反调试的研究

    参考  这两天对某P双机调试的学习及成果 ,非常好的一篇分析贴. 本文在Win7 x86下的分析,在虚拟机中以/DEBUG模式启动TP游戏,系统会自动重启. 0x01 内核调试全局变量  根据软件调试 ...

  8. Windows 反调试技术——OpenProcess 权限过滤 - ObRegisterCallback

    转载: https://blog.xpnsec.com/anti-debug-openprocess/ 看雪翻译:https://bbs.pediy.com/thread-223857.htm 本周我 ...

  9. C/C++ 程序反调试的方法

    C/C++ 要实现程序反调试有多种方法,BeingDebugged,NtGlobalFlag,ProcessHeap,CheckRemoteDebuggerPresent,STARTUPINFO,Is ...

随机推荐

  1. vue项目中常见问题及解决方案

    webpack项目中自动引入全局scss变量文件 假设我们有一个公共的scss变量文件variables.scss /*存放所有全局变量*/ $card-title:#C7D200; //首页 卡片标 ...

  2. babel速览

    babel babel初衷 在es6出现之后,由于此版本的巨大改变,给人们带来了很多革命性的技术支持,但是当时很多浏览器对es6支持有限,babel就是为了达到写最新的语法,可以在任意浏览器运行而出现 ...

  3. Python Dataframe 分组排序和 Modin

    Python Dataframe 分组排序和 Modin 1.按照其中一列进行排序 在dataframe中,按照其中的一列排序:比如q值倒排 (1)rank方法 data['new_rank'] = ...

  4. guava(四)区间Ranges

    一.构建区间 (a..b) open(C, C) [a..b] closed(C, C) [a..b) closedOpen(C, C) (a..b] openClosed(C, C) (a..+∞) ...

  5. Oracle数据库的关键系统服务整理

    在Windows 操作系统下安装Oracle 9i时会安装很多服务——并且其中一些配置为在Windows 启动时启动.在Oracle 运行在Windows 下时,有些服务可能我们并不总是需要但又害怕停 ...

  6. 小小见解之python循环依赖

    a.py from b import b print '---------this is module a.py----------' def a(): print "hello, a&qu ...

  7. vuex 源码分析(五) action 详解

    action类似于mutation,不同的是Action提交的是mutation,而不是直接变更状态,而且action里可以包含任意异步操作,每个mutation的参数1是一个对象,可以包含如下六个属 ...

  8. CodeForce 176C Playing with Superglue

    Two players play a game. The game is played on a rectangular board with n × m squares. At the beginn ...

  9. nginx的6种负载均衡策略

    在服务器集群中,Nginx起到一个反向代理服务器的作用.为了避免单独一个服务器压力过大导致服务器奔溃,就需要将不同用户的请求转发给不同给不同的服务器,保证集群中的每一台服务器都能正常运作,这种机制就叫 ...

  10. vue+django分离开发的思想和跨域问题的解决

    一.介绍 在前后端分离的开发过程中,会涉及到跨域的问题,比如本次个人使用的Django+vue的框架,在vue对Django进行响应,Django再将响应的数据返回给vue,vue在进行渲染,如果不设 ...