首页
论坛
专栏
课程

[原创]记录我与LOL检测迂回的这半个月: 第一篇

2019-2-4 19:50 13031

[原创]记录我与LOL检测迂回的这半个月: 第一篇

2019-2-4 19:50
13031
  • 1.稳定注入姿势
  • 2.处理TenRpcs检测CLL
  • 3.处理TCJ
  • 4.探测GameRpcs
笔者最近迷上LOL,中低分段总是有脚本,被虐的很惨
然后笔者去市场上买来几款外挂,配合防封,然后小逆了一下,发现市场上的防封软件大多是通对游戏 LoadLibraryExW 挂钩子,让某些检测模块不加载,在这种情况下,阻断了通讯,这样可以稳定的玩游戏5局左右,之后就会封7天或者三年,如果处理了TenRpcs里的检测CALL(技能释放一类的)就是7天,如果没有处理就是3年,然后经过笔者多处咨询,发现市面上没有能稳超过10把的防封,于是笔者想看看TP到底是什么手段检测的,于是我与LOL迂回了半月之久,废话不多说,进入正题

1.注入姿势:
笔者采用 MDL内存映射形式向游戏进程写入了我的DLLShellCode ,用 NtCreateThreadEx 创建远程线程,游戏未发现,目前这个注入姿势是稳定的

2.处理检测CALL:
笔者在游戏主模块处发现游戏挂了70个钩子指向TenRpcs.dll,不解释,盘他

BOOL RecoveryCode(ULONG32 地址, BYTE* 字节)
{
	BYTE 判断 = { NULL };
	DWORD 基址 = 0x400000;
	DWORD 修改前的页面保护属性 = NULL;

	RtlCopyMemory(&判断, LPVOID(基址 + 地址), 1);

	if (判断 != 0xE8)
	{
		全局变量::当前大区未开放检测数++;
		return FALSE;
	}

	if (VirtualProtect(LPVOID(基址 + 地址), 5, PAGE_EXECUTE_READWRITE, &修改前的页面保护属性))
	{
		RtlCopyMemory(LPVOID(基址 + 地址), 字节, 5);
		if (VirtualProtect(LPVOID(基址 + 地址), 5, PAGE_EXECUTE, &修改前的页面保护属性))
		{
			全局变量::处理检测成功次数++; //std::cout << "√ " << hex << 基址 + 地址 << std::endl;
			return TRUE;
		}
	}

	全局变量::处理检测失败次数++; //std::cout << "X " << hex << GetLastError() << std::endl;

	return FALSE;
}

VOID 处理检测()
{
	LPVOID 内存地址 = NULL;
	DWORD 函数地址 = NULL;
	DWORD 模块句柄 = NULL;
	DWORD 修改前的页面保护属性 = NULL;

	do 
	{
		窗口句柄::游戏窗口句柄 = FindWindow("RiotWindowClass", NULL);
	} while (!窗口句柄::游戏窗口句柄);

	///此处过检测代码由于危害腾讯安全给告知于19.02.05 21:30分删除此部分代码

	string Message = "处理失败 " + to_string(全局变量::处理检测失败次数) + " 个检测点\n成功处理 " + to_string(全局变量::处理检测成功次数) + " 个检测点\n当前大区未开放的检测点有 " + to_string(全局变量::当前大区未开放检测数) + " 个\n\n是否继续游戏???";

	if (MessageBox(窗口句柄::游戏窗口句柄, Message.c_str(), "", MB_ICONQUESTION | MB_YESNO | MB_TOPMOST) != IDYES)
		exit(0);
}

到这里的时候,笔者进行了游戏,发现封三年,于是笔者不开挂,只干检测一样被封三年,说明了什么

对!没错 CRC!不得不过 TP 检测系统的CRC有漏洞,过CRC代码如下,你会惊呆的

VirtualProtect(LPVOID(0x401000), 0x1028000, PAGE_EXECUTE, &修改前的页面保护属性)

哈哈,就是这么简单!这个为什么!咱就不多解释了,不是傻瓜都看得懂原理,我直接贴代码通俗易懂!

通过以上小操作后,单挂我自己的防封没有三年了,然后开始下一项工作,TCJ!

TCJ是干嘛的?在这里我科普一下,他会 EnumWindowProc 枚举你所有窗口,OpenProcess ReadFile... 太多了

