- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不太了解如何解决IsDebuggerPresent。我想我应该找到用于调试的寄存器,然后将其设置为0以欺骗IsDebuggerPresent,但是我不知道该怎么做。我曾尝试在Google周围搜索,甚至尝试了一些解决方案,但对我而言确实不起作用。有人可以向我解释这应该如何工作以及如何绕过它吗?
最佳答案
有很多方法可以做到这一点。如您所说,可以修补程序的线程块。这是一个教程,介绍如何通过简单地修补此函数使其始终返回0来解决IsDebuggerPresent。
1)找到IsDebuggerPresent
在我的情况下,它位于7664EFF7,仅包含三个指令+一个RET。它读取线程块(地址为FS:18),然后找到显示“我正在调试”的字节并返回它。返回值存储在EAX中(与大多数WINAPI函数一样)。如果我修改函数,以便最后它的EAX = 0,那么我将成功绕过IsDebuggerPresent。
2)打补丁
现在最简单的方法是简单地使函数先执行MOV EAX, 0
指令,然后执行RETN
:
请注意,我还用NOP填充了该函数的其余部分,以避免更改其大小。可能没有必要,您也可以只执行MOV EAX, 0
然后执行RETN
。
您还应该知道,修改仅对程序的一次运行有效。重新启动它时,它将使用原始功能加载kernel32.dll(位于IsDebuggerPresent所在的位置)的新副本,并且您将不得不再次应用该修补程序。如果要将补丁永久化,则需要修改启动二进制文件并修改/删除对此函数的调用。但是在您这样做之前,您还需要确保二进制文件不会检查自身是否有修改。
关于reverse-engineering - 如何通过OllyDbg绕过IsDebuggerPresent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330147/
我不想让我的程序被调试。我有第二个线程反复检查是否附加了调试器: while(1){ BOOL isDebugged = IsDebuggerPresent(); if(isDebug
我在 ollydbg 中找到了如何绕过它的指南: see here 但是如何为 x64 应用程序执行此操作? 我发现了以下内容: 我必须如何操作它才不会让它检测到调试器? 最佳答案 您可以按照指南中描
我确实找到了这段代码,但在调试时它没有返回 true: [DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] in
这与 How to install a DebugBreak handler? 有关和 How to get a declaration for DebugBreak without includin
我是一名优秀的程序员,十分优秀!