首页
社区
课程
招聘
[推荐]ByeCheater :新一代在线游戏反作弊解决方案[反外挂][反作弊][游戏安全]
发表于: 2020-9-2 23:18 19438

[推荐]ByeCheater :新一代在线游戏反作弊解决方案[反外挂][反作弊][游戏安全]

2020-9-2 23:18
19438

对抗技术是该解决方案的核心,从当前底层设计方面来说我们强于任何现有已知的保护系统,无论是BE、还是EACVACNP等...。驱动级的支持在计划中...

欢迎投资人以及相关游戏/软件公司联系合作。
联系方式:论坛私信或邮箱~

了解更多...

方便大家测试 关闭了虚拟机检测、联网心跳校验
密码:123

反外挂, 游戏安全, 安全分析, 软件保护, 验证系统

 
 
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-6-12 10:37 被byecheater编辑 ,原因: 1
上传的附件:
收藏
免费 1
支持
分享
最新回复 (74)
雪    币: 137
活跃值: (1420)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有驱动的游戏反作弊是没有任何作用的
2020-9-3 12:35
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
huojier 没有驱动的游戏反作弊是没有任何作用的[em_2]

现在即使在未使用内核级防御的情况下也无法调试测试程序,而调试分析无论是在正面(分析病毒...)或反面(制作辅助、病毒...)的作用之大不言而喻。
辅助的利益市场非常大,有强大的利益驱动相关人员研究。
所以,不存在绝对的防御,我们目的是通过公开/自身非公开的研究以及对攻击方式的理解细化防御体系,提升攻击者的成本。

最后于 2020-9-3 13:18 被byecheater编辑 ,原因:
2020-9-3 13:17
0
雪    币: 6657
活跃值: (4506)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
4

2020-9-3 13:29
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
能正常下软/硬断点吗,断`printf`函数 或者使用调试器暂停
2020-9-3 13:31
0
雪    币: 461
活跃值: (949)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
byecheater huojier 没有驱动的游戏反作弊是没有任何作用的[em_2] 现在即使在未使用内核级防御的情况下也无法调试测试程序,而调试分析无论是在正面(分析病毒...) ...
没有内核级的防护,那些大佬直接驱动修改系统,hook系统函数,自建调试体系。你的保护就和纸一样。虽然驱动级也会被攻破,但是总比没有的强得多。
2020-9-3 13:33
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
欲望的奴隶 没有内核级的防护,那些大佬直接驱动修改系统,hook系统函数,自建调试体系。你的保护就和纸一样。虽然驱动级也会被攻破,但是总比没有的强得多。
这个的确是,首先是要筛掉技术不精+使用各位大佬的插件的人员,然后就是针对团伙作案,他们有更强的技术储备和人力,我们再就是要通过驱动反制,但是奈何目前资金和人力不够,导致项目无法按期进行,所以来征求合作。任何对此前景看好+有创业想法的都可以联系邮箱 byecheater@tutanota.com,还有没驱动并不是技术不行。。。。计划是先用户再常规驱动再就是VT加持
2020-9-3 13:41
0
雪    币: 5492
活跃值: (3317)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
说实话你或许能筛掉技术不精的 但是你筛不掉使用大佬插件的人员 你这东西一旦有产品使用 且有逆向价值 那就会有大佬去开发插件给这些使用插件的人员去使用
2020-9-3 13:49
0
雪    币: 1613
活跃值: (2827)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
byecheater 能正常下软/硬断点吗,断`printf`函数 或者使用调试器暂停
下内存执行断点,断到dll的入口,调试即可
2020-9-3 13:51
0
雪    币: 137
活跃值: (1420)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
byecheater huojier 没有驱动的游戏反作弊是没有任何作用的[em_2] 现在即使在未使用内核级防御的情况下也无法调试测试程序,而调试分析无论是在正面(分析病毒...) ...
你们面对的是游戏外挂,不是类似于VMP一样的反调试
游戏外挂最终目的是读写或者hook游戏函数.面对读写或者hook游戏函数这方面看起来似乎你们没有做好准备.现在也仅仅是一个反调试的样子
2020-9-3 14:02
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
随风行 下内存执行断点,断到dll的入口,调试即可

就是修改内存页面或veh这中方式呗,这个目前并未反制,有方法但是的承认上驱动会效果会更好。


有必要要说明的是 你断点dllmain是没有意义 游戏都未加载完 。 真正过掉是是随时随意下软硬断点 很显然是没办法的

最后于 2020-9-3 20:27 被byecheater编辑 ,原因:
2020-9-3 14:03
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12

我相信各位大佬肯定是有能力过掉反调试,然后就是大佬愿不愿意公开方法,然后公开了是片段代码还是整个源码,
比如用易的他们大部分是没有能力开发驱动的,还有一些逆向/病毒分析人员代码能力不是那么好的
说实话目前国内由于伸手党的原因导致分享氛围是比较差的,
大佬们的热心被消磨殆尽,更不用说还有已经成名的大佬有家庭孩子事业有成又或者是996的影响 
这个反作弊是完整的解决方案不仅仅是通过反调试,各类读写权限限制,还有很重要的风控系统