总是TCJ负责一些外部检测以及内部检测,包括你注入的DLL文件,MD5哈希,窗口标题,类名,PE头,等等 .. 太多了

所以,想要完全达到防封状态,只干掉检测CALL还不行,必须要处理TCJ

于是我模仿了市场外挂 向 LoadLibraryExW 挂钩子,让TCJ在加载列表里消失,游戏不加载TCJ了,进入游戏爽

但是没爽多久5分钟后游戏弹出错误窗口,强制关闭,于是笔者调试跟踪到执行退出函数的点,发现在GameRpcs里,哇,还有这个东西,我都没注意!

于是分析了一下,这个GameRpcs非常不起眼,但是他起到重要的作用,他负责与TCJ和TenRpcs通讯!如果其中有一个模块有异常,他就会强制关闭游戏(本地命令)不是来自服务器的断开链接!而且通过笔者的CE遍历,遍历到了GameRpcs还会收集对局信息,包括当前玩家按下执行右键命令次数,玩家按下技能右键次数,等等信息,大家可以通过CE去搜索增加的值就可以,说到这里,我感觉这个检测系统好强大,收集这些数据是这是要人工分析吗??

笔者后续再写是怎么过的GameRpcs,先去看春晚了,大家新年快乐!


[公告]LV6级以上的看雪会员可以免费获得《2019安全开发者峰会》门票一张!!

最后于 2019-2-5 21:30 被苏苏苏苏苏苏编辑 ,原因:
打赏 + 16.00
打赏次数 3 金额 + 16.00
收起 
赞赏  八宝咸鱼   +5.00 2019/02/11 鱼某人,来暖贴啦
赞赏  junkboy   +1.00 2019/02/05 感谢分享~
赞赏  aabiaobiao   +10.00 2019/02/05 新年快乐 留个联系方式
最新回复 (29)
Chenxingyu 2019-2-4 20:02
2
0
原来还会记录右键的次数,我记得右键是走路来着
白菜大哥 2019-2-4 22:42
3
0
厉害
便衣网警 2019-2-5 04:03
4
0
看个文章成傻瓜了 哭唧唧
hzqst 3 2019-2-5 09:14
5
1
不是人工分析 有一个指定策略的 正常人走路都是频繁右键的 孤儿走路都是全程按住空格很少按右键(除非脚本脑残要冲塔了) 统计一下右键次数跟游戏时长的比值就能弄死大多数孤儿
像锤石灯笼秒插眼 弹道都没出来就秒走位这种  贴脸躲大 这种  服务端也可以识别(不知道是不是真的有,感觉工作量会很大)
当然 丢到深度学习里面做识别也是有可能的
被识别出来的人会有  刚入职没多久的新人(所谓 初级安全分析员)  人工的去查看TCJ上报的东西
如果TCJ上报的东西有异常 或者 根本没上报 那肯定得封你
最后于 2019-2-5 09:15 被hzqst编辑 ,原因:
白菜大哥 2019-2-5 09:29
6
0
hzqst 不是人工分析&nbsp;有一个指定策略的&nbsp;正常人走路都是频繁右键的&nbsp;孤儿走路都是全程按住空格很少按右键(除非脚本脑残要冲塔了) 统计一下右键次数跟游戏时长的 ...
这才是真正的反外挂,传说中的行为检测
苏苏苏苏苏苏 2019-2-5 19:21
7
0
hzqst 不是人工分析&nbsp;有一个指定策略的&nbsp;正常人走路都是频繁右键的&nbsp;孤儿走路都是全程按住空格很少按右键(除非脚本脑残要冲塔了) 统计一下右键次数跟游戏时长的 ...
你是我的偶像啊!哈哈~新年快乐!
wx_逍遥★小哥 2019-2-9 17:38
8
0
能给个源码看看么? QQ 1720138548  
黑洛 1 2019-2-9 21:40
9
1
点击右键次数是一个非常好的判断方式,而且这种方式大数据就能判断出来。再说说TCJ,TCJ这个东西我一直听他们做挂的说很好处理,实际上并不好处理。TCJ大概做了点什么事情呢?比如遍历当前游戏Game目录下的pe文件,先是特征,然后dump出pe头并上报,然后对于没见过的东西就要那些打杂的去人工分析(这是猜的,应该和大表哥说的差不多)。所以处理的时候,不能用暴力方法比如拦截tcj加载或者干脆不让他上报,最好的方式应该是r3 rootkit的思路,即勾住他的调用api然后从buffer里去掉你的模块。但是TP对于某些API采用的是shadow形式,也就是说,你要分析最好是从LOL进程里面搜索他使用的关键API特征(排除掉原模块),或者更根本的,hook CreateFile(也要搜),看看他读了哪些dll,shadow了哪些api,我是这么分析的。分析出来以后, 你也可以不必爆搜而是直接修改它读取的buffer,这样更效率一些。现在TP的全局CRC不再是从TenSLX里面出,而是使用shellcode的形式,要处理必须要动态定位。至于TenRpcs里面的处理,还是老一套,拦截收发包函数,GameRpcs,跟他的hash函数,复制过来修一下重定位可以直接跑不需要你去逆到底怎么写的,黑盒就行了,镜像法。我也分析过市场上的挂,他们处理CRC都是Sleep(100000000)这样的没错,确实这个方法最好,但是问题就是效率,打团的时候会卡,掉fps
   别的也没什么了,最难处理的还是TCj(我跟那些外挂作者的观点恰好相反)
killpy 2 2019-2-11 08:26
10
0
黑洛 点击右键次数是一个非常好的判断方式,而且这种方式大数据就能判断出来。再说说TCJ,TCJ这个东西我一直听他们做挂的说很好处理,实际上并不好处理。TCJ大概做了点什么事情呢?比如遍历当前游戏Game目录 ...
API采用shadow是啥意思  对于TenRpcs里面的处理,还是老一套,拦截收发包函数 这又是啥意思  
我是虫子 2019-2-11 13:33
11
0
黑洛 点击右键次数是一个非常好的判断方式,而且这种方式大数据就能判断出来。再说说TCJ,TCJ这个东西我一直听他们做挂的说很好处理,实际上并不好处理。TCJ大概做了点什么事情呢?比如遍历当前游戏Game目录 ...
现在CRC为什么在游戏模块的地址上下访问断不到了...
黑洛 1 2019-2-11 14:44
12
0
killpy API采用shadow是啥意思 对于TenRpcs里面的处理,还是老一套,拦截收发包函数 这又是啥意思
shadow就是shadowapi,意思是复制系统dll函数来调用,规避inline hook, 处理TenRpcs就是找到这个模块的发包和收包函数,处理发包是修改其中上报的“不合法内容”为合法,hook收包是为了监控一些数据变化。 
黑洛 1 2019-2-11 14:45
13
0
我是虫子 现在CRC为什么在游戏模块的地址上下访问断不到了...
你下硬件断点能断到。
我是虫子 2019-2-11 15:05
14
0
黑洛 你下硬件断点能断到。
这样断到是一块动态内存把..
wbqsohucom 2019-2-12 15:45
15
0
感谢分享
我是虫子 2019-2-13 07:25
16
0
黑洛 你下硬件断点能断到。
gamerpcs里的crc依旧找不到
又出bug了 2 2019-2-14 15:05
17
0
牛逼
萌新爱学习 2019-2-17 13:39
18
0
学到了学到了
小阿呆 2019-3-3 22:49
19
0
高手,学习了
l桀骜 2019-3-15 22:44
20
0
666666666
leevalour 2019-3-28 19:28
22
0
注入一直没搞定啊 给点思路?
wx_#有事就留言 2019-4-6 17:58
23
0
便衣网警 看个文章成傻瓜了 哭唧唧
呜呜呜 我也是
caoyuanyue 2019-4-8 18:32
24
0
膜拜,厉害了
wx_#有事就留言 2019-4-8 19:52
25
0
leevalour 注入一直没搞定啊 给点思路?
远程注入没问题,我还是找不到检测的call、
顾凡 2019-4-15 14:34
26
0
苏苏苏苏苏苏 你是我的偶像啊!哈哈~新年快乐!
大佬麻烦能加下我的QQ:1181887590   有偿请教。
大佬麻烦能加下我的QQ:1181887590   有偿请教。
大佬麻烦能加下我的QQ:1181887590   有偿请教。
murundong 2019-4-15 18:58
27
0
6666,叼叼叼,mark一下表示膜拜
mb_jhoepntq 2019-4-16 03:11
28
0
联系一波,合作qq26103596。谢谢大佬。麻烦看到加一下
mb_noxewhhc 2019-4-18 14:01
29
0
大佬学习下过LOL检测QQ1589664100
游客
登录 | 注册 方可回帖
返回