首页
社区
课程
招聘
[原创]网游动态反外挂的研究
发表于: 2016-2-16 16:26 18911

[原创]网游动态反外挂的研究

2016-2-16 16:26
18911

新年第一帖。
前言:
。现在的网络游戏反外挂早已经不是固定的,静态的检测代码了,这样做会让外挂制作者比较容易的通过排除法知道是外挂哪个部分行为被检测出来。现在更流行一种动态的外挂检测方案,这种方案就是把众多检测外挂的代码作为ShellCode形式放在服务端上面,再定时随机发送代码给客户端进行校验,客户端执行完ShellCode后再把结果回传给服务端进行校验,如果超时或者结果异常,就进行相应的处理(封号,T下线等)。在此感谢下李佳处长给我的实习机会。
正文:
  让我们先从客户端开始:
从连接到服务端的那一刻开始,客户端遍一直接受着来自服务端的网络消息,登陆消息啊,玩家状态同步消息阿等等,我们都不感兴趣。我们要看的是服务端发给客户端的动态执行反外挂代码的消息,它就是以下这几个消息

    ,MSG_CHECKCHEATREQ                      // 检查是否作弊
    ,MSG_CHECKCHEATACK                      // 检查是否作弊
    ,MSG_GETPROCESSLISTREQ                  // 请求获得客户端的进程列表
    ,MSG_GETPROCESSLISTACK                  // 回应进程列表
    ,MSG_REQNUMBERCODE                      // 请求客户端检测图片验证码
    ,MSG_ACKNUMBERCODE                      // 客户端应答图片验证码
case MSG_CHECKCHEATREQ:
		{
			playerMgr->OnMsgCheckCheatReq( pMsg );
		}
		break;
void CPlayerMgr::OnMsgCheckCheatReq( Msg* pMsg )
{
	MsgCheckCheatReq* pkMsg = ( MsgCheckCheatReq* )pMsg;
	int nValue = CheckCheatStatic( pkMsg );
	MsgCheckCheatAck msg;
	msg.nResult = nValue;
	GettheNetworkInput().SendMsg( &msg );
}
static int CheckCheatStatic( MsgCheckCheatReq* pMsg )
{
	LPVOID lpAddress = 0;
	try
	{
		uint32 nRet = 0;
		lpAddress = VirtualAlloc(
			NULL,                 // system selects address
			4096, // size of allocation
			MEM_COMMIT,          // allocate reserved pages
			PAGE_EXECUTE_READWRITE );
		if ( lpAddress == NULL )
		{ return 0; }
		SIZE_T nWriteSize = 0;
		if ( WriteProcessMemory( GetCurrentProcess(), lpAddress, (LPVOID)pMsg->szCode, pMsg->nLength, &nWriteSize ) == FALSE )
		{
			int nError = GetLastError();
			VirtualFree( lpAddress, 0, MEM_RELEASE );
			return 1; 
		}
		_asm
		{
			//lea eax,acTempCode;
			call lpAddress;
			mov nRet,eax;
		}
		VirtualFree( lpAddress, 0, MEM_RELEASE );
		return nRet;
	}
	catch( const char* )
	{
		VirtualFree( lpAddress, 0, MEM_RELEASE );
	}
	return 2;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 4
支持
分享
最新回复 (41)
雪    币: 1895
活跃值: (1657)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2


这个东西。。12年的时候做过一套基于lua的。后来改成shellcode。后来直接弃用。。

最大原因就是。。- - 这其实算是一个远程执行后门了。。

虽然是很方便。

国际惯例,感谢分享。
2016-2-16 16:46
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
“检测代码” 难道服务器下发出来就牛逼了? 和一开始就内置到客户端有何不同? 还不是要调用 API? 还不是得CRC?  这种玩意检测玩家挂倒是可行的,因为你可以拿到样本,随时加入特征码然后通过本文的方式实现不更新客户端的情况下下发出来。 但对于专业的工作室挂还是然并卵
2016-2-16 17:18
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
低调点,虚心学习,不要什么"然并卵".专业的工作室,也没有想象的那么厉害!只是人家不愿意整你罢了,工作室的存在也带动了游戏量,这个有时候是双赢的事!看公司的策略了而已!
2016-2-16 17:48
0
雪    币: 86
活跃值: (56)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
5
李佳处长请客啊
2016-2-16 18:25
0
雪    币: 93
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
李佳处长请客啊
2016-2-16 18:26
0
雪    币: 2375
活跃值: (433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
在实际游戏中使用的么?
2016-2-16 19:32
0
雪    币: 33
活跃值: (244)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
标记一下..........
2016-2-16 19:44
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
坦白的讲,我不看好利用这种可能导致游戏客户端不稳定的检测方式。shellcode带来的不确定因素太多
2016-2-16 19:52
0
雪    币: 428
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
dd
2016-2-16 19:53
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
支持9楼的看法,远程不远程,最终还是到客户的电脑上决战
2016-2-17 08:56
0
雪    币: 135
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
敢问高手 , 所说的是哪个游  戏的检测系统?
2016-2-17 09:27
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
人家只是说一下现在反外挂的方法,并不是特指某款游戏
2016-2-17 14:29
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
欢迎继续讲下去
2016-2-17 17:41
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
游戏都被整黄的不在少数。特别是那些代理国外的游戏,拿不到源代码,对外挂真的是望洋兴叹。 另外游戏公司每添加一种检测、保护,都要付出极为昂贵的代价,不是你想的弄个这种后门,就可以随时想放一段代码去运行一下就可以的
2016-2-17 18:36
0
雪    币: 35
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
为什么不用LUA ,lua可以opcode模式执行
2016-2-18 00:23
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
ShellCode不等于不稳定,取决于shellcode的质量
2016-2-18 08:50
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
这个如果被攻破的话,岂不是给了直接运行的渠道
2016-2-18 09:42
0
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
加1 话说你还不睡觉吗?
2016-2-18 10:27
0
雪    币: 226
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
貌似暴雪就用的这种方法吧?
2016-2-18 12:00
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
DXF CRC检测就是如此
2016-2-18 12:10
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
神TM能看到服务端代码,那还需要分析什么
2016-2-18 12:22
0
雪    币: 1327
活跃值: (370)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
23
关键是得保护你的代码(思路)不被还原,不然什么样的检测都没用
2016-2-18 17:35
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
美东时间比北京时间少13个小时啊
2016-2-19 08:36
0
雪    币: 70
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
总觉得哪里怪怪的,但是又说不出来。
2016-2-19 10:06
0
游客
登录 | 注册 方可回帖
返回
//