@尐进

最后于 2020-9-3 16:14 被byecheater编辑 ,原因:
2020-9-3 14:06
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13

preview预览版,看看市场人员(技术大佬)的反应,根据情况是否进行下去,比如说主要现在各位愿意交流的大佬 非常感谢。
-------------

现在整个项目框架已搭建好 比如,
1. 客户端到服务端的框架使用boost.asio
1. 通讯加密(包括驱动)使用修改版的aes等。。。
1. 整个项目自动ci/cd
1. 服务器数据储存使用sqllite,客户端数据使用自定义加密格式+lz4压缩

目前就是前端与数据库交互 还有大家有争议的驱动保护功能未完成
然后就是在整个框架进行研究+增添代码


@huojier

最后于 2020-9-3 14:19 被byecheater编辑 ,原因:
2020-9-3 14:18
0
雪    币: 6657
活跃值: (4506)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
14

//DEMO


#include <iostream>
#include <vector>

#include <windows.h>
#include <boost/thread.hpp>

boost::mutex g_thread;

unsigned int SRand()
{
       return (unsigned int)__rdtsc();
}

DWORD GetRandStart(DWORD dwBase, DWORD dwSize)
{
       DWORD dwRet = 0;

       try
       {
               if (0 == dwSize)
               {
                       return dwRet;
               }

               ::srand(SRand());

               dwRet = dwBase + ::rand() % dwSize;

               if (0 == dwRet)
               {
                       GetRandStart(dwBase, dwSize);
               }
       }
       catch (...)
       {
               dwRet = 0;
       }

       return dwRet;
}

VOID CALLBACK WaitOrTimerCallback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
{
       try
       {
               boost::unique_lock<boost::mutex> tLock(g_thread);

               std::cout << "地球最强反调试!!! \r\n";

               MEMORY_BASIC_INFORMATION memory;
               ::memset(&memory, 0, sizeof(memory));

               DWORD pFind = NULL;
               std::vector<MEMORY_BASIC_INFORMATION> memTable;

               while (::VirtualQuery((LPVOID)pFind, &memory, sizeof(memory)) == sizeof(memory)) {

                       if (memory.State == MEM_FREE) {

                               memory.AllocationBase = memory.BaseAddress;
                       }

                       {
                               memTable.push_back(memory);
                       }

                       pFind += memory.RegionSize;
                       ::memset(&memory, 0, sizeof(memory));
               }

               if (!memTable.empty())
               {
                       for (auto i : memTable)
                       {
                               if (MEM_FREE & i.State)
                               {
                                       DWORD dwThreadBase = GetRandStart((DWORD)i.AllocationBase, i.RegionSize);

                                       if (0 != dwThreadBase)
                                       {
                                               HANDLE hTheadd = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)dwThreadBase, 0, 0, NULL);

                                               if (NULL != hTheadd)
                                               {
                                                       ::CloseHandle(hTheadd);
                                               }
                                       }

                                       break;
                               }
                       }
               }
       }
       catch (...)
       {

       }
}

void dbg_dump(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
       __try
       {
               ::WaitForSingleObject(::GetCurrentThread(), INFINITE);
       }
       __except (EXCEPTION_EXECUTE_HANDLER)
       {

       }
}

LONG WINAPI bad_exception(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
       dbg_dump(ExceptionInfo);

       return true;
}

int main()
{
       ::SetUnhandledExceptionFilter(::bad_exception);

       HANDLE hThread = ::CreateTimerQueue();

       if (NULL != hThread)
       {
               HANDLE hTimer = NULL;

               if (::CreateTimerQueueTimer(&hTimer, hThread, WaitOrTimerCallback, NULL, 0, 3000, WT_EXECUTEDELETEWAIT))
               {
                       getchar();

                       ::DeleteTimerQueueTimer(hThread, hTimer, INVALID_HANDLE_VALUE);
               }

               ::DeleteTimerQueue(hThread);
       }

       return 0;
}

最后于 2020-9-3 15:29 被yimingqpa编辑 ,原因:
2020-9-3 15:28
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
yimingqpa //DEMO#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;vector&gt;#include&amp ...

编译了你这段代码 无法正常运行 看了下 用线程执行无效地址 这样子做有何意义 也未处理 如果你怀疑我有这样的处理的话 很显然。。。没有。。。。 但是你这个加上异常处理也是一种思路

最后于 2020-9-3 15:53 被byecheater编辑 ,原因:
2020-9-3 15:53
0
雪    币: 290
活跃值: (735)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16

什么都没干 打开就闪退?  这么不稳定东西 游戏公司会要?

2020-9-3 20:36
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
初学者有毅力 什么都没干 打开就闪退?  这么不稳定东西 游戏公司会要?

你好这是个预览测试版  我们的测试环境是全新win7 32和64  没有在复杂环境比如装杀毒软件 或者是否有动不动爱注入模块hook这样子的软件?如果是 是正常的 还未做处理 如果不是能方便告诉我具体版本吗  谢谢

