【干货】C++游戏外挂开发教程09:内联汇编和显存读取

文摘   社会   2025-01-01 18:02   广西  


欢迎来到C++游戏外挂开发系列教程! 

游戏外挂开发是一个既有挑战性又充满乐趣的领域,它让我们有机会深入探索计算机程序设计和系统底层原理。本教程将带领你从零开始,逐步学习如何使用C++编程语言开发游戏外挂,包括各种常见游戏中的作弊功能,如自动射击、透视功能、无敌模式等。通过本系列教程,你将了解到游戏外挂的基本原理、常见开发工具、技术挑战和实际应用技巧,为你打造成一名优秀的游戏外挂开发者提供全面的指导。

在本期教程中,我们将深入探讨一个关键原理。首先,我们需要明确绑定窗口的操作。通过绑定窗口,我们可以获取窗口的坐标信息,这对我们后续的操作至关重要。接着,我们将讨论如何获得窗口的内存DC,并确保其与系统兼容。然后,我们将介绍如何提取所需的信息,并设置截取的范围。

通过构造一个DIB(设备无关位图),我们可以获得颜色指针,为后续的操作奠定基础。接下来,我们将探讨如何通过设备内存传输数据到主内存中,并进一步操作这些数据。在讲解过程中,我们将特别关注函数调用的顺序和重要性,以确保我们的代码顺利运行。

