游戏是如何检测到有OD等调试工具的(转)

CE+OD无法附加游戏进程的破解方法 CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无法就是采用 线程 进程 SSDT等等这些东西来限制一些如:CEOD ASM32这些工具调试而已 比如OD要调试一个程序进程 首先做的是2步操作 ... 阅读详情
知其然,知其所以然,希望大家觉得有用,大家可以用在自己程序中查看自己的程序是否被调试..同时为了更好的了解一些游戏无法用OD调试的原因
1.程序窗口句柄检测
原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行

//********************************************
//通过查找窗口类名来实现检测OllyDBG
//********************************************
function AntiLoader():Boolean;
const
  OllyName='OLLYDBG';
var
  Hwnd:Thandle;
begin
  Hwnd:=FindWindow(OllyName,nil);
  if Hwnd<>0 then
    Result:=True
  else
    Result:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if AntiLoader then
    MessageBox(Handle,'找到调试器!','提示',MB_OK+MB_ICONINFORMATION)
  else
    MessageBox(Handle,'未找到调试器!','提示',MB_OK+MB_ICONINFORMATION)
end;


2.用线程环境块检测
原理:用ring3级下的调试器对可执行程序进行调试时,调试器会把被调试的可执行程序作为一个子线程进行跟踪.这时被调试的可执行程序的PEB结构偏移0x02处的BeingDebugged的值为1,如果可执行程序未被调试,则值为0,所以可以利用这个值来检测程序是否被ring3级下的调试器调试

//***************************************
//使用PEB结构检测OllyDBG
//***************************************
function AntiLoader():Boolean; //检测调试器;
var
  YInt,NInt:Integer;
begin
  asm
    mov eax,fs:[$30]
    //获取PEB偏移2h处BeingDebugged的值
    movzx eax,byte ptr[eax+$2]
    or al,al
    jz @No
    jnz @Yes
    @No:
      mov NInt,1
    @Yes:
      Mov YInt,1
  end;
  if YInt=1 then
    Result:=True;
  if NInt=1 then
    Result:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
  else
    MessageBox(Handle,'未发现调试器!','提示',MB_OK+MB_ICONINFORMATION);
end;

3.用API函数IsDebuggerPresent检测
原理:操作系统将调试对象设置为在特殊环境中运行,而kernel32.dll中的API函数IsDebuggerPresent的功能是用于判断进程是否处于调试环境中,这样就可以利用这个API函数来查看进程是否在调试器中执行

//****************************************
//利用IsDebuggerPresent函数检测OllyDBG
//****************************************
function AntiLoader():Boolean;
var 
  isDebuggerPresent: function:Boolean;
  Addr: THandle;
begin 
  Addr := LoadLibrary('kernel32.dll');
  isDebuggerPresent := GetProcAddress(Addr, 'IsDebuggerPresent'); 
  if isDebuggerPresent then 
    Result:=True
  else
    Result:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
  else
    MessageBox(Handle,'未发现提示器!','提示',MB_OK+MB_ICONINFORMATION);
end;

4.检查程序的父进程
原理:Windows操作系统下的GUI可执行程序的父进程都是explorer.exe(CUI可执行程序的父进程是CMD.exe,系统服务的父进程是Service.exe,在实际使用的时候需要根据自己的程序类型来选择父进程实现反跟踪),而正被调试器OD调试的程序的父进程是调试器的执行程序ollydbg.exe而不是别的.所以可以利用检查父进程是否为explorer.exe的方法来检测OD.
//***************************************************
//检查父进程来检测OllyDBG
//***************************************************
function AntiLoader():Boolean;
const
  ParentName='/EXPLORER.EXE';
var
  hSnap,hProcess:THandle;
  szBuffer:array[0..MAX_PATH] of char;
  FileName:array[0..MAX_PATH] of char;
  Process32:PROCESSENTRY32;
  LoopFlag:BOOL;
