OK,该反作弊体系使用应用层检测+驱动层检测,进入CSGO对战后观察pchunter,发现反作弊驱动cheano_drv.sys,截图如下:
用魔盾分析一下,发现有ObRegisterCallbacks、ObUnRegisterCallbacks、321000,就代表有内核回调函数进行句柄监视,截图如下:
OK,我们回到pchunter查看,发现简直有相关回调,截图如下:
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多条的调用记载,截图如下:(大概排位模式会有所不同,待测试)
OK,现在我们就可以慢慢分析这个反作弊体系的一些行为了
由于数据比较多,所以我就分析几条紧张的,别的的留给你们自己分析
1.使用NtQuerySystemInformation函数遍历驱动、进程、模块信息,针对这个我们可以Hook,隐藏我们不想被它遍历到的驱动和进程
62和63就是遍历进程的DLL模块,11就是遍历体系加载的驱动程序,5就是遍历体系内运行的进程,还有一些有意思的数字你们自己去分析,比如说反调试,截图如下:
2.大量使用命名管道进行一些通讯,比方\??\pipe\mojo.xxxxxx,我们可以选择性的截断一部分通讯,看看对游戏正常运行是否有什么影响,截图如下
3.进过观察发现最主要的一点,启动游戏有一个Code是4655111,然后结束游戏后有一个Code是4655116,开端判定,它们是反作弊体系的启动检测和制止检测相关,
然后我们游戏开始的时候就替换为4655116,那就代表反作弊的主要检测功能不工作,截图如下:
OK,到这里就差不多了,开端的解决方案就是 :
1.替换反作弊驱动cheano_drv.sys内的回调函数地址,修改为我们的内核回调函数地址,让它的句柄监视无效,能够恣意读写游戏内存
2.过滤命名管道的通讯,尽大概多的阻断与进程大概内核的通讯(主程序下有多个子程序,应当是跨进程通讯相关)
3.不停修改为4655116,让反作弊体系的检测不工作
4.Hook住NtQuerySystemInformation函数,过滤掉我们自己的辅助程序和读写驱动,实现隐身
5.Hook住NtCreateFile函数,将尝试读取我们文件的操作全部阻断掉,二次防护
最后放上Log文件让你们自己去分析
5E分析.txt
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |