首页
论坛
专栏
课程

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

2019-2-5 11:30 13386

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

2019-2-5 11:30
13386
回顾一下前文提到的东西
游戏主要检测分为5大块 

  • 1.CALL检测 ->由TenRpcs负责
  • 2.文件及内存检测 - > 由TCJ负责
  • 3.客户行为游戏数据检测以及本地封包加密解密发送回传 - > 由GameRpcs负责
  • 4.本地机器码查询 - > 由PolicyProbe负责
  • 5.调试游戏等保护 -> 由TerSafe负责
我们需要处理的东西是1.2.3
机器码解决办法是 老办法 钩住 LoadLibraryExW 让  PolicyProbe 不在载入列表里即可过掉机器码检测
TerSafe 我们不做处理,没有必要

接下来我们编写一个注入到游戏大厅的DLL,然后转换成ShellCode,为了安全起见,先要把大厅的保护干掉
代码如下

VOID 干游戏大厅检测() //稳妥起见还是要干掉把
{
	INT 判断计次 = NULL;
	BYTE 判断字节 = NULL;
	DWORD 临时变量 = NULL;
	DWORD 修改前的页面保护属性 = NULL;

	ULONG32 模块地址 = NULL;

	do
	{
		模块地址 = ULONG32(GetModuleHandle("TenRpcs.dll"));
	} while (!模块地址);

	do
	{
		RtlCopyMemory(&判断字节, LPVOID(模块地址 + /*此处地址屏蔽*/), sizeof(判断字节));
	} while (判断字节 != 0x68);

	临时变量 = /*此处地址屏蔽*/;
	BYTE TenRpcs检测点1[] = { 0xE9, 0x60, 0x06, 0x00, 0x00, };
	if (VirtualProtect(LPVOID(模块地址 + 临时变量), sizeof(TenRpcs检测点1), PAGE_EXECUTE_READWRITE, &修改前的页面保护属性))
	{
		RtlCopyMemory(LPVOID(模块地址 + 临时变量), &TenRpcs检测点1, sizeof(TenRpcs检测点1));

		if (VirtualProtect(LPVOID(模块地址 + 临时变量), sizeof(TenRpcs检测点1), PAGE_EXECUTE, &修改前的页面保护属性))
		{
			RtlZeroMemory(TenRpcs检测点1, sizeof(TenRpcs检测点1));
		}
	}

	CloseHandle(保护检测线程句柄);
}

干掉这个检测点之后 游戏大厅的保护系统就崩溃了,包括TerSafe,所有检测不会初始化,不知道大厅检测什么,为了安全起见还是干掉把
一定要在第一时间注入,否则保护初始化完成就没机会了

VOID 等待游戏()
{
	INT 对局计次 = 1;
	HWND 窗口句柄 = NULL;
	DWORD 游戏进程ID = NULL;
	ULONG32 模块句柄 = NULL;
	INT 文字颜色[4] = { FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY };

	do
	{
		Sleep(100);
		窗口句柄 = FindWindow("RCLIENT", "League of Legends");
	} while (!窗口句柄);

	AllocConsole();
	srand((int)time(0));
	freopen("conout$", "w", stdout);
	CONSOLE_CURSOR_INFO Cursor_info = { 1, 0 };
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 文字颜色[rand() % 3 + 1]);
	//DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);

JMP1:

	std::cout << std::endl;
	std::cout << "[+] 正在等待游戏对局中" << std::endl;

	do
	{
		Sleep(10);
		游戏进程ID = GetPID("League of Legends.exe");
	} while (!游戏进程ID);

	if (内存注入远程线程DLL(游戏进程ID, hexData1, sizeof(hexData1)))
	{
		if (内存注入远程线程DLL(游戏进程ID, hexData2, sizeof(hexData2)))
			std::cout << "[+] 第" << 对局计次 << "场游戏对局已开始" << std::endl;
	}

	do
	{
		Sleep(100);
		游戏进程ID = GetPID("League of Legends.exe");
	} while (游戏进程ID);

	对局计次++;

	goto JMP1;
}

注入之后执行我们的循环代码,判断游戏是否启动




启动后第一时间注入我们的 ShellCode 并执行
DLL转ShellCode用010Editor即可

初步尝试1:抹掉TCJ
  • TCJ模块加载失败后,游戏正常运行5分钟后自动退出,上一篇文章说到是GameRpcs的问题然后尝试方案2
初步尝试2:抹掉GameRpcs+TCJ 
  • 正常游戏,不会掉线,大概打了3-4局之后,被服务器断开链接,封7天

初步尝试3:正常加载 GameRpcs+TCJ 在TCJ线程入口处返回Error
  • 游戏正常运行,7分钟左右掉线,打完一局掉5次线,和尝试1没有太大区别,检测处理0状态,笔者难受的打了5局,不会封7天也不会封三年,但是太难受
