C++反作弊对抗实战
文章平均质量分 78
以Valve社区经典游戏CS1.6与CSGO为实例,由浅入深的讲解各种反作弊对抗技巧(C++ RING3),让你对片好奇的领域更浅显的了解其中原理与方法.
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
汪宁宇
我想大抵是累了,横竖都没有精神,漫不经心的看着代码,眼皮倦倦的。仔细看了半夜的符号,才从字缝里看出来,满眼都是吃人的bug......
(有多年C/C++上下位机开发经验,熟悉三菱FX1S/1N/2N/3U、MODBUS等常见通讯协议,可兼项目顾问等方式合作有意私信!)
展开
-
C++反作弊对抗实战 (序言篇)
在ring3下面开发作弊器与反作弊,这两者之间的对抗,就好比老师在课堂上面讲课,而底下有一群七八岁的“小学生”在课桌底下互掐一样,虽然大家都觉得很“疼”,但彼此都很清楚的明白,当真正碰到那群初高中生或大学生的大神们,我这种“小学生”被攻破和吊打的话,只剩时间问题了......原创 2022-03-02 14:18:48 · 4489 阅读 · 0 评论 -
C++反作弊对抗实战 (目录篇)
在观看此专栏时,强烈推荐你需要有一定的C/C++基础,至少能看懂C++语法、结构体、类等基础概念,以及了解一定win32 api开发基础,否则不建议你强行介入以至于打击了学习热情原创 2022-03-02 14:18:24 · 2000 阅读 · 1 评论 -
一、C++反作弊对抗实战 (基础篇 —— 1.什么是指针与函数指针)
函数指针是一个指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数地址,这个指针对应的值(强转成char *),便是这个函数地址所对应固定的机器码字节,而指针变量的地址并不是固定的。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。原创 2022-03-02 14:19:23 · 540 阅读 · 0 评论 -
三、C++反作弊对抗实战 (实战篇 —— 6.游戏CS1.6流程API:AddToFullPack 实现反透视)
通常,在FPS射击游戏中会射击到玩家的很多重要的数据,比如玩家移动的脚步声,这个数据由客户端发送至服务端,而服务端通常会转发至所有客户端并存储当前位置,最终来绘制玩家的模型(人物、武器等等)原创 2023-05-25 20:15:26 · 691 阅读 · 0 评论 -
三、C++反作弊对抗实战 (实战篇 —— 4.辅助工具开发:利用MFC、Freetype、ImGui在OpenGL绘制滚动文字、窗口、菜单、按钮等控件)
利用MFC、Freetype、ImGui在OpenGL绘制滚动文字、窗口、菜单、按钮等控件。这一章节将讲述如何在OpenGL/DirectX环境的游戏中使用第三方的ImGui绘制常见的窗口和控件,例如菜单、按钮、复选框、滑动条等等,这一章节需要有一定的C++基础和Win32相关开发经验原创 2022-10-13 21:30:27 · 1456 阅读 · 1 评论 -
三、C++反作弊对抗实战 (实战篇 —— 3.如何获取游戏中角色人物角色的名称坐标、血量、武器信息(非CE扫描))
在上一章节中《三、C++反作弊对抗实战 (实战篇 —— 2.认识CS1.6常见的数据结构与流程)》我们了解了一些常见的数据结构与一些接口函数,在这里将介绍如何获取游戏中角色人物角色的名称坐标、血量、武器信息(非CE扫描)的方法。...原创 2022-08-28 18:52:56 · 1987 阅读 · 0 评论 -
三、C++反作弊对抗实战 (实战篇 —— 2.认识CS1.6常见的数据结构与流程)
这份代码里用到轻量级的imgui界面库,非常适合这些WG的环境,支持OPENGL、DX等等,我们将在下一章节介绍如果在利用hlsdk + imgui编写游戏里的辅助工具界面.原创 2022-07-10 18:11:19 · 1180 阅读 · 0 评论 -
三、C++反作弊对抗实战 (实战篇 —— 1.如何搭建CS1.6与CSGO服务端环境)
在2013以前,Steam的游戏服务端需要使用HLDSUpdateTool更新下载,现在已经全部迁移至SteamCMD来下载与更新。这个工具的介绍参考下面的链接:SteamCMD - Valve Developer Community下载地址:https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip在下载完毕后按照教程一步步操作即可!原创 2022-05-11 21:16:38 · 1158 阅读 · 1 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 18.如何检测与对抗各种调试器)
如何检测与对抗各种调试器为了应对破解者调试我们的反作弊系统,所以我们需要检测各种调试器,以此来判断我们的游戏是否正在被调试。本文将非常详细的由浅入深的介绍ring3下面各种常见的检测方法(包括示例代码)原创 2022-04-16 21:06:00 · 1784 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 14.利用内存加载+重定向绕过inline iat hook)
这一章节将详细的讲述《如何从一个DLL的资源中使用内存的方式加载另一个DLL》原创 2022-03-04 10:45:33 · 1324 阅读 · 1 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 16.如何实现游戏加速瞬移与对抗)
在早期的很多游戏中,相信很多人用过变速齿轮去实现游戏内的加速瞬移功能,它的原理就是针对QueryPerformanceCounter,GetTickCount,timeGetTime这几个API函数的HOOK。这里涉及到一个时钟的概念,当它们被HOOK API后,新的计算方法如下所示原创 2022-03-04 10:46:43 · 5860 阅读 · 1 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 17.如何内存校验保护代码段、对抗远程线程注入)
这一章节将重点介绍如何利用内存校验防止第三方模块或辅助软件恢复我们的HOOK或者篡改任意代码段,配套全程在2.17目录中,本专栏所有内容仅供学习参考,我们应当坚决抵制任何不非行为!原创 2022-03-05 00:26:38 · 1066 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 15.如何对抗OpenGL类型的透视作弊器)
在前面的章节中已经分析过OpenGL32类型作弊器的原理与代码片段,在这里将介绍如何其中一些对抗的方法......原创 2022-03-04 10:46:01 · 449 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 13.利用内联汇编实现多层深度检测非法call)
在上章节中介绍了利用ebp返回地址检测非法call函数调用、如何实现VS2010调试器的调用堆栈列表的方法,在这章节中,我们换另一种纯汇编实现的深度多层调用堆栈检测方法,示例代码如下:原创 2022-03-04 10:43:55 · 555 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 12.如何实现VS2010调试器的调用堆栈列表)
如何实现VS2010调试器的调用堆栈列表显示效果:在ring3环境下,我们并不能信任任何dll模块,包括系统API函数,通常都是使用内存加载与重定向修复一下,以防止我们的API函数不“干净”,在下一章节将讲解不使用任何API函数遍历调用堆栈的方法!原创 2022-03-04 10:42:07 · 543 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 11.利用ebp返回地址检测非法call函数调用)
这个示例代码已经介绍了如何利用ebp来检测上层的非法call调用,实际上在真正的反作弊场景上,我们肯定不会只检测一层的,会检测很深的层次,当然有个弊端就是检测层次越深,误报就极有可能越多,这里就特别需要配合游戏流程与架构......原创 2022-03-04 10:41:36 · 738 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 10.利用硬件断点 + 结构化异常VEH HOOK与对抗方法)
本章节详细讲述了VEH HOOK与检测、对抗的方法,本文对应的代码在2.09文件夹中。上面这些都只是一些基础的对抗方法,对抗与绕过都是一次思维上的跳跃,欢迎大家参与讨论并留言!原创 2022-03-04 10:41:03 · 1161 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 9.利用硬件断点 + 结构化异常 SEH HOOK)
SEH(Struct Exception Handler,结构化异常)VEH(Vector Exception Handler,向量异常处理)SEH是OS提供给线程来感知和处理异常的一种回调机制。在Intel Win32平台上,由于FS寄存器问题指向当前的TIB(线程信息块),因此FS:[0]处能找到最新的一个原创 2022-03-04 10:40:35 · 1222 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 8.认始 EAT IAT HOOK)
IAT与EAT HOOK示例原创 2022-03-04 10:39:53 · 688 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 7.函数钩子 inline Hook与对抗方法)
提其实在前面的章节已经详细介绍过原理与实现方法,可以点击进入查看https://blog.csdn.net/wangningyu/article/details/122926215这里我们给出一个最简单的的方法即可轻易绕过这种inline hook。首先我们在dll函数中直接伪造一个bypass_MessageBoxW函数,并恢复被之前的机器码字节,再跳转至偏移5字节后的地址即可,实现代码如下原创 2022-03-04 10:37:44 · 547 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 6.初识堆栈、函数调用栈帧、ESP、EBP)
假设目前有一个代码,函数调用顺序是:main ==>> fun1 ==>> fun2 ==>> fun3,那我们该如何在当前函数中(fun3),判断当前这个函数(fun3)正在被哪一个函数调用的,即如何获取到fun2地址呢?原创 2022-03-03 20:00:35 · 349 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 5.图文讲解PE文件结构)
PE即Portable Executable,是Win32环境自身所带的执行体文件格式,其部分特性继承自Unix的COFF(Common Object File Format)文件格式。PE表示该文件格式是跨win32平台的,即使Windows运行在非Intel的CPU上,任何Win32平台的PE装载器也能识别和使用该文件格式的文件。所有Win32执行体(除了VxD和16位的DLL)都使用PE文件格式,如EXE文件、DLL文件等,包括NT的内核模式驱动程序(Kernel Mode Driver)。原创 2022-03-03 20:00:15 · 412 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 4.遍历进程模块(暴力扫描整个内存找出被断链的))
提示:以下是本篇文章正文内容,下面案例可供参考一、前言由于上一章节中的MsgBox已经被抹去PE头、断链隐藏了DLL,导致将无法正常遍历出当前进程的所有模块,这时候就需要用到暴力内存的方法了。因为断链这种方法只能欺骗常规的CreateToolhelp32Snapshot、Module32First、Module32Next三个遍历函数,而当我们真正使用暴力扫描内存的方法后,这个”隐藏“的MsgBox.dll一样能被扫描出来。这里我们得用前面章节介绍的Native API ZwQueryVi...原创 2022-03-03 19:59:41 · 1000 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 3.遍历进程模块(默认))
3.遍历进程模块(默认),利用常规的CreateToolhelp32Snapshot、Module32First、Module32Next三个函数来遍历。原创 2022-03-03 19:59:01 · 397 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 2.作弊器中常见断链隐藏DLL方法)
目前,比较常见的模块隐藏方法有抹去模块的PE头、断开进程的LDR_MODULE链或者Hook模块枚举函数等,这里介绍前面抹去PE头、断链的方法。提示:以下是本篇文章正文内容,下面案例可供参考一、设置环境变量符号表示首先需要在系统环境变量中设置符号表自动下载,如下图:变量名:_NT_SYMBOL_PATH变量值:srv*D:/symbols*http://msdl.microsoft.com/download/symbols这里将是后面VS2010或windbg调试时将用到的.原创 2022-03-03 19:57:47 · 1254 阅读 · 0 评论 -
二、C++反作弊对抗实战 (进阶篇 —— 1.detours3.0钩子库编译与函数接口说明)
这是来自微软官方的源码文件,最新版已经至4.0支持更高的编译器版本,通常为了考虑兼容XP,我们不建议使用更高版本的detours库,以及Visual Studio版本,本文测试采用detours 3.0以及Visual Studio 2010。当然如果你不考虑XP问题的话,也可以直接使用detours 4.0以及更高的Visual Studio 2019等等。原创 2022-03-03 19:56:49 · 799 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 10.作弊器原理剖析OpenGL实战篇之透视、地图高亮、防闪光弹、防烟雾弹)
这里将以经典的FPS射击游戏CS1.6为例子,逐步探讨其中的原理与设计思路,让你能逐步理解这种在ring3层的各种对抗技巧。原创 2022-03-03 16:33:21 · 903 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 9.在ring3调用NtShutdownSystem关机与NtRaiseHardError蓝屏)
由于一篇幅的代码涉及到强制关机与显示蓝屏的部分,大家测试的时候尽量在虚拟机,否则后果负,手动滑稽~~// ZwShutdownSystem.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <Windows.h>#include "NTPublic.h"typedef UINT (CALLBACK* NTRAISEHARDERROR)(NTSTATUS, ULONG, PUNICODE_STRING, PVOID,HARDER原创 2022-03-03 09:42:32 · 836 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 2.注册表注入DLL)
在Windows NT/XP操作系统中,当需要加载user32.dll的程序启动时,user32.dll会加载注册表键HLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_dlls下面列出的所有模块。原创 2022-03-02 14:19:40 · 685 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 7.关于Windows Native API)
前言提这一章节主要讲述在ring3环境下,如何调用Nt系列内核API函数,封装将直接调用这些函数,可以很轻松的绕过一次常规API钩子处理,同时在后续的专栏中,将逐步部分引用并介绍。由于本人水平有限,下列部分翻译不准确望不惜纠正,不胜感激!一、什么是Windows Native API微软并没有公开所有原生 API,ntoskrnl.exe 中就有很多只提供给内核态使用的函数。Windows系统中大部分用户模式下的服务是在ntdll.dll中实现的,因为Native API接口函数..原创 2022-03-02 14:22:09 · 505 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 4.利用消息钩子注入DLL)
这里将主要用到Windows API函数SetWindowsHookEx,它是微软提供给程序开发人员进行消息拦截的一个API,不过它的功能不仅用作消息拦截,还可以进行DLL注入。原创 2022-03-02 14:20:24 · 532 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 3.利用APC注入DLL)
APC(Asynchronous Procedure Call),简称“异步过程调用”,是在一个特定线程环境下被异步执行的函数,分为用户模式(user mode)和内核模式(kernel mode)。原创 2022-03-02 14:20:07 · 641 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 6.利用LdrLoadDll远程线程注入DLL)
利用LdrLoadDll远程注入DLL(支持x32与x64)原创 2022-03-02 14:21:56 · 1110 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 8.在ring3调用NtTerminateProcess结束进程)
在ring3调用NtTerminateProcess结束进程原创 2022-03-02 14:22:23 · 400 阅读 · 0 评论 -
一、C++反作弊对抗实战 (基础篇 —— 5.PE导入表注入dll)
提在之前的文章中有详细讲解PE结构的,详情可以回顾一下:https://blog.csdn.net/wangningyu/article/details/122991132 导入表是Windows PE文件中的一种特殊数据结构,可执行程序(EXE)被加载到地址空间后,每个导入表的DLL模块都有一个对应的导入表,PE加载器会根据导入表来加原创 2022-03-02 14:20:58 · 589 阅读 · 0 评论