反调试第一.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
反调试第一

反调试第一 藏好自己的 OllyDbg2008-09-12 13:07OllyDbg 的检测方法多如繁星,即使悉数了解并掌握破解技巧也需要耗费一定的时间。 因此可以制作一个 DLL(比如写一个插件) 借助 API Hook 来完成自动隐藏工作。 这篇教程中我不打算介绍如何进行 Hook API,Google 会比我讲的详细 :) 我们的 DLL 面临着这些问题: 1) 躲避字符串解析漏洞 某天你拿到一个程序载入运行,OllyDbg 连续三次非法后伤逝…… 基本可以估计这个程序钻了这个漏洞。OllyDbg 使用了格式化字符输出调试信息, 如果调试信息里带有格式控制字符譬如“%s%s%s”,在字符输出之前就会死于非命。 利用代码: @pushsz %s%s%s%s%s call OutputDebugStringA 要避免也很简单,只要钩住这个函数过滤掉对它的调用即可。想做的锦上添花可重定向输出到一个watch窗口中。 2) GetProcessHeap 后门 自从某人从 ASProtect 早期版本得到启发,发现 M$ 的此内存初值后门,这个漏洞也(将会)有不少人用。 利用代码: call GetProcessHeap mov eax, [eax+0Ch] test eax, 40h je no_debugger 我很抱歉,关于原因的事情你得问微软去了,谁叫你用 Windows 呢 ;-) 解决它要彻底些,不能用 Hook ,因为不一定非通过这个函数读取 Heap,PEB 也可以。 看看 GetProcessHeap: 7C80AA49 64:A1 mov eax, fs:[18] 7C80AA4F 8B40 30 mov eax, [eax+30] 7C80AA52 8B40 18 mov eax, [eax+18] 7C80AA55 C3 retn 剩下的不用多费唇舌了吧。 3) 卑鄙的 native API native api都是这种形式的: mov eax, ServiceId mov edx, xxxxxxxx call [edx] retn xx 2k下大同小异: mov eax, ServiceId lea edx, [esp+4] int 2e retn xx 下面这几个都是利用的WinNT的native API来检查debugger的,所以不能运行在Win9x/ME上。 1、ZwQuerySystemInformation 用这个可以检查系统调试器是否存在,对SoftICE似乎无用,估计只对微软自家的WinDBG有效,有条件的可测试一下。 2、ZwSetInformationThread 用这个函数可以将某个线程的调试端口设为0,使得Win32调试器无法再收到该线程的调试事件,使调试器无法再调试该线程。这个主要是针对VC++这样的ring3调试器的。 3、ZwQueryInformationProcess 这个可以检查某个进程是否正被ring3调试器所调试。 看雪精华里 blowfish 详细介绍过 ZwSetInformationThread 等 API,最好统统 Hook。 4) MeltICE 如果你用监视器,就像 RegMon 等,需要照顾一下这里。 如果发现 CreateFileA/W 中的文件名开头是 “\\.\ ”决不能手软,截留返回0。 这些通常是要进行 MeltICE 探测的。不过有些注册程序要读取硬盘序列号也会打开类似上面的文件名, 所以还是建议你准备一份常用 MeltICE 名表,对比拦截,比较稳妥。 5) IsDebuggerPresent 这个函数你一定用过。 7C812E03 64:A1 mov eax, fs:[18] 7C812E09 8B40 30 mov eax, [eax+30] 7C812E0C 0FB640 02 movzx eax, byte ptr [eax+2] 7C812E10 C3 retn 修改掉标志就行了。 6) 进程检测 查阅一下 Proce

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档