再次尝试4:改TCJ线程里的Sleep,Push 64 Push1470 等这些参数
  • 游戏正常运行,不会掉线,三年,说明了还是检测到了外挂,于是我把参数范围扩大到四字节,Sleep(1000000000)例如这样,笔者脑子坏掉了,开始这样做的时候想没有通讯肯定会7天,事实证明了我脑子进水了,的确是7天,没有必要做这个举动
到这里,我静下心来想,有没有一个完美的办法,既能让TCJ检测不到外挂特征,又能正常的与GameRpcs通讯呢
可行的办法1. 钩住所有TCJ调用的重要的Fun包括

笔者检查了一下,他的导入全都是外挂检测相关,如果要一个一个去处理,那我的工作量太大了,没有半个月一个月弄不完
然后又想有没有什么简单的方法,想想想了一晚上,最后想出了一个办法,预知结果如何,下次分解,今天先讲到这里


[推荐]看雪企服平台,提供安全分析、定制项目开发、APP等级保护、渗透测试等安全服务!

最后于 2019-2-6 17:06 被苏苏苏苏苏苏编辑 ,原因:
上一主题 下一主题
打赏 + 12.00
打赏次数 3 金额 + 12.00
收起 
赞赏  aabiaobiao   +10.00 2019/02/05 希望不要被有心人看到了加以利用
赞赏  Editor   +1.00 2019/02/05 感谢分享~
赞赏  junkboy   +1.00 2019/02/05 感谢分享~
最新回复 (27)
老牜lyh 2019-2-5 17:04
2
0
API干掉
苏苏苏苏苏苏 2019-2-5 17:35
3
1
那样太累了  而且搞不好还会被查到 然后最后的结果就是 你根本不知道他查到了哪里 然后就要一个API一个API去测
邓dg 2019-2-5 22:02
4
0
牛比
黑猫网警 2019-2-7 22:16
5
0
那个过检测CALL挺有用的 不过你把代码给删了。。。。。
DebugSp 2019-2-9 02:03
6
1
Tcj部分无非就是模块被拷贝!我记得是memcpy_0 And VecMemcpy
老C 2019-2-9 02:36
7
0
什么时候更新,等好久了。
killpy 2 2019-2-9 09:23
8
0
牛逼
DebugSp 2019-2-9 15:19
9
0
腾讯原来在TenRpcs添加了GetOemcp!难怪突然狂封机器码!
苏苏苏苏苏苏 2019-2-9 15:33
10
0
DebugSp 腾讯原来在TenRpcs添加了GetOemcp!难怪突然狂封机器码![em_2]
打开Dbgview,然后打开游戏大厅,他会调试输出你的机器码,你可以看下!
Cohen 2019-2-9 20:42
11
0
楼主这个是什么工具啊 我想要
killpy 2 2019-2-11 08:14
12
0
什么工具 同问
邓dg 2019-2-12 09:13
13
0
无码
Ai专户 2019-2-12 10:36
14
0
机器码锁了怎么解决
三二一六个六 2019-2-13 00:19
15
0
apex大木马研究的怎么样了 终极猥琐,我名称企鹅末尾加个4一起研究?
冷风Feng 2019-2-13 14:28
16
0
我看了半天也没看出来是怎么找到的
萌新爱学习 2019-2-17 13:42
17
0
牛逼
MRRighter 2019-2-18 10:04
18
0
killpy 什么工具 同问
studyPE
MRRighter 2019-2-18 10:04
19
0
Cohen 楼主这个是什么工具啊 我想要
studyPE 自己下一个
一个懒人 2019-2-27 12:22
20
0
你那个可以查看DLL的工具叫什么名字啊
小阿呆 2019-3-3 22:49
21
0
厉害
l桀骜 2019-3-15 22:45
22
0
66666666666
韩h 2019-3-22 14:05
23
0
此楼层已删除
书生我怕怕 2019-3-29 15:16
24
0
牛批
吴委员长 2019-3-31 18:29
25
0
什么语言??
旮旯旮旯 2019-4-2 22:47
26
0
求个思路2215927982
pureGavin 2019-4-8 21:39
27
0
mark,楼主辛苦了
顾凡 2019-4-15 14:32
28
0
苏苏苏苏苏苏 那样太累了 而且搞不好还会被查到 然后最后的结果就是 你根本不知道他查到了哪里 然后就要一个API一个API去测
大佬麻烦能加下我的QQ:1181887590   有偿请教。
大佬麻烦能加下我的QQ:1181887590   有偿请教。
大佬麻烦能加下我的QQ:1181887590   有偿请教。
游客
登录 | 注册 方可回帖
返回