过反调试

zhuh102 zhuh102     2022-08-15     158

关键词:

重所周知,有破解就必有防破解,二者本为一体

破解技术就不要我多介绍了,下面我来介绍反调试技术 也就是所谓的防破解技术

反调试技术可以简单通俗的理解为:防止OD分析软件的技术,也就是反调试技术

那么反调试技术又有几种呢? 下面我介绍几种常用反调试技术

首先声明,下面有一部分内容来源百度,若有喷子觉得恶心,请自觉删除

  1. 1.       最常用的便是调用windows API 那么 windows API又如何检测OD呢?每一个API的作用是什么呢
  2. 2.       小编在百度上搜寻了一些文章来引用
  3. 3.        1.1IsDebuggerPresent探测调试器是否存在的最简单的API函数是IsDebuggerPresent。它查询进程环境块(PEB)中的IsDebugged标志。如果进程没有运行在调试器环境中,函数返回0;如果调试附加了进程,函数返回一个非零值。
  4. 解释:这里介绍的API是lsDebuggerPresent 他就是一个可以用来检测OD的函数,通过检测自身是否被附加,来检测OD,或者是在OD下运行也会被检测
  5. 5.        
  6. 1.2CheckRemoteDebuggerPresentCheckRemoteDebuggerPresent中的Remote并不意味着调试器必须驻留在不同的计算机上;相反,它表示调试器驻留在单独的并行进程中。 使用IsDebuggerPresent函数来检测调用进程是否在调试器下运行。
  7. 解释:这里介绍的是CheckRemoteDebuggerPresent,他很有实用性,不过可惜只能在XP版本使用,下面是来自网络的解释,CheckRemoteDebuggerPresent是另一个检测调试的api,只是可惜它似乎只能在winxp sp1版本以后使用。它主要是用来查询一个在winnt时就有的一个数值,其内部会调用NtQueryInformationProcess()
  8. 1.3NtQueryInformationProcess这个函数是Ntdll.dll中一个原生态API,它用来提取一个给定进程的信息。它的第一个参数是进程句柄,第二个参数告诉我们它需要提取进程信息的类型,例如将该参数置为ProcessDebugPort(值为0x7),将会告诉你这个句柄标识的进程是否正在被调试。如果进程正在被调试,则返回调试端口,否则返回0。
  9. 9.       解释:这个API函数是属于Ntdll里面的API,它主要可以提取进程信息来检测OD,如果OD信息全部被替换,则此API 检测不到
  10. 1.4GetLastError编写应用程序时,经常需要涉及到错误处理问题。许多函数调用只用TRUE和FALSE来表明函数的运行结果。一旦出现错误,MSDN中往往会指出请用GetLastError()函数来获得错误原因。恶意代码可以使用异常来破坏或者探测调试器。调试器捕获异常后,并不会立即将处理权返回被调试进程处理,大多数利用异常的反调试技术往往据此来检测调试器。多数调试器默认的设置是捕获异常后不将异常传递给应用程序。如果调试器不能将异常结果正确返回到被调试进程,那么这种异常失效可以被进程内部的异常处理机制探测。
    解释:这是利用OD处理异常信息检测的API,他可以通过异常来检测到OD
  11. 1.5对于OutputDebugString函数,它的作用是在调试器中显示一个字符串,同时它也可以用来探测调试器的存在。使用SetLastError函数,将当前的错误码设置为一个任意值。如果进程没有被调试器附加,调用OutputDebugString函数会失败,错误码会重新设置,因此GetLastError获取的错误码应该不是我们设置的任意值。但如果进程被调试器附加,调用OutputDebugString函数会成功,这时GetLastError获取的错误码应该没改变。
  12. 这个API名字叫OutputDebugString,他这个函数意思是  程序如果调用了这个API,就会在OD中显示一条字符串(由于API而生成的,非程序本身),然后用通过SetLastError函数,用来获取返回值(上文所说的错误值),如果被OD调试 则返回的便是真,没有被调试则为假
  13. 1.6对于DeleteFiber函数,如果给它传递一个无效的参数的话会抛出ERROR_INVALID_PARAMETER异常。如果进程正在被调试的话,异常会被调试器捕获。所以,同样可以通过验证LastError值来检测调试器的存在。如代码所示,0x57就是指ERROR_INVALID_PARAMETER。
  14. 解释:这个API名为DeleteFiber,他作用是抛出一个异常,众所周知,OD会自动处理异常(除非你手动设置),这时候,他便可以通过LastError  返回值来检测OD

 

 

