首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何绕过IsDebuggerPresent与OllyDbg?

绕过 IsDebuggerPresent 函数和使用 OllyDbg 进行调试是逆向工程和反调试技术中的常见话题。IsDebuggerPresent 是一个 Windows API 函数,用于检测当前进程是否在调试器中运行。为了绕过这个检测,可以使用多种技术。以下是一些常见的方法:

1. 修改程序代码

最直接的方法是修改程序代码,使其跳过 IsDebuggerPresent 的调用或修改其返回值。这可以通过静态分析和二进制修改工具(如 OllyDbg)来实现。

示例:

在 OllyDbg 中,你可以找到 IsDebuggerPresent 的调用并修改其返回值。例如,将返回值修改为 0(表示未被调试)。

  1. 在 OllyDbg 中加载目标程序。
  2. 查找 IsDebuggerPresent 的调用。
  3. 修改返回值,使其总是返回 0。

2. 使用 API Hooking

你可以使用 API Hooking 技术来拦截 IsDebuggerPresent 的调用,并返回你希望的值。

示例:

以下是一个使用 Microsoft Detours 库的示例代码,演示如何拦截 IsDebuggerPresent 调用:

代码语言:javascript
复制
#include <windows.h>
#include <detours.h>

BOOL (WINAPI *Real_IsDebuggerPresent)(VOID) = IsDebuggerPresent;

BOOL WINAPI My_IsDebuggerPresent(VOID) {
    return FALSE; // 总是返回未被调试
}

int main() {
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)Real_IsDebuggerPresent, My_IsDebuggerPresent);
    DetourTransactionCommit();

    // 你的程序代码
    if (IsDebuggerPresent()) {
        printf("Debugger detected!\n");
    } else {
        printf("No debugger detected.\n");
    }

    return 0;
}

3. 修改 PEB 结构

IsDebuggerPresent 函数通过检查进程环境块(PEB)中的 BeingDebugged 字段来确定进程是否在调试器中运行。你可以直接修改这个字段来绕过检测。

示例:

以下是一个修改 PEB 结构的示例代码:

代码语言:javascript
复制
#include <windows.h>

void DisableDebuggerDetection() {
    __asm {
        mov eax, fs:[30h] // 获取 PEB 地址
        mov byte ptr [eax+2], 0 // 将 BeingDebugged 字段设置为 0
    }
}

int main() {
    DisableDebuggerDetection();

    if (IsDebuggerPresent()) {
        printf("Debugger detected!\n");
    } else {
        printf("No debugger detected.\n");
    }

    return 0;
}

4. 使用反调试工具

有一些专门的反调试工具可以帮助你绕过 IsDebuggerPresent 和其他反调试技术。例如,ScyllaHide 是一个常用的反调试工具,可以帮助你绕过多种反调试检测。

5. 使用调试器插件

一些调试器(如 OllyDbg 和 x64dbg)有插件可以自动绕过常见的反调试技术。你可以搜索并安装这些插件,以简化调试过程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何绕过IsDebuggerPresent的反调试

在某爱论坛上看到有个师傅写了个Crackme 关于如何绕过IsDebuggerPresent的反调试的,闲来无事复现调试一下 先上原文链接:https://www.52pojie.cn/thread-1432590...explorer.exe,不是则退出,似乎也可以作为一种简单的反调试手段,之前没怎么了解过反调试,最多听海哥说过可以检查句柄表,今天就学习一下,先看看windows的反调试API,0环反调试等以后知识储备够了再学习 IsDebuggerPresent...https://docs.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-isdebuggerpresent 确定调用过程是否正在由用户模式调试器调试...看到使用了IsDebuggerPresent来反调试 IDA Pro x64反调试 进入ida后,按G,并输入刚刚反汇编开始的地址 ? 跳转后 ? 选择startaddress ?...这里很明确了,就是这个在反调试 IDA pro 反反调试处理 可以直接在函数头部就直接ret,让他不走IsDebuggerPresent 这里要用到IDA Pro的KeyPatch功能: 选中函数的头部

2.2K20

ROOT检测绕过

我个人认为ROOT的检测绕过是一种基于Pattern的对抗,检测方根据ROOT后手机的一些特征Pattern来检测ROOT,而绕过方则是根据检测方的各种检测方式来设计各种绕过方法。...本文主要总结一下平时遇到过的ROOT检测方式,以及绕过的一些思路。...  Objection集成了Root bypass功能,只需输入 android root disable 即可绕过许多app的root检测,但是看了一下这部分的源码,objection只是绕过了Java...参考frida 如何hook 多进程   我的绕过脚本开源在这:FridaAntiRootDetection 其他旁门左道 重打包   通过给app植入Frida-gadget或者xposed框架后重打包就能在无...编译系统   通过编译系统,植入frida或者修改主要的目标系统源码,就能在无ROOT的情况下,达到ROOT相同的效果。

4.1K11

在射击游戏中防止玩家作弊