begin
  ////得到所有进程的列表快照
  hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hSnap=INVALID_HANDLE_VALUE then
  begin
    Result:=False;
    Exit;
  end;
  Process32.dwSize:=sizeof(PROCESSENTRY32);
  //查找进程
  LoopFlag:=Process32First(hSnap,Process32);
  if LoopFlag=False then
  begin
    CloseHandle(hSnap);
    Result:=False;
    Exit;
  end;
  while Integer(LoopFlag)<>0 do
    begin
      if Process32.th32ProcessID=GetCurrentProcessId() then
        begin
          hProcess:=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Process32.th32ParentProcessID);
          if hProcess<>0 then
            begin
              if GetModuleFileNameEx(hProcess,0,FileName,MAX_PATH)<>0 then
                begin
                  //取得系统目录
                  GetWindowsDirectory(szBuffer,MAX_PATH);
                  //合并系统目录和/EXPLORER.EXE
                  StrCat(szBuffer,ParentName);
                  //转换成大写以后比较当前调试程序的进程是否为父进程
                  if UpperCase(String(FileName))<>UpperCase(String(szBuffer)) then
                    Result:=True
                  else
                    Result:=False;
                end;
            end
          else
            Result:=False;
        end;
      LoopFlag:=Process32Next(hSnap,Process32);
    end;
  CloseHandle(hSnap);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
  else
    MessageBox(Handle,'未发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
end;

5.检查STARTUPINFO结构
原理:Windows操作系统中的explorer.exe创建进程的时候会把STARTUPINFO结构中的值设为0,而非explorer.exe创建进程的时候会忽略这个结构中的值,也就是结构中的值不为0,所以可以利用这个来判断OD是否在调试程序.
/************************************************
//通过检测STARTUPINFO结构来检测OllyDbg
//************************************************
function AntiLoader():Boolean;
var
  Info:STARTUPINFO;
begin
  GetStartupInfo(Info);
  if (Info.dwX<>0) or (Info.dwY<>0) or (Info.dwXCountChars<>0) or (Info.dwYCountChars<>0) or
    (Info.dwFillAttribute<>0) or (Info.dwXSize<>0) or (Info.dwYSize<>0) then
    Result:=True
  else
    Result:=False;
end;

procedure TMainFrm.FormCreate(Sender: TObject);
begin
  if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK)
  else
    MessageBox(Handle,'未发现调试器!','提示',MB_OK);
end;
对反游戏外挂技术的思考及实现 前言 现如今,有很多游戏外挂软件,它们可以修改游戏显示的数据和内部代码,来达到谋取利益的目的。在实现反外挂技术前,我先介绍一下常见的三种外挂:1.模拟类外挂:该外挂可以说是最早的外挂了,它是往游戏发送伪造的按键消息来模拟人的手工操作。实现的思路为: 1.在Ring3层使用SendMassage、PostMassage、keybd_event、mouse_event等向消息队列中发送按键消息 2.使用回调函数KeyboardClassServiceCallback和MouseClassServiceC 阅读详情

相关推荐

Windows逆向实战:用OD与IDA动态解析PEB结构绕过反调试检测

在Windows系统编程与软件安全领域,进程环境块(PEB)是一个核心的底层数据结构,它承载着进程的运行时关键信息。其工作原理在于,操作系统为每个进程维护一个PEB,其中包含模块加载列表、堆管理信息和调试标志等。理解PEB对于软件调试、安全分析和逆向工程具有重要价值,尤其在对抗反调试机制时,通过解析PEB中的调试标志(如BeingDebugged字段),可以识别或绕过检测。在实际应用场景中,这常用于游戏安全、恶意软件分析和软件保护技术研究。本文将结合OllyDbg动态调试与IDA Pro静态分析,演示如何定

weixin_28568819的博客 864

od被检测解决方案

2.StrongOD中选择CreateAsRestrict。改成任意,可以过GetWindow检测。1.升级dbghelp.dll。.ini中的驱动名称。

青月的成长记录吖 1178

某游戏平台检测加速辅助案例分析

如果ebx小于等于 eax 就跳转到 300134E进行判断[edi+0x10]是否等于0 检测开始的情况下他是等于1的 所以进入call 30012B9到达我们刚开始下硬件断点的位置,完成一次检测 ebx就+1,edi+14 检测的API的数量一共是0x34个,[edi+10]对应每个API检测的开关,这时我们只需把每个[edi+10]的值写为0就可以过掉这个游戏对API HOOK的检测了。[0x3000113D]保存的是VirtualProtect的地址,call esi 两次调用这个API,

douluo998的博客 967

任鸟飞逆向C++进阶篇

【课程简介】本课程为任鸟飞逆向C++进阶篇,注重基础理论的务实和简单功能的实现,学员学成后,可独立判断、分析和解决逆向问题、独立编写通用辅助。本套课程不只是一套深入学习C++的课程,更是一套深入学习汇编逆向课程、外挂与反外挂、软件安全的课程。逆向思路技术随笔,请关注我的优快云博客:https://blog.youkuaiyun.com/qq_36553941 欢迎大家来学习交流,活动折扣等信息也在其第一时间发布。PS: 课程中工具包、源码、课件请关注第一章的第一节的随课课件,工欲望善其事,必先利其器! 【学前预备知识】任鸟飞逆向C++系列课程是一条精心安排为掌握汇编逆向、外挂与反外挂、软件安全的学习路线,包括但不限于 基础篇、进阶篇(本篇)、高级篇、实战篇等,所以为保证您能学有所成请在学习本篇之前务必掌握基础篇!!!基础篇优快云学院链接:https://edu.youkuaiyun.com/course/detail/30509 【学员学成收获】1、C++编程语言进阶。2、游戏逆向分析进阶。3、游戏安全对抗理论进阶。4、独立编写通用辅助。 

OD过游戏保护

OD过游戏保护相关的理论知识 保护有nProtect GameGuard(NP), hackshield(HS

从拆解到调试:用CS5523改造旧款车载显示屏的完整记录(MIPI转eDP方案)

本文详细记录了使用CS5523芯片将旧款车载显示屏从MIPI接口改造为eDP驱动的完整过程。通过对比LT8911等芯片,选择CS5523实现低功耗、高兼容性的显示升级,涵盖硬件改造、固件配置及调试技巧,最终成功提升显示效果200%。

web99的专栏 344

18. OD-反调试研究,破解反调试,编写反调试

病毒、木马、外挂等必须要有的 “安全工作” 因为你一个安全软件一旦被成功调试了,就等同于被调戏了,一切主要操作顺序都被人掌握了,只要开发出逆向的突破即可。 我们要研究他们这些安全软件如何反调试的 比如软件发现被OD打开,直接自爆。。。 开始 第一个程序 F8运行程序 找到了弹出反调试报错的call F7 程序调用了 IsDebuggerPresent 函...

墨痕诉清风的博客 7837

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作...

写在前面: ???? 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。???? ???? 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 ????感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~文章目录引言一、油门标定原理1.1 油门与速度、加速度的关系1.2 油门控制曲面模型的构建二、油门标定表的制作流程...

qq_35485206的博客 2139

反调试技术揭秘(转)

在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。   一、Windows API方法   Win32提供了两个API, IsDebuggerPresent和CheckRemoteDebuggerPresent可以...

weixin_33935505的博客 642

Claude + Figma MCP 实战教程

• 拥有 Figma 的 Dev 或 Full seat(专业/企业账号)权限 才能启用 Dev-Mode MCP 服务 。• MCP 是通过标准接口连接 Claude 与 Figma,效率高,但目前仍为 Beta,稳定性可能有限。3. 服务启动后,会在本地运行,比如 http://127.0.0.1:3845/mcp 。如果设置正确,会显示已连接的 figma-dev-mode-mcp-server  。• 如果多次转换复杂组件,可能需要多次选择与多次生成,建议合理拆分设计任务。

weixin_49869937的博客 4445

彩票预测的可能性与算法分析

彩票作为一种以随机数为基础的赌博形式,吸引了大量希望一夜暴富的参与者。尽管许多人希望通过某种方式预测彩票结果,以增加中奖几率,但彩票预测的可能性依然是一个充满争议和误解的话题。本文将探讨彩票是否能够预测的理论依据,分析可能的预测算法,并解释这些算法为何在实际应用中难以奏效。

m0_38012434的博客 2万+

游戏是如何检测到有OD等调试工具的

希望大家觉得有用,大家可以用在自己程序中查看自己的程序是否被调试..同时为了更好的了解一些游戏无法用OD调试的原因1.程序窗口句柄检测原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行//*************************

hmc1985的专栏 2671

YOLO11创新改进系列:卷积,主干 注意力,C3k2融合,检测头等创新机制(已更新110+)

本专栏提供详细的 YOLO11 教程,包括基础知识、源码解析、入门实践、算法改进和项目实战,适合发表YOLO11 学习者订阅。内容包含 100+多篇独家改进机制,适合发表论文,评分高达 96 分。订阅者将获得一键运行的改进文件及答疑交流群支持。 使用服务器的同学还可以私聊获取搭建好的运行环境。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1万+

CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了

CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无法就是采用 线程 进程 SSDT  等等这些东西来限制一些如:CE  OD ASM32  这些工具调试而已 比如OD要调试一个程序进程 首先做的是2步操作 1.调用系统库中打开进程的API函数 2.创...

爱码农爱生活 6453

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT

在大模型微调中,我们一般使用Alpaca 和 ShareGPT和两种格式的数据集。

Science prince的博客 1096

9篇6章7节:SEER 数据库的2025年数据变量多条件组合选择(2026年版)

软件中的病例筛选功能通过CaseSelection界面实现精准研究队列构建。该界面允许用户通过变量选择(Variable)、运算符定义(Operator)和取值设定(Values)三步操作创建筛选条件,支持种族、分期等关键变量的多条件组合。

MD Code 1454

计算机云教室VMP,冷小黑od过检测插件

冷小黑od过检测插件2021是一款最新的无视E盾/VMP等检测的od破盾插件,可以用于为每个计算机提供驱动程序调试和管理功能,以便在使用各种硬件驱动程序时可以为计算机提供更安全的保护,软件能实时通过鼠标、键盘检测虚拟机,让你随时可以畅快的玩游戏!使用技巧冷小黑OD过检测是一款非常好用的游戏虚拟机过检测工具,它可以帮助用户进行游戏专用虚拟机过检测,附键鼠同步器,完美解决虚拟机多开过检测,去除虚拟化虚...

weixin_34749016的博客 4696

【系统分析师】高分论文:论基于构件的软件开发(气象灾害影响评估系统)

本文以某手机气象灾害影响评估系统为例,探讨了基于构件技术的软件开发实践。通过分析开发中常见的功能模块重复问题,提出建立企业构件库、针对性选择构件和加强构件管理的解决方案。项目实施中成功复用登录模块等通用构件,并针对气象数据转换需求开发新构件,最终在8个月内高质量完成系统建设。文章总结了构件开发的三个关键点:构件库建设是基础、构件选择需精准、构件管理要规范。同时指出需注意全新需求开发、性能优化等问题,建议通过培训提升团队对构件的理解力。该案例证明构件技术能有效缩短周期、降低成本,为企业积累可复用的技术资产。

数据知道的博客 4253

【游戏逆向】逆向基础之OD和CE结合找数据

OD和CE结合找数据情况一,CE找突破口,锁定目标内存地址,在CE中查看其访问代码,然后到od中追踪其来源,这是最常见的情况,优点在于可以查找到所有的访问代码(前提是下断以后要尽量的做和地址数据相关的动作,比如人物血量,你就要考虑到扣血,加血,吃药,被怪物攻击,换装备等等一系列的可能导致人物血地址被访问的动作,这样才能得到更全面的访问代码),不会漏掉任何的线索,然后逐条到OD找来源,一旦某几条找不到来源,还有更多代码可以使用。如果说谁强大,并没有,不同的情况,应用不同的工具才算是最明智的选择。

douluo998的博客 2294

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

7.UE-游戏逆向-绕过游戏的反调试

游戏逆向 游戏安全 游戏攻防 c++ 反游戏外挂 保姆级攻略 Windows 汇编 x64游戏

计算机王的博客 2431

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【游戏逆向】逆向基础之OD的使用和基础

内存访问和内存写入,对该处内存地址有访问或则写入,因为该处是代码段,正常是不存在访问和写入的,所以在该处下此类型断点一般是错误的做法,但是有一种情况是需要这样做的,就是如果你修改了该处代码,又想知道该处是否有CRC等检测的时候,就需要在该处下内存断点了,我们说正常情况下代码段是不会有内存访问和写入的,一旦有的话9层就是检测了。动态调试,最重要的是下断点,当程序执行到我们下断点的位置的时候,被暂停下来,此时我们可以分析内存和寄存器以对程序进行分析。我们点了F9,程序依然是卡住的,没有办法运行起来。

douluo998的博客 2305

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

53.网游逆向分析与插件开发-游戏反调试功能的实现-通过内核信息检测调试器

网络游戏逆向、网络游戏安全、网络游戏攻防、c++

计算机王的博客 2055
上一篇: UNICODE环境下将宽字符CString转换为char*
下一篇: 过TesSafe反WinDbg双机调试
M-先生
博客等级 码龄17年 60粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值