那么关键来了,我们要如何干掉这些检测呢???

  1. 用工具(推荐,简单快捷)
  2. 可以用类似XUTER 冰刃等软件,来挂钩此函数,至于如何挂钩,找到相关函数,如何右键-恢复
  3. 2.通过写源码 来HOOK此函数
  4. 这里就不过多介绍了,例子百度有一大堆
  5. 过API检测就这么简单,不过想要找到是哪个API  还是需要花费一番功夫的
  6. 常用的检测OD方法还有几种
  7. 1. 3.2查找窗体信息
    FindWindow函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串。
  8. 这个比较简单过,只需要更改OD的窗口名称和类名,可以用精易助手编写
  9. 10.              5.判断父进程是否是explorer.exe
  10. 11.             这个进程是系统主要进程,一般进程的父进程都是这个
  11. 12.             如果用OD运行的话会改变父进程从而检测到软件被调试,过此方法很简单,OD附加即可
  12. 判断是否具有SeDebugPrivilege权限
    默认情况下进程是没有SeDebugPrivilege权限的,但是当进程通过调试器启动时,由于调试器本身启动了SeDebugPrivilege权限,当调试进程被加载时SeDebugPrivilege也就被继承了。所以我们可以检测进程的SeDebugPrivilege权限来间接判断是否存在调试器,而对SeDebugPrivilege权限的判断可以用能否打开csrss.exe进程来判断。
  13. 14.             SeDebugPrivilege权限可以理解为系统最高权限,相当与在美国和奥巴马一般,一般进程都获取不了这个权限,除非一些病毒用非法手段获取权限,OD运行时会获取此权限,从而他的子进程也会附带这个权限,所以可以通过检测是否有次权限来判断是否被调试,过检测方法很简单,一样是附加
  14. 15.             15.时钟检测
  15. 16.             这个很容易理解,就是在时钟里面添加检测代码,循环检测
  16. 17.             解决方法
  17. 18.             推荐工具 XUTER
  18. 右键-查看-查看进程定时器-移除
  19. 下面再来讲讲关于一些反调试进程的反调试
  20. 有些进程调用了一些检测模块
  21. 检测到OD会弹出
  22.           警告!   程序初始化失败!
  23.  
  24.            请关闭 调试工具 再试!
  25.  
  26.                软件破解逆向QQ群:xxxxxxx
  27. 首先声明:下列说明我已经调试过,所以无法截图,蓝屏太容易触发
  28. 然后迅速蓝屏,对于这种软件,我们应该怎么办?
  29. 首先第一个想到的方法便是附加,但是我们一打开OD他就马上检测,怎么办?,这样就说明他要么是时钟检测,要么就是循环检测,我们先看看时钟检测,用XUTER,查看定时器,哦  结果发现蓝屏,那怎么办呢?  下面教大家一招妙招
  30. 依然用到的是XUTER
  31.  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    1. 首先暂停该程序运行,然后便发现程序卡死了,然后再结束定时器,再点下方的恢复进程运行
    2. 好了,这下他的检测被我们解决了,我们就直接附加吧
    3. 结果发现,他隐藏了进程,没关系,我们用拖拽补丁,结果显示无法获取窗口,附加失败,那怎么办呢? 出现这种情况无疑就是程序调用了驱动,导致没有权限附加
    4. 这样我们依然用到XUter
    5. 我们跳到本工具配置,然后勾选禁止驱动加载,然后再运行进程,重复上面操作,然后打开OD附加
    6. 就发现成功了,这方法是我专门对付那些有驱动保护的,如果软件有检测驱动是否加载成功,可以用OD去掉
    7. 这就是我总结的一些方法,很简单很适用,至少我对于那些检测 我都有应付的办法
    8. 由于是自己写的  对于API知识不是很到位,所以难免会有差错,发现差错可以@我及时纠正,现在时间试:2016年10月23日03:55:23  我也要睡觉了,虽然是星期六 但还是要睡觉的
    9. 下面有时间再完善一下吧,谢谢大家的观看
    10. 吾爱破解论坛BY:Very-good

反调试-checkremotedebuggerpresent

和IsDebuggerPresent差不多简单的反调试技术 查看详情

反调试-isdebuggerpresent

目前这个是我知道的最简单的反调试方法了 查看详情

反调试

反调试IsDebuggerPresent()__readgsqword(0x60)得到指向PEB64的指针,pPeb->BeingDebugged.__readfsdword(0x30)CheckRemoteDebuggerPresent(GetCurrentProcess(),&bIsDbgPresent)BOOL HeapFlags(),64位下,得到指向PEB的地址加 查看详情

elf反调试初探

