如何使用 OllyDbg 绕过 IsDebuggerPresent?

2024-06-03

我真的不明白如何绕过 IsDebuggerPresent。我想我应该找到用于调试的寄存器,然后将其设置为 0 以欺骗 IsDebuggerPresent,但我不知道该怎么做。我尝试在谷歌上搜索,甚至尝试了一些解决方案,但它对我来说并没有真正起作用。有人可以向我解释一下这应该如何工作以及如何绕过它吗?


有很多方法可以做到这一点。正如您所说,可以修补程序的线程块。这是一个教程,介绍如何通过简单地修补此函数使其始终返回 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 所在位置)的新副本,您将必须再次应用补丁。如果你想让补丁永久存在,你需要修改启动二进制文件并修改/删除call到这个函数。但在执行此操作之前,您还需要确保二进制文件不会检查自身是否有修改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 OllyDbg 绕过 IsDebuggerPresent? 的相关文章

  • 保护Python代码免遭逆向工程

    我正在用 python 2 7 创建一个程序 我想保护它免受逆向工程的影响 我编译它使用cx freeze 提供基本的安全性 混淆和反调试 如何添加更多保护措施 例如混淆 加壳 反调试 加密代码识别VM 我想也许可以加密有效负载并在运行时解
  • 使用两种不同的混淆器处理相同的.NET程序集[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 使用两种不同的混淆器处理相同的 NET 程序集 将一个程序集的输出作为输入提供给另一个程序集 会增加使反编译变得不可能的机会吗 Thanks 反编译从来都不是不可能的 不过 当前的工具可能
  • Delphi反编译[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 与使用其他编程语言 编译器构建的其他可执行文件相比 为什么反编译 delphi exe 如此容易 有一些东西可以帮助逆向delphi程序 您可以获得完整的表单数据 包括事件处理程
  • 如何为 ollydbg 2.x.x 设置插件? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我从其官方网站下载了最新的ollydbg 2 x版本以及tuts4you的一些插件 但如何启用 安装插件呢 要么将插件 dll 放入专用目录中 例如P
  • 哪个 Linux 进程处理系统调用?

    这可能是一个愚蠢的问题 但我正在使用 gdb 调试一个二进制文件 试图对其进行 逆向工程 并到达一条指令 该指令进行系统调用 之后出现我想要逆向工程的效果 我假设另一个进程正在接管并完成这项工作 所以我想知道是否可以调试使用 gdb 处理系
  • 是否可以用已编译的二进制文件中的虚拟函数替换特定函数的每个实例?

    是否可以改变现有 x86 64 二进制文件引用和 或调用某个特定函数的方式 具体来说 是否有可能改变二进制文件而不发生任何事情 类似于nop 在该函数通常会执行的时间 我意识到有强大的专业工具 即反编译器 反汇编器 可以完成此类任务 但我真
  • 解析没有 .proto 文件的 Protocol-Buffers

    作为安全项目的一部分 我正在对 Android 应用程序进行逆向工程 我的第一步是发现应用程序和服务器之间交换的协议 我发现正在使用的协议是协议缓冲区 鉴于 protobuf 的性质 需要原始 proto 文件才能反序列化 protobuf
  • 在剥离的 ELF 可执行文件中设置断点

    我有一个 ELF 32 位动态链接 剥离文件 我希望对其进行调试 尝试在某个地址设置断点时 出现一条消息 提示符号表未加载 我的问题是 当你说 ELF 文件是stripped究竟发生了什么 如何剥离 ELF 文件 是否可以以某种方式重建符号
  • 如何将DLL反转为C++代码?

    我知道不可能将 dll 反转为 C 代码 因此我想从中收集尽可能多的详细信息 这不是我的dll 所以我当然没有源代码 我应该使用哪个程序 好吧 如果您熟练的话 您可以反汇编 DLL 并了解其所有功能 这需要花费大量时间 但如果您这样做 您可
  • 逆向工程的汇编语言[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法拦截Android应用程序的流量

    最近 我正在尝试测试和拦截来自开发的应用程序的流量罗莫比尔 我设置了一个代理burp 当然 我已经在我的设备上安装了 burp 证书 因此我可以拦截设备上的其他应用程序 但我无法在 burp suite 上看到相关应用程序的流量 相反 该应
  • 无法在 Apple Calendar 中绑定()套接字(dylib 注入)

    我正在尝试检查 iOS 8 1苹果日历 MobileCal app on Reveal http www revealapp com下列的本指南 http petersteinberger com blog 2013 how to insp
  • 基于已知 XSL 对未知 XML 进行逆向工程

    Solved 在遵循 Matti 的建议后 我删除了自定义函数 一切都很好 原帖 截至今天 我还是 XSLT 的新手 所以我确信这对你们中的许多人来说是理所当然的 无论如何 我的任务是使用第三方供应商提供的数据为我公司的网站创建一个小部件
  • 用于生成 C++ 代码轮廓/图的工具 - 有这样的东西吗? [复制]

    这个问题在这里已经有答案了 我需要深入研究用 C 编写的软件组件并对其进行一些修改 我幻想生成一些代码映射 它将显示类之间的关系并引导我完成方法的流程 调用图 有这个工具吗 几年前 我使用 Rational Rose 建模工具 该工具具有对
  • PE 文件中的跳转存根

    最近我反汇编了一个DLL 用c c 编写 发现代码段内有很多 跳转存根 这些存根除了跳转到 DLL 内的函数之外什么也不做 eg jmp foo jmp foo2 为什么编译器 Visual studio 2012 在二进制文件中包含这些函
  • 是否可以调用驻留在 exe 中的非导出函数?

    我想调用驻留在第 3 方 exe 中的函数并获取其结果 好像有should是一种方法 只要我知道函数地址 调用约定等 但我不知道如何 有谁知道我会怎么做 我意识到任何解决方案都是非标准的黑客 但有must成为一种方式 我的非恶意用例 我正在
  • 二元炸弹 - 第 6 阶段

    这是拆解phase 6 08048dbf
  • 比较已编译的 .NET 程序集?

    有没有什么好的程序可以与编译 NET 程序集进行比较 例如 我有 HelloWorld dll 1 0 0 0 和 HelloWorld dll 2 0 0 0 我想比较差异 我该怎么做 我知道我可以使用 NET Reflector 并使用
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 是否可以通过逆向工程从 .ipa 文件获取原始源代码?

    我目前是一名iPhone应用程序开发人员 试图通过提取当前的ipa解决方案和github解决方案来学习生成音频脉冲的机制 使用Hopper解压时 只会生成重新编译的 不完整的汇编代码 我们看不到任何可供进一步探索的目标类别 有没有其他方法可

随机推荐