最后于 2020-9-3 20:48 被byecheater编辑 ,原因:
2020-9-3 20:47
0
雪    币: 290
活跃值: (735)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
byecheater 初学者有毅力 什么都没干&nbsp;打开就闪退?&nbsp; 这么不稳定东西&nbsp;游戏公司会要? 你好这是个预览测试版&n ...
win7 旗舰版    32位   什么都没有运行  重启电脑后   软件启动闪退
2020-9-3 22:45
0
雪    币: 8452
活跃值: (5046)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
19
byecheater 初学者有毅力 什么都没干&nbsp;打开就闪退?&nbsp; 这么不稳定东西&nbsp;游戏公司会要? 你好这是个预览测试版&n ...
输入法的模块注入了
2020-9-3 22:48
0
雪    币: 12502
活跃值: (3068)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
为什么好多人老喜欢把反外挂理解为反调试和反注入。。
2020-9-4 07:40
0
雪    币: 12857
活跃值: (9172)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
21

槽点太多了,我一条条说下:


现在即使在未使用内核级防御的情况下也无法调试测试程序,而调试分析无论是在正面(分析病毒...)或反面(制作辅助、病毒...)的作用之大不言而喻。

不使用内核那不就是纸糊的,而且反调试意义不是很大,都0202年了静态分析工具很成熟了,只要代码不加密,不用调试光静态分析也能做个大差不差的挂。


客户端到服务端的框架使用boost.asio

本人能力不足,不评价


通讯加密(包括驱动)使用修改版的aes等

本人能力不足,不评价


自动ci/cd

这个难道不是正规互联网公司的基本规范吗?正规项目不做ci的都可以入土了,这也值得拿出来说吗。这又不是那个大家还在用FTP传代码的年代了。


服务器数据储存使用sqllite

后端用sqlite存数据就算了,我可以认为你只是demo,以后还能上支持海量数据的分布式数据库,先不评价


客户端数据使用自定义加密格式+lz4压缩

本人能力不足,不评价


计划是先用户再常规驱动再就是VT加持

能说出给反作弊上VT加持这种话的,一看就是在国内没有做过成熟产品的经验


吐槽完毕

最后于 2020-9-4 07:57 被hzqst编辑 ,原因:
2020-9-4 07:52
1
雪    币: 711
活跃值: (253)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22

都0202年了内核反调试难道不是重头戏吗,好歹抄一下某P。

最后于 2020-9-4 08:55 被mydvdf编辑 ,原因:
2020-9-4 08:48
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
白菜大哥 为什么好多人老喜欢把反外挂理解为反调试和反注入。。
我们的理解它是第一道防线 说远一点 修长城 御敌于千里之外 说近一点 坚壁清野
十年前有以上可能就满足需求了 但现在风控系统是不可或缺的。
2020-9-4 08:56
0
雪    币: 12502
活跃值: (3068)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
其实你有这个精力写驱动,完全可以大数据来,就是模仿wireshark做抓包,当然是最好是读取物理层,再不行链路层也可以,只要能想办法解析回去ip地址就行,知道客户连接了哪些ip,查找是不是那些外挂发卡平台的ip,如果发现某些客户你的游戏一开,这些ip就连,那就说明用了商业外挂,可以一锅端了。
解析到ip地址以后,当你的游戏一运行,发现总有一些奇怪的ip连接,然后就可以尝试找,如果是那些什么发卡网站或者卡盟之类的,一看就是外挂,这样直接一锅端了。这个比什么驱动反调试厉害多了。
2020-9-4 09:09
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
hzqst 槽点太多了,我一条条说下:现在即使在未使用内核级防御的情况下也无法调试测试程序,而调试分析无论是在正面(分析病毒...)或反面(制作辅助、病毒...)的作用之大不言而喻。不使用内核那不就是纸糊的,而且 ...

感谢指出。

---------

单靠静态分析我个人认为还是较为困难的,就比如fps游戏 都有个矩阵的东西 但凡要做这种这个类型游戏的都绕不过它。更不用说看到大手子动不动就子弹追踪这种
现在只要稍有安全意识的都知道游戏加密这块东西 不调试单靠ce 。 像csgo这种直接给接口用的当我没说。。。
再就是rpg这类 这类也是绕不开 如果有注意到这方面类型的教程的话 
从最低级喊话call 都有个特点 “断发包函数”、“堆栈往上翻”、“下访问断点” 。

驱动保护很重要,就像前面有大佬说的自建调试体系 我看这个概念也说了十多年了 但还是没成品 
所以我们是从基础防线筑起,一步步提高门槛,并不是一开始就驱动
好比说 我一开始提出上准备vt且大规模应用 一看就不靠谱的 对吧

-----------------------

自动ci/cd 这块本意是想说明目前已经有相当于正规互联网公司的基本开发流程,毕竟我们目前还是在起步阶段。

--------------------------------------------

vt 做出来在一台或几台机器运行很容易,但大规模使用很难,这也是我们在计划列表这块放最后的原因。

最后于 2020-9-4 09:45 被byecheater编辑 ,原因:
2020-9-4 09:16
0
游客
登录 | 注册 方可回帖
返回
//