---- 在射击游戏中防止玩家作弊 前言 本篇继续阅读学习《有趣的二进制:软件安全逆向分析》,本章是在射击游戏中防止玩家作弊,学习内存转储和如何保护软件不被破解 一、内存转储 借用一个小游戏进行学习内存转储的知识...的地方),就可以轻易破解 2、通过代码混淆来防止分析 如何防止代码被分析呢?...有一种方法被称为“混淆” 例子: 调用 IsDebuggerPresent 的部分,其机器语言代码为FF 15 00 20 40 00 85 C0 74 17(截止到 jz 指令) 00401000...main proc near 00401000 FF 15 00 20 40 00 call ds:__imp__IsDebuggerPresent@0 00401006 85 C0...d命令解包 手动解包:用调试器和反汇编器跟踪可执行文件解压缩的逻辑,并将位于内存中的解压缩后的可执行数据导出到文件 关键是“找到解压缩程序结束的瞬间(位置)” 将打包器添加的用于解压缩的那部分代码在 OllyDbg

71920

如何绕过XSS防护

本文列出了一系列XSS攻击,可用于绕过某些XSS防御filter。...此XSS可以绕过许多内容过滤器, 但仅在主机使用US-ASCII编码传输或您自己设置编码时才起作用。 这对于web应用程序防火墙跨站点脚本规避比服务器端筛选器规避更有用。...> IMG Embedded commands: 当插入此内容的网页(如网页板)位于密码保护之后,并且密码保护同一域上的其他命令一起工作时,此操作有效。...当空间也是一个问题时(少两个字符会有很长的路要走), 这真的很方便,而且可以轻松地绕过类似regex的“(ht | f)tp(s)?“//”。 您也可以将“/”改为“\\”。...下一个不同,这在Opera中不起作用,因为Opera认为这是旧的HTTP基本身份验证仿冒攻击,而不是。这只是一个格式错误的URL。

3.9K00

Waf功能、分类绕过

1. waf简介 WAF是Web应用防火墙(Web Application Firewall)的简称,对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性合法性,对非法的请求予以实时阻断...[20201114210534.png] 3、编码绕过,把SQL语句编码便可以绕过waf [20201114210943.png] 4、修改请求方式绕过 [20201114212238.png] 利用waf...的默认规则绕过,如默认只针对GET拦截,不对post拦截,那我们就可以用POST方式传输绕过waf 5、复合参数绕过 例如一个请求是这样的 GET /pen/news.php?...异或绕过 lucy' Xor '1'='1' # 利用WAF本身的功能绕过,把""替换为空 union+sel*ect+1,2,3,4.......组合法:编码注释 1、 替换法+URL编码 2、注释+替换法 3、内联注释+替换法 把and为&&,urlencode后为%26%26 如:%20%26%26%20-1=-1 7、分块传输绕过

2.6K00

如何绕过 Android 8.0 startService 限制

如何绕过 Android 8.0 startService 限制 应用在后台运行时,会消耗一部分有限的设备资源,例如 RAM。...下面以此异常为线索,一步一步来看源码中是如何限制的。...和方案 4 需要系统侧配合,适用于系统或预装应用,对绝大多数的第三方应用来说不可行 方案 5 可行,但极不推荐这种固步自封的方式 方案 6 可行,但不符合谷歌推进此限制策略的意愿,违背提高用户体验的初衷 如何绕过...别忘了标题,最终想要实现的是绕过 Android 8.0 startService 的限制,即不修改为前台服务,调用 startService 方法,仍旧可以启动属于后台应用的后台服务,怎么实现呢?...通过上面的方案 6 :「启动服务前,先将服务所在应用从后台切换到前台」 便可实现,如何将应用从后台切换到前台呢?

2.1K10

LyScript 实现Hook隐藏调试器

LyScript 插件集成的内置API函数可灵活的实现绕过各类反调试保护机制,前段时间发布的那一篇文章并没有详细讲解各类反调试机制的绕过措施,本次将补充这方面的知识点,运用LyScript实现绕过大多数通用调试机制...该函数用于检测自身是否处于调试状态,其C系列代码如下所示,绕过此种方式很简单,只需要在函数头部写出ret指令即可。...(dbg) print("补丁状态: {}".format(ref)) dbg.close()当程序运行后会向IsDebuggerPresent函数写出返回,从而实现绕过调试的目的。...图片Patch_FindWindowFindWindow函数功能是取窗体句柄,有AWEx系列,使用同上方法替代即可。...图片Patch_EnumWindows枚举窗体的补丁上方代码一致,此处就不再分析了。如下案例,实现了在枚举窗体过程中实现弹窗,并不影响窗体的枚举。

45710

WAF 绕过的捷径方法

www.qiaoyue.net 在企业架构中,安全体系同剥洋葱一般,由外及内是由一层层的安全产品和规范构成,越处于外层承重越大,WAF 属七层防护的第一道墙,随着互联网技术发展,业务对外提供服务的方式逐渐收拢,Web 接口应用垄断流量...对于此类前置串联架构的 ByPass 测试需找寻 WAF 中间件、后端业务间的耦合性缺漏,比如: 1、在使用了 SSL 套接字的会话中,协商加密算法属请求方可控,WAF 和后端业务在算法支持上可能存在差异的一个切入点...便可以绕过 WAF 直接对后端系统进行攻击; 3、WAF 中间件的耦合缺漏在后续的中间件层面做详细讲解,此处不做赘述。...当然以上 Bypass 的路径并非通用的,很大情况不同中间件对 HTTP 的理解和运用有关,详细中间件系统和版本测试情况可参见表格: https://drive.google.com/file/d/0B5Tqp73kQStQU1diV1Y0dzd1QU0...WAF 策略;在 bash 语法中,可以使用系统文件相同数量的 "?"

2K30
领券