首页 > 代码库 > 过反调试
过反调试
重所周知,有破解就必有防破解,二者本为一体
破解技术就不要我多介绍了,下面我来介绍反调试技术 也就是所谓的防破解技术
反调试技术可以简单通俗的理解为:防止OD分析软件的技术,也就是反调试技术
那么反调试技术又有几种呢? 下面我介绍几种常用反调试技术
首先声明,下面有一部分内容来源百度,若有喷子觉得恶心,请自觉删除
- 1. 最常用的便是调用windows API 那么 windows API又如何检测OD呢?每一个API的作用是什么呢
- 2. 小编在百度上搜寻了一些文章来引用
- 3. 1.1IsDebuggerPresent:探测调试器是否存在的最简单的API函数是IsDebuggerPresent。它查询进程环境块(PEB)中的IsDebugged标志。如果进程没有运行在调试器环境中,函数返回0;如果调试附加了进程,函数返回一个非零值。
- 解释:这里介绍的API是lsDebuggerPresent 他就是一个可以用来检测OD的函数,通过检测自身是否被附加,来检测OD,或者是在OD下运行也会被检测
- 5.
- 1.2CheckRemoteDebuggerPresent:CheckRemoteDebuggerPresent中的Remote并不意味着调试器必须驻留在不同的计算机上;相反,它表示调试器驻留在单独的并行进程中。 使用IsDebuggerPresent函数来检测调用进程是否在调试器下运行。
- 解释:这里介绍的是CheckRemoteDebuggerPresent,他很有实用性,不过可惜只能在XP版本使用,下面是来自网络的解释,CheckRemoteDebuggerPresent是另一个检测调试的api,只是可惜它似乎只能在winxp sp1版本以后使用。它主要是用来查询一个在winnt时就有的一个数值,其内部会调用NtQueryInformationProcess()
- 1.3NtQueryInformationProcess:这个函数是Ntdll.dll中一个原生态API,它用来提取一个给定进程的信息。它的第一个参数是进程句柄,第二个参数告诉我们它需要提取进程信息的类型,例如将该参数置为ProcessDebugPort(值为0x7),将会告诉你这个句柄标识的进程是否正在被调试。如果进程正在被调试,则返回调试端口,否则返回0。
- 9. 解释:这个API函数是属于Ntdll里面的API,它主要可以提取进程信息来检测OD,如果OD信息全部被替换,则此API 检测不到
- 1.4GetLastError:编写应用程序时,经常需要涉及到错误处理问题。许多函数调用只用TRUE和FALSE来表明函数的运行结果。一旦出现错误,MSDN中往往会指出请用GetLastError()函数来获得错误原因。恶意代码可以使用异常来破坏或者探测调试器。调试器捕获异常后,并不会立即将处理权返回被调试进程处理,大多数利用异常的反调试技术往往据此来检测调试器。多数调试器默认的设置是捕获异常后不将异常传递给应用程序。如果调试器不能将异常结果正确返回到被调试进程,那么这种异常失效可以被进程内部的异常处理机制探测。
解释:这是利用OD处理异常信息检测的API,他可以通过异常来检测到OD - 1.5对于OutputDebugString函数,它的作用是在调试器中显示一个字符串,同时它也可以用来探测调试器的存在。使用SetLastError函数,将当前的错误码设置为一个任意值。如果进程没有被调试器附加,调用OutputDebugString函数会失败,错误码会重新设置,因此GetLastError获取的错误码应该不是我们设置的任意值。但如果进程被调试器附加,调用OutputDebugString函数会成功,这时GetLastError获取的错误码应该没改变。
- 这个API名字叫OutputDebugString,他这个函数意思是 程序如果调用了这个API,就会在OD中显示一条字符串(由于API而生成的,非程序本身),然后用通过SetLastError函数,用来获取返回值(上文所说的错误值),如果被OD调试 则返回的便是真,没有被调试则为假
- 1.6对于DeleteFiber函数,如果给它传递一个无效的参数的话会抛出ERROR_INVALID_PARAMETER异常。如果进程正在被调试的话,异常会被调试器捕获。所以,同样可以通过验证LastError值来检测调试器的存在。如代码所示,0x57就是指ERROR_INVALID_PARAMETER。
- 解释:这个API名为DeleteFiber,他作用是抛出一个异常,众所周知,OD会自动处理异常(除非你手动设置),这时候,他便可以通过LastError 返回值来检测OD
那么关键来了,我们要如何干掉这些检测呢???
- 用工具(推荐,简单快捷)
- 可以用类似XUTER 冰刃等软件,来挂钩此函数,至于如何挂钩,找到相关函数,如何右键-恢复
- 2.通过写源码 来HOOK此函数
- 这里就不过多介绍了,例子百度有一大堆
- 过API检测就这么简单,不过想要找到是哪个API 还是需要花费一番功夫的
- 常用的检测OD方法还有几种
- 1. 3.2查找窗体信息
FindWindow函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串。 - 这个比较简单过,只需要更改OD的窗口名称和类名,可以用精易助手编写
- 10. 5.判断父进程是否是explorer.exe
- 11. 这个进程是系统主要进程,一般进程的父进程都是这个
- 12. 如果用OD运行的话会改变父进程从而检测到软件被调试,过此方法很简单,OD附加即可
- 判断是否具有SeDebugPrivilege权限
默认情况下进程是没有SeDebugPrivilege权限的,但是当进程通过调试器启动时,由于调试器本身启动了SeDebugPrivilege权限,当调试进程被加载时SeDebugPrivilege也就被继承了。所以我们可以检测进程的SeDebugPrivilege权限来间接判断是否存在调试器,而对SeDebugPrivilege权限的判断可以用能否打开csrss.exe进程来判断。 - 14. SeDebugPrivilege权限可以理解为系统最高权限,相当与在美国和奥巴马一般,一般进程都获取不了这个权限,除非一些病毒用非法手段获取权限,OD运行时会获取此权限,从而他的子进程也会附带这个权限,所以可以通过检测是否有次权限来判断是否被调试,过检测方法很简单,一样是附加
- 15. 15.时钟检测
- 16. 这个很容易理解,就是在时钟里面添加检测代码,循环检测
- 17. 解决方法
- 18. 推荐工具 XUTER
- 右键-查看-查看进程定时器-移除
- 下面再来讲讲关于一些反调试进程的反调试
- 有些进程调用了一些检测模块
- 检测到OD会弹出
- 警告! 程序初始化失败!
- 请关闭 调试工具 再试!
- 软件破解逆向QQ群:xxxxxxx
- 首先声明:下列说明我已经调试过,所以无法截图,蓝屏太容易触发
- 然后迅速蓝屏,对于这种软件,我们应该怎么办?
- 首先第一个想到的方法便是附加,但是我们一打开OD他就马上检测,怎么办?,这样就说明他要么是时钟检测,要么就是循环检测,我们先看看时钟检测,用XUTER,查看定时器,哦 结果发现蓝屏,那怎么办呢? 下面教大家一招妙招
- 依然用到的是XUTER
- 首先暂停该程序运行,然后便发现程序卡死了,然后再结束定时器,再点下方的恢复进程运行
- 好了,这下他的检测被我们解决了,我们就直接附加吧
- 结果发现,他隐藏了进程,没关系,我们用拖拽补丁,结果显示无法获取窗口,附加失败,那怎么办呢? 出现这种情况无疑就是程序调用了驱动,导致没有权限附加
- 这样我们依然用到XUter
- 我们跳到本工具配置,然后勾选禁止驱动加载,然后再运行进程,重复上面操作,然后打开OD附加
- 就发现成功了,这方法是我专门对付那些有驱动保护的,如果软件有检测驱动是否加载成功,可以用OD去掉
- 这就是我总结的一些方法,很简单很适用,至少我对于那些检测 我都有应付的办法
- 由于是自己写的 对于API知识不是很到位,所以难免会有差错,发现差错可以@我及时纠正,现在时间试:2016年10月23日03:55:23 我也要睡觉了,虽然是星期六 但还是要睡觉的
- 下面有时间再完善一下吧,谢谢大家的观看
- 吾爱破解论坛BY:Very-good
过反调试
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。