吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19722|回复: 74
收起左侧

[游戏安全] 分析某对战平台的反作弊系统(基于CSGO娱乐模式)

  [复制链接]
untiy 发表于 2020-12-25 22:20
OK,该反作弊系统使用应用层检测+驱动层检测,进入CSGO对战后观察pchunter,发现反作弊驱动cheano_drv.sys,截图如下:
QQ截图20201225212150.png
用魔盾分析一下,发现有ObRegisterCallbacks、ObUnRegisterCallbacks、321000,就代表有内核回调函数进行句柄监视,截图如下:
2.png



OK,我们回到pchunter查看,发现的确有相关回调,截图如下:
3.png


OK,我们现在要看看这个反作弊系统的基本运行行为,所以我就尝试挂钩做一下监听
挂钩了NtCreateFile、NtDeviceIoControlFile、NtQuerySystemInformation(懂了人自然懂,当然还可以挂钩其它函数,例如注册表相关),源码如下:


[C++] 纯文本查看 复制代码
	typedef NTSTATUS(*F_NtCreateFile)(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG);
	F_NtCreateFile f_NtCreateFile = 0;
	NTSTATUS MyNtCreateFile(
		PHANDLE FileHandle,
		ACCESS_MASK DesiredAccess,
		POBJECT_ATTRIBUTES ObjectAttributes,
		PIO_STATUS_BLOCK IoStatusBlock,
		PLARGE_INTEGER AllocationSize,
		ULONG FileAttributes,
		ULONG ShareAccess,
		ULONG CreateDisposition,
		ULONG CreateOptions,
		PVOID EaBuffer,
		ULONG EaLength)
	{
		if (PsGetCurrentProcessId() == m_pid)
			log("NtCreateFile : %wZ", ObjectAttributes->ObjectName);

		return f_NtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
	}

	typedef NTSTATUS(*F_NtDeviceIoControlFile)(HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, PVOID, ULONG);
	F_NtDeviceIoControlFile f_NtDeviceIoControlFile = 0;
	NTSTATUS MyNtDeviceIoControlFile(
		HANDLE FileHandle,
		HANDLE Event,
		PIO_APC_ROUTINE ApcRoutine,
		PVOID ApcContext,
		PIO_STATUS_BLOCK IoStatusBlock,
		ULONG IoControlCode,
		PVOID InputBuffer,
		ULONG InputBufferLength,
		PVOID OutputBuffer,
		ULONG OutputBufferLength)
	{
		if (PsGetCurrentProcessId() == m_pid)
			log("NtDeviceIoControlFile : %d", IoControlCode);

		return f_NtDeviceIoControlFile(FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, IoControlCode, InputBuffer, InputBufferLength, OutputBuffer, OutputBufferLength);
	}

	typedef NTSTATUS(*F_NtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG);
	F_NtQuerySystemInformation f_NtQuerySystemInformation = 0;
	NTSTATUS MyNtQuerySystemInformation(
		SYSTEM_INFORMATION_CLASS SystemInformationClass,
		PVOID SystemInformation,
		ULONG SystemInformationLength,
		PULONG ReturnLength)
	{
		if (PsGetCurrentProcessId() == m_pid)
			log("NtQuerySystemInformation : %d", SystemInformationClass);

		return f_NtQuerySystemInformation(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);
	}


准备完毕之后,我登陆平台,进入CSGO的娱乐模式,然后退出游戏,退出平台,就得到了2000多条的调用记录,截图如下:(可能排位模式会有所不同,待测试)
4.png


OK,现在我们就可以慢慢分析这个反作弊系统的一些行为了
因为数据比较多,所以我就分析几条重要的,其余的留给你们自己分析


1.使用NtQuerySystemInformation函数遍历驱动、进程、模块信息,针对这个我们可以Hook,隐藏我们不想被它遍历到的驱动和进程
62和63就是遍历进程的DLL模块,11就是遍历系统加载的驱动程序,5就是遍历系统内运行的进程,还有一些有意思的数字你们自己去分析,比如说反调试,截图如下:
5.png

