关键词:
重所周知,有破解就必有防破解,二者本为一体
破解技术就不要我多介绍了,下面我来介绍反调试技术 也就是所谓的防破解技术
反调试技术可以简单通俗的理解为:防止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
反调试-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静... 查看详情