首页 > 其他分享 >34.x86游戏实战-XXX过检测代码分析

34.x86游戏实战-XXX过检测代码分析

时间:2024-08-11 22:55:12浏览次数:21  
标签:x86 XXX 然后 弹框 跳转 崩溃 34 断点 游戏

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:33.x86游戏实战-喊话CALL

之前分析的时候,ctrl+f9之后游戏会弹一个框,然后点了弹框里的确定游戏就会崩溃,然后在弹框的函数里打断点,反到调用弹框的位置发现它附近都是加密混淆的代码,然后当时就没搞,现在就要搞它,跳过这种位置

然后这个游戏只要打硬件访问断点,它就会被检测,然后弹框,然后退出游戏,接下来就用硬件访问断点来触发游戏检测,然后来分析绕过崩溃弹框的方法

接下来打开CE,随便搜索一个值

然后在这么多数据里随便找一个,这里就用下图红框的地址

然后打开OD并附加到游戏,然后在OD内存区

然后先跳转到MessageBoxW函数(之前找的,游戏用的MessageBoxW函数弹的框)里打断点,这里有个东西MessageBoxA和MessageBoxW函数是操作系统提供,其它程序把它改了,会影响我们逆向,所以在逆向之前把其它不用的软件关一关,比如加密程序、加密的视频播放器

在下图红框位置打断点

然后在CE中找到内存地址打硬件写入断点(这个游戏几乎所有内存打硬件写入断点都会被检测到)

一下硬件写入断点就弹框,然后崩溃,如下图

然后点了弹框里的确定,MessageBoxW里的断点就会触发

然后取消断点,按F8,然后就会来到下图位置,也就是之前看到有代码混淆、VM的代码

然后这种怎么分析?代码没法看,运行就崩溃,怎么办?怎么才能绕过?可以绕过的关键代码肯定就在附近,怎么找?这里就用到了栈,在调用函数的之后,也就是在执行call的时候,它会把call的下一行的代码放到栈里,这就有了突破口,所以接下来找栈里的数据,找call下一行的地址,如下图有返回到什么来自什么,这种一般就是call下一行的地址(不是100%准确,只是一般是这样)

然后右击它选择反汇编窗口中跟随

然后就来到了下图位置

然后下图红框是一个条件跳转,它正好跳过崩溃弹框的函数,它很满足检测的写法,检测到自身被入侵,执行代码的时候去判断是否有入侵,有就去执行崩溃函数,下图有cmp有je很明显,cmp判断有没有被入侵,je被入侵了就不跳转,不跳转就会执行崩溃弹框,没入侵就跳转

然后je的硬编码是0x74,然后0x74 0x5这意思是跳5个字节

然后把0x74改成0xEB,也就是jmp,jmp执行是无条件跳转指令(只要执行就跳转)

然后记住地址,也就是0x755B88这个地址,然后OD右击选择下图Detach,解除附加

然后再回到CE,这时游戏崩溃了,打开游戏使用CE附加,如下图操作

然后以十六进制显示

十六进制显示之后就是0x74,也就是je

然后双击1位置,然后写EB也就是jmp的硬编码,然后点确定

点了确定之后,这时OD下硬件写入断点就不会触发崩溃弹框了

改了之后,通过OD

然后再随便找一个地址

然后再下硬件访问断点

然后就会发现不会崩溃弹框了,到这就绕过了检测


img

标签:x86,XXX,然后,弹框,跳转,崩溃,34,断点,游戏
From: https://blog.csdn.net/qq_36301061/article/details/140937248

相关文章

  • 34 -realloc()函数
    文章目录1函数原型2参数3返回值4示例1函数原型realloc():重新分配内存块,函数原型如下:void*realloc(void*ptr,size_tsize);cstdlib库描述如下:Reallocatememoryblock1.Changesthesizeofthememoryblockpointedtobyptr.2.Thefunctionmay......
  • 034.Vue3入门,插槽Slot中同时显示主页面和插槽页面的内容
    1、App.vue代码:<template><div><h3>主页面</h3><Slot001v-slot="slotProps"><h4>{{msg}}==={{slotProps.msg}}</h4></Slot001></div></template><script>i......
  • C++虚函数表、地址详解(x86/x64)
    参考博文:c++虚函数表、地址详解-CSDN博客本文在上述博文的基础上,补充了x64下的验证代码。一.什么是虚函数表,它有什么特点?        虚函数大家都知道是基本用于实现多态的,当父类指针指向子类对象的时候,如何确定调用的函数是父类里的还是子类里面的,这就要用到虚函数表......
  • chapter10------32位x86处理器编程架构
    处理器架构处理器架构或者处理器编程架构,是指一整套的硬件架构以及与之相适应的工作状态回顾8086处理器8086处理器有20根地址线,可以寻址1MB内存,但处理器内部的寄存器只有16位,也就是数据线是16根,只能处理16位的数据我们没法用16位的寄存器去访问1MB的内存,简单来说就是无法用16......
  • VDI/VDE 2634 Part1 2022:05
    Optical3DmeasuringsystemsImagingsystemswithpoint-by-pointprobingPreliminarynoteOptical3Dmeasuringsystemsareusedasuniversalmeasuringandtestequipment.Ineachcase,theusermustbesurethattheoptical3Dmeasuringsysteminusecomp......
  • springboot垂钓服务系统-计算机毕业设计源码17434
    摘要本文旨在针对垂钓爱好者的需求,基于微信小程序平台,设计并实现一套垂钓服务系统。首先,通过对用户需求进行调研和分析,确定了系统的基本功能模块,包括垂钓点信息展示、用户预约和支付、钓具租赁信息等。接着,借助微信小程序提供的开发框架和组件库,实现了系统的界面设计和交互功......
  • P3834 【模板】可持久化线段树 2
    原题链接题解总体上来讲,就是二分\(x\)查询插入\(l-1\)时有多少数小于等于\(x\),查询插入\(r\)时有多少数小于等于\(x\)然后减一减,看看是不是小于等于\(k-1\)我认为目前没有比ai讲的更清楚的了,请点击这里code#include<bits/stdc++.h>usingnamespacestd;/*#def......
  • LeetCode | 344 Reverse String
    分析字符数组本质上还是数组,双指针本质上是遍历,遍历过程只处理两个独立数据,移动过程将问题分为已经解决和未解决的两部分。在这个题目中值得注意的是,关于字符数组进行数据原地交换采用的是异或^的方式主类packagecom.github.dolphinmind.string;/***@authordolphinmind......
  • 代码随想录算法训练营day08|344.反转字符串,541.反转字符串II,卡码网:54.替换数字
    344.反转字符串题目链接:https://leetcode.cn/problems/reverse-string/description/我的代码:classSolution{public:voidreverseString(vector<char>&s){for(inti=0;i<s.size()/2;i++){chartemp=s[i];s[i]=......
  • LeetCode | 349 Intersection Of Two Arrays
    分析两个数组的交集,双指针使用的前提是,两个数组已经处于有序状态。双指针的本质是遍历;双指针在线性数据结构中,进行数据处理,每次只专注于两个元素;指针遍历将问题拆解为两部分,即已解决和待解决问题。倘若两个数组是无序的状态,双指针指向每次都无法确认是否在历史中已经出现过,这个时......