有个问题,我所提及的频率是非常高的。我本来还说反面印出来的,把那个 bt 一点反面出来的那天后面 a a a s m 杠对了,无论是你的小会员,对吧?你把楼梯打开,做完 b 站。他那个 F5,我们编辑编辑把它编译出来,然后找到我们的应用程序。
抓获取显存,直接过来啊,我们怎么找到他们的主函数?我们怎么找什么主函数,按个一,然后咱就是主谋,不是吧,对不对?这是主播会吧?这个是主动关的,对不对?但是这个有个问题啊,主模块是一丁点好,他就是主模块啊,我们一个一个程序啊,这是一个可执行文件和无数个动态链接库,和无数个静态链接库,链接柱,拼接而成的,拼接而成,对吧?他就是这么一个道理啊,因为我们要找找他的这个,我们要找到我们的这串代码,对不对?我们要找到我们这代码它在哪呀,这不是在经过它编译的,它是经过优化的,我们不可能一开始就找到它的代码。
我们找咱要找那个立项,首先我们得干什么,我们得有个思想,有个思路吧,我们怎么逆向开呀,我们得找到的任务啊,比如这个 sleep 10000,对吧?我们把这个程序放呢,对不对?他现在单机吧,他绝对是在这个循环里边吧,他绝对是在这个循环里面了,他的琴码他停在这个位置,他停在这个位置是驱动中转入口,终端路口,他这个一定要调动到,就跑到驱动里面去,跑到内核里面去,但是我用软,我只要知道这就行,好在暂停了,重新重新启动一下,过来走啊,暂停我们把这个设置大一点,我们把它设置大一点,把这个 sleep 设置大一点好,不然它一会就停了,好运行,在循环中嘛,他是在循环中,他是在循环中,我们要我们用力到哪儿去,我们在循环中,他肯定是在循环,我们逆向,我看我们 og 暂停,一暂停肯定是暂停到这两个函数上。
他肯定是在循环内的,这里他肯定是在这个循环,这个思路问题啊,然后他就委托他,然后看他回去,a58 回去好暂停再暂停一下啊,回不去啊,回去我们看对战,是我找到神秘的,这说明咱们到了吧,sleep 20 了,零钱超市,对吧?我们我们下个半点 f f,这个路线和我和我这个案件冲突了,16 和 0334 是不是我们的 16,28 033 46 之间的数是不是 24,不是 20 30 万,我在你在这,我们就转向文代码,明白没有明白没有,明白没有明白的同学打个一二,不太懂啊,怎么不在哪呢,我们重新定一下,重新定一下,我们把 og 打开,我们把 og 打开,ot 打开,og 打开啊,我过来获取选择了。
我们现在就关掉了,关掉了,因为什么都没有的状态状态啊,什么都没有状态,我们把它拖进来,这是要取断它是不是解析它,解析这个线程,减轻它的进程,如果按照运行,我走到这儿,走到这暂停啊,我们先不暂停,我先保存一下兔子,保存一下,这是他的,他会编代码了,神秘图嘛,就他了,我们先不先不这样搞啊,我们先这样搞切换,获取选出来是不是我们写的程序,这个是我们写的程序啊,这个没问题吧,过来拉进来,抽起来啊,他就要等一下这个点与你好,他就开始执行程序,在运行到这个循环里面的,是不是我们 o d 按暂停,是不是按暂停,他肯定是判断这个循环里边的,按暂停他是断在循环里面的。
我觉得签名是不是要加个零,这也是个零啊。是哪种进制的呢?320 不就是 800 吗?是那个定制的 EF,就是 500 吧,没用的游戏也能暂停啊,我们全都在那个暂停呢,怎么可能没用。然后继续走啊,三步走 F8,这调到那里去了,我们不往里面看了,继续走。
控制台创建出来了,单独播报。这又调用了一个什么函数,过来可以函数数一下。我们逆向出来的,那么这个肯定是多少啊?526632 吧,这个很明显就是什么 bit,是不是第二关的设置,对吧?ABCD 过来,单步步过,走走走走走,截取了啊,好在有惊天一跳转,就是一个循环吧,接着跳转循环,他一直跳,有根线就跳到这儿来,说话结束,过来,然后把它写地址,不用管,让他们继续走 F8,然后进入循环了吧,进入循环之后写到这个 EX,我们看 EX 是个什么值?
ECX、EBP、DD 减 0x0057800557B,看那是个什么?不用管,不用管这个。这个可能他们还没穿住吧,可能是内部使用,可能是我们的这个函数啊,是不是他走到了 FF7 啊,不如跑到这,还能给大家看一下,对啊,跳过来好,我们也跟着跳下来,跟着走进来,跟着走。但它有两个四方函数,是不是这个第一个是吧,示范过来了。然后我刚才调用的是什么来获取 DC 啊,GetDC。它没有参数的话,我看一下这个 GetUserDC,在这儿。那么这个可能是我们写的还是我们点的,这个不用管了,不用管它,意义不大。走不过去,走获取显存啊。
调用之后,我们这就该执行它了,对不对?这个可能是负值,我们不用管它,DEX,对对对,这可能是负值的。下来走走走,我们不需要去每个地方都分析它,对吧?我们走到这来了,走到我们需要的地方了,我们需要的找到这个闭嘴。
我要分析发展,我要分析这个。他第一个参数一个,我看一下,看起来一个123456789,看着呃,算一下,是九个参数,没问题吧,他爬起来九个参数啊,我们进来,那么问题来了,我们是不是可以直接写到C语言里面啊?我们试试,Push BEAT,复制复制到点进来,BEAT,我直接写C语言安全,但是我们肯定要改一下啊,肯定要改一下啊,不能全部一模一样的,不可能的。
Touch TX就是不用管我消掉,这个0x CC 0020就是它了,就是它,复习一个DIV,然后零零EX,然后这个W,重新搞一下Y,20200它也是零,这个不害怕Y了,X还没传进来,还没创建,然后XY传到这来了,这样就对了。我们看一下有没有问题啊,肯定是有点问题的,肯定是有点问题对啊,我先把它暂停啊,现在下个断点,一会儿一会儿就直接过来,走一下没错呀,直接就运行了。
错了,看见没,肯定错了,我看一下哪里出错了,放弃他的值,呃YX DC设备,这个没反,我们看一下,我们看一下出错在哪,下个断点的VS里面比较一下不就知道了,F5,我们返回原一下啊,这是他的,这是原来的,这是我们用汇编写的,我们看看有什么区别没有啊,他发起了一个这个ECX,肯定错了,这个肯定错了对吧,他就是我们传递的值啊,人家他要传的是地址,对不对?我们肯定传错了,把这个打开,PDX,这个是指地址,这个是地址。

在这个BEAT函数里面调用了这个函数,但它只是最外层的调用,别急着离开,再往里面深入一层,我们会进入一个叫做"Let it be"的地方。往里再深入一层,再继续前行,我会绕过一些障碍,直接调用驱动中转路口。这样做的好处有两个:速度最快,并且游戏无法检测到你的操作。比如说,如果游戏试图对你下钩子,它找不到你,因为你已经绕过去了。



暮色的狐
这是一只高强度上网冲浪、高质量输出内容的狐狸。主打ACGN杂谈、技术干货分享、第九艺术鉴赏、网梗百科解析、情感树洞鸡汤、正能量价值观~
 最新文章