2.大量使用命名管道进行一些通信,例如\??\pipe\mojo.xxxxxx,我们可以选择性的截断一部分通信,看看对游戏正常运行是否有什么影响,截图如下
6.png

3.进过观察发现最主要的一点,启动游戏有一个Code是4655111,然后结束游戏后有一个Code是4655116,初步判断,它们是反作弊系统的启动检测和停止检测相关,
然后我们游戏开始的时候就替换为4655116,那就代表反作弊的主要检测功能不工作,截图如下:
7.png


OK,到这里就差不多了,初步的解决方案就是 :
1.替换反作弊驱动cheano_drv.sys内的回调函数地址,修改为我们的内核回调函数地址,让它的句柄监视无效,能够任意读写游戏内存
2.过滤命名管道的通信,尽可能多的阻断与进程或者内核的通信(主程序下有多个子程序,应当是跨进程通信相关)
3.一直修改为4655116,让反作弊系统的检测不工作
4.Hook住NtQuerySystemInformation函数,过滤掉我们自己的辅助程序和读写驱动,实现隐身
5.Hook住NtCreateFile函数,将尝试读取我们文件的操作全部阻断掉,二次防护



最后放上Log文件让你们自己去分析
5E分析.txt (191.11 KB, 下载次数: 161)




免费评分

参与人数 32威望 +2 吾爱币 +128 热心值 +26 收起 理由
_小白 + 1 + 1 我很赞同!
V1c123 + 1 用心讨论,共获提升!
jackeyzhao + 1 谢谢@Thanks!
AiniMoco + 1 谢谢@Thanks!
imateng + 1 我很赞同!
姆町验证 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
啦啦得 + 1 + 1 谢谢@Thanks!
绝地飞鸿 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
剑圣戏金莲 + 1 + 1 谢谢@Thanks!
FJFJ + 1 + 1 谢谢@Thanks!
YuFeng13 + 1 + 1 谢谢@Thanks!
sugar12341 + 1 + 1 我很赞同!
神枪泡泡丶 + 2 + 1 用心讨论,共获提升!
Trafalgar + 1 用心讨论,共获提升!
愤怒的X苹果 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
红烧排骨 + 1 热心回复!
a123456l9 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
带司 + 1 + 1 我很赞同!
无字情书 + 1 用心讨论,共获提升!
cms061817 + 1 + 1 我很赞同!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
caisege + 1 + 1 5e反作弊退出群聊
小怪兽01 + 1 + 1 用心讨论,共获提升!
asq56747277 + 1 + 1 谢谢@Thanks!
seiya + 1 谢谢@Thanks!
gunxsword + 1 + 1 谢谢@Thanks!
5ud0 + 1 + 1 我很赞同!
yan182 + 1 + 1 我很赞同!
netspirit + 1 我记得这些游戏只要有类似pchunter的工具就不让你打开的
没有烟抽的日子 + 1 + 1 用心讨论,共获提升!
晚辈小生 + 2 + 1 5e 反作弊表示很淦
专属丨小天 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lomgas 发表于 2020-12-25 22:28
你这文件名称暴露了。
PrincessSnow 发表于 2020-12-26 01:09
可爱的兔子00 发表于 2020-12-25 22:28
专属丨小天 发表于 2020-12-25 22:35
用心讨论,共获提升!
5524152 发表于 2020-12-25 23:18
不愿透露名字的CS
snrtdwss 发表于 2020-12-25 23:27
66666
你喜欢大白吗 发表于 2020-12-25 23:49
大佬牛皮
黄枫叶 发表于 2020-12-26 00:08
大佬牛皮
另外,大佬你好,关于这篇帖子 https://www.52pojie.cn/thread-1314107-1-1.html
可否做一个Reclass.NET的版本??  reclassEx 很久没更新了,而且有bug,不能查看虚函数,而且插件系统也不如reclass.net 版好用。。。
小能维尼 发表于 2020-12-26 00:36
一张图片有什么好怕的。
zhaokangquan 发表于 2020-12-26 01:07
这个是小儿科把
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 20:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表