ELF反调试初探http://www.freebuf.com/sectool/83509.html ELF(ExecutableandLinkableFormat)是Unix及类Unix系统下可执行文件、共享库等二进制文件标准格式。为了提高动态分析的难度,我们往往需要对ELF文件增加反调试措施。本文便对相关技术进... 查看详情

.NET:如何隔离反调试类库?

】.NET:如何隔离反调试类库?【英文标题】:.NET:Howtoisolateananti-debuggingclasslibrary?【发布时间】:2022-01-2212:28:51【问题描述】:我构建了一个.NET类库并使用混淆器通过反调试对其进行混淆。我使用我的混淆类库构建了一个测试项... 查看详情

javascript奇淫技巧:反调试

JavaScript奇淫技巧:反调试本文,将分享几种JS代码反调试技巧,目标是:实现防止他人调试、动态分析自己的代码。检测调试,方法一:用console.log检测代码:varc=newRegExp("1");c.toString=function()alert("检测到调试")console.log(c);原理:... 查看详情

《逆向工程核心原理》学习笔记:反调试技术(代码片段)

目录前言一、反调试技术概况二、静态反调试技术1、PEB2、NtQueryInformationProcess()(1)ProcessDebugPort(0x7)(2)ProcessDebugObjectHandle(0x1E)(3)ProcessDebugFlags(0x1F)(4)例子(5)破解之法3、NtQuerySystemIn... 查看详情

一种基于tls的高级反调试技术(代码片段)

...越引起人们的重视。在反盗版技术中,起最大作用的当属反调试技术。然而传统的反调试技术都存在一个弱点:他们都在程序真正开始执行之后才采取反调试手段。实际上在反调试代码被执行前,调试器有大量的时间来影响程序... 查看详情

java层反调试

...调式,在build.prop(boot.img),ro.debugable=1。一:实例演示java层反调试以“百度加固”为例。1.将样本拖入jdax-gui中,进行反编译,来到加固程序的onCreate里,如下图所示。2 查看详情

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

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

《逆向工程核心原理》学习笔记:反调试技术(代码片段)

目录前言一、反调试技术概况二、静态反调试技术1、PEB2、NtQueryInformationProcess()(1)ProcessDebugPort(0x7)(2)ProcessDebugObjectHandle(0x1E)(3)ProcessDebugFlags(0x1F)(4)例子 查看详情

《逆向工程核心原理》学习笔记:反调试技术(代码片段)

目录前言一、反调试技术概况二、静态反调试技术1、PEB2、NtQueryInformationProcess()(1)ProcessDebugPort(0x7)(2)ProcessDebugObjectHandle(0x1E)(3)ProcessDebugFlags(0x1F)(4)例子 查看详情

ios逆向笔记之反调试以及反反调试和反反反调试ptrace篇

参考技术A1.ptrace(processtrace进程跟踪)为了方便软件的开发和调试,UNIX早期版本就提供了一种对运行进程进行跟踪和控制的手段,那就是系统调用ptrace.通过ptrace可以实现对另一个进程实现调试和跟踪.同时,ptrace提供了一个非常有用的... 查看详情

c++反调试(基于seh的setunhandledexceptionfilter)

终于!终于把静态反调试串了一遍,虽然没有包含全部但是也对反调试的轮廓有了初步的认识。但是这一切才刚刚开始,翻过一座山(坑),还有另一座山(坑)在等着你?刚发现csdn还有个发表情的功能,这就是传说中的彩蛋吗... 查看详情

frida反调试

...某app时,想用frida进行hook分析其执行流程,遇到了frida的反调试。这里记录一下出现问题的情况和反调试的实现.Android8frida12.11.18windows10使用frida-U注入app结果如下这里有两个com.shark.tracerpidapp名称的进程我们直接进入adb查看进程可... 查看详情

javascript加密代码反调试

JavaScript奇技淫巧:加密JS代码反调试JS代码混淆加密,已被很多人使用,因为它真的很有用、很实用,可以用于保护代码、防护分析、复制、盗用,还可以用于小游戏过审、APP加固等方面。混淆加密后的JS代码,可能被他人分析... 查看详情

javascript加密代码反调试

JavaScript奇技淫巧:加密JS代码反调试JS代码混淆加密,已被很多人使用,因为它真的很有用、很实用,可以用于保护代码、防护分析、复制、盗用,还可以用于小游戏过审、APP加固等方面。混淆加密后的JS代码,可能被他人分析... 查看详情

逆向分析反调试程序

...行下正常2.打密码密码错误3.用OD调试发现报异常说明做了反调试(OD不要用插件不然他会反反调试看不到)4.(这里要用到win7了因为win10报异常不知道在哪里)win10效果win7效果可以看出异常地址在哪里5.知道异常地址在哪了用ida静... 查看详情