上篇教程:
前言
经过前两篇教程的学习,相信大家对于逃跑吧少年的非法进程检测有了一些了解,但是这里还是需要强调下。教程学的是方法是思路,要知道举一反三,不要困死在教程例子这一个游戏之中。
导入与准备
如同上篇教程结尾所说,如果一定要修改跳转那么我们怎么处理会触发的闪退呢?在教程开始之前我们再来简单认识一个函数。
ExitProcess
ExitProcess 结束调用的进程及其所有的线程
首先我们已知,直接修改跳转会触发游戏的其他保护导致游戏闪退,即游戏进程退出,那么我们要想防止它退出就可以从有关结束进程的函数入手。
[注:可以达到结束进程的方法有很多,这里专指本游戏中此处闪退调用的方法]
开始
前面教程中已有的步骤这里会进行一些跳过,我们直奔主题。
首先,CE查看内存 → 右键 → 转到地址 → 填入ExitProcess → 点击确定。
如图所示,这就是ExitProcess函数。
因为一旦调用这函数游戏进程就会退出,为了方便测试我们可以把函数头部mov eax,eax
修改为ret
,这样做的原因可以避免游戏退出,但是也很可能会导致运行出错。
但是在这个游戏中我们可以这样做,至于原因后面就知道了。
F5在ret处下个断点。
好了 到此为止,我们的准备工作就做好了。下面按照教程(一)中的方法,0F86 59060000 - jbe snake_pc_helper.dll+118127
为 E9 5A060000 - jmp snake_pc_helper.dll+118127
经过一段时间的等待,游戏闪退终于触发了。因为我们已经把头部修改为了ret
这里我们直接按下F8
就可以回到调用退出的地方。
如图所示,这就是调用ExitProcess
函数让游戏闪退的地方。
这里有必要复制下代码
snake_pc_helper.dll+13FAF0 - 55 - push ebp
snake_pc_helper.dll+13FAF1 - 8B EC - mov ebp,esp
snake_pc_helper.dll+13FAF3 - 81 EC 60010000 - sub esp,00000160 { 352 }
snake_pc_helper.dll+13FAF9 - 53 - push ebx
snake_pc_helper.dll+13FAFA - 56 - push esi
snake_pc_helper.dll+13FAFB - 57 - push edi
snake_pc_helper.dll+13FAFC - 8D BD A0FEFFFF - lea edi,[ebp-00000160]
snake_pc_helper.dll+13FB02 - B9 58000000 - mov ecx,00000058 { 88 }
snake_pc_helper.dll+13FB07 - B8 CCCCCCCC - mov eax,CCCCCCCC { -858993460 }
snake_pc_helper.dll+13FB0C - F3 AB - repe stosd
snake_pc_helper.dll+13FB0E - A1 E017C574 - mov eax,[snake_pc_helper.dll+3617E0] { (-1679270599) }
snake_pc_helper.dll+13FB13 - 33 C5 - xor eax,ebp
snake_pc_helper.dll+13FB15 - 89 45 FC - mov [ebp-04],eax
snake_pc_helper.dll+13FB18 - 83 7D 08 01 - cmp dword ptr [ebp+08],01 { 1 }
snake_pc_helper.dll+13FB1C - 0F85 46010000 - jne snake_pc_helper.dll+13FC68
snake_pc_helper.dll+13FB22 - 83 3D 3438C574 00 - cmp dword ptr [snake_pc_helper.dll+363834],00 { (2620),0 }
snake_pc_helper.dll+13FB29 - 75 25 - jne snake_pc_helper.dll+13FB50
snake_pc_helper.dll+13FB2B - 8B F4 - mov esi,esp
snake_pc_helper.dll+13FB2D - 8D 45 F4 - lea eax,[ebp-0C]
snake_pc_helper.dll+13FB30 - 50 - push eax
snake_pc_helper.dll+13FB31 - 6A 00 - push 00 { 0 }
snake_pc_helper.dll+13FB33 - 6A 00 - push 00 { 0 }
snake_pc_helper.dll+13FB35 - 68 15A89E74 - push snake_pc_helper.check_process_unique+384 { (233) }
snake_pc_helper.dll+13FB3A - 6A 00 - push 00 { 0 }
snake_pc_helper.dll+13FB3C - 6A 00 - push 00 { 0 }
snake_pc_helper.dll+13FB3E - FF 15 B8A8C574 - call dword ptr [snake_pc_helper.dll+36A8B8] { ->kernel32.CreateThread }
snake_pc_helper.dll+13FB44 - 3B F4 - cmp esi,esp
snake_pc_helper.dll+13FB46 - E8 C42AFCFF - call snake_pc_helper.exit_game+893
snake_pc_helper.dll+13FB4B - A3 3438C574 - mov [snake_pc_helper.dll+363834],eax { (2620) }
snake_pc_helper.dll+13FB50 - A1 2838C574 - mov eax,[snake_pc_helper.dll+363828] { (1583811981) }
snake_pc_helper.dll+13FB55 - 0B 05 2C38C574 - or eax,[snake_pc_helper.dll+36382C] { (0) }
snake_pc_helper.dll+13FB5B - 75 0D - jne snake_pc_helper.dll+13FB6A
snake_pc_helper.dll+13FB5D - 68 2838C574 - push snake_pc_helper.dll+363828 { (1583811981) }
snake_pc_helper.dll+13FB62 - E8 B9F9FFFF - call snake_pc_helper.dll+13F520
snake_pc_helper.dll+13FB67 - 83 C4 04 - add esp,04 { 4 }
snake_pc_helper.dll+13FB6A - 8D 45 E4 - lea eax,[ebp-1C]
snake_pc_helper.dll+13FB6D - 50 - push eax
snake_pc_helper.dll+13FB6E - E8 ADF9FFFF - call snake_pc_helper.dll+13F520
snake_pc_helper.dll+13FB73 - 83 C4 04 - add esp,04 { 4 }
snake_pc_helper.dll+13FB76 - 8B 45 E4 - mov eax,[ebp-1C]
snake_pc_helper.dll+13FB79 - 2B 05 2838C574 - sub eax,[snake_pc_helper.dll+363828] { (1583811981) }
snake_pc_helper.dll+13FB7F - 8B 4D E8 - mov ecx,[ebp-18]
snake_pc_helper.dll+13FB82 - 1B 0D 2C38C574 - sbb ecx,[snake_pc_helper.dll+36382C] { (0) }
snake_pc_helper.dll+13FB88 - 89 45 D4 - mov [ebp-2C],eax
snake_pc_helper.dll+13FB8B - 89 4D D8 - mov [ebp-28],ecx
snake_pc_helper.dll+13FB8E - 83 7D D8 00 - cmp dword ptr [ebp-28],00 { 0 }
snake_pc_helper.dll+13FB92 - 7F 1E - jg snake_pc_helper.dll+13FBB2
snake_pc_helper.dll+13FB94 - 7C 06 - jl snake_pc_helper.dll+13FB9C
snake_pc_helper.dll+13FB96 - 83 7D D4 3C - cmp dword ptr [ebp-2C],3C { 60 }
snake_pc_helper.dll+13FB9A - 73 16 - jae snake_pc_helper.dll+13FBB2
snake_pc_helper.dll+13FB9C - 83 3D E835C574 00 - cmp dword ptr [snake_pc_helper.dll+3635E8],00 { (2628),0 }
snake_pc_helper.dll+13FBA3 - 74 0D - je snake_pc_helper.dll+13FBB2
snake_pc_helper.dll+13FBA5 - 83 3D 3438C574 00 - cmp dword ptr [snake_pc_helper.dll+363834],00 { (2620),0 }
snake_pc_helper.dll+13FBAC - 0F85 AF000000 - jne snake_pc_helper.dll+13FC61
snake_pc_helper.dll+13FBB2 - 68 4CEDBF74 - push snake_pc_helper.dll+30ED4C { ("client.dmm_pc.anti_cheat.ret.ret_3:1|c") }
snake_pc_helper.dll+13FBB7 - 8D 4D AC - lea ecx,[ebp-54]
snake_pc_helper.dll+13FBBA - E8 A0D0FBFF - call snake_pc_helper.notify_hall_game_status_changed+CF3
snake_pc_helper.dll+13FBBF - 8B 45 D8 - mov eax,[ebp-28]
snake_pc_helper.dll+13FBC2 - 50 - push eax
snake_pc_helper.dll+13FBC3 - 8B 4D D4 - mov ecx,[ebp-2C]
snake_pc_helper.dll+13FBC6 - 51 - push ecx
snake_pc_helper.dll+13FBC7 - 68 24EDBF74 - push snake_pc_helper.dll+30ED24 { ("this guy maybe cheat , cost = %ld") }
snake_pc_helper.dll+13FBCC - E8 78CDFBFF - call snake_pc_helper.notify_hall_game_status_changed+9DD
snake_pc_helper.dll+13FBD1 - 83 C4 0C - add esp,0C { 12 }
snake_pc_helper.dll+13FBD4 - 8D 4D AC - lea ecx,[ebp-54]
snake_pc_helper.dll+13FBD7 - E8 AEF0FBFF - call snake_pc_helper.async_request_if_can_join_room+44C
snake_pc_helper.dll+13FBDC - 50 - push eax
snake_pc_helper.dll+13FBDD - E8 5A2AFCFF - call snake_pc_helper.Send
snake_pc_helper.dll+13FBE2 - 83 C4 04 - add esp,04 { 4 }
snake_pc_helper.dll+13FBE5 - 6A 00 - push 00 { 0 }
snake_pc_helper.dll+13FBE7 - 8D 8D B0FEFFFF - lea ecx,[ebp-00000150]
snake_pc_helper.dll+13FBED - E8 A49EFBFF - call snake_pc_helper.dll+F9A96
snake_pc_helper.dll+13FBF2 - 8D 85 B0FEFFFF - lea eax,[ebp-00000150]
snake_pc_helper.dll+13FBF8 - 50 - push eax
snake_pc_helper.dll+13FBF9 - B9 1036C574 - mov ecx,snake_pc_helper.dll+363610 { (0) }
snake_pc_helper.dll+13FBFE - E8 84D0FBFF - call snake_pc_helper.notify_hall_game_status_changed+D1B
snake_pc_helper.dll+13FC03 - 88 85 A7FEFFFF - mov [ebp-00000159],al
snake_pc_helper.dll+13FC09 - 8D 8D B0FEFFFF - lea ecx,[ebp-00000150]
snake_pc_helper.dll+13FC0F - E8 634EFCFF - call snake_pc_helper.process_protect+938
snake_pc_helper.dll+13FC14 - 0FB6 8D A7FEFFFF - movzx ecx,byte ptr [ebp-00000159]
snake_pc_helper.dll+13FC1B - 85 C9 - test ecx,ecx
snake_pc_helper.dll+13FC1D - 74 29 - je snake_pc_helper.dll+13FC48
snake_pc_helper.dll+13FC1F - 6A 00 - push 00 { 0 }
snake_pc_helper.dll+13FC21 - 8D 8D C8FEFFFF - lea ecx,[ebp-00000138]
snake_pc_helper.dll+13FC27 - E8 6A9EFBFF - call snake_pc_helper.dll+F9A96
snake_pc_helper.dll+13FC2C - 8D 85 C8FEFFFF - lea eax,[ebp-00000138]
snake_pc_helper.dll+13FC32 - 50 - push eax
snake_pc_helper.dll+13FC33 - B9 1036C574 - mov ecx,snake_pc_helper.dll+363610 { (0) }
snake_pc_helper.dll+13FC38 - E8 250EFCFF - call snake_pc_helper.fetch_param+42E
snake_pc_helper.dll+13FC3D - 8D 8D C8FEFFFF - lea ecx,[ebp-00000138]
snake_pc_helper.dll+13FC43 - E8 2F4EFCFF - call snake_pc_helper.process_protect+938
snake_pc_helper.dll+13FC48 - 8B F4 - mov esi,esp
snake_pc_helper.dll+13FC4A - 6A 00 - push 00 { 0 }
snake_pc_helper.dll+13FC4C - FF 15 B0A8C574 - call dword ptr [snake_pc_helper.dll+36A8B0] { ->kernel32.ExitProcess }
这里就不对代码进行分析了(作为萌新怎么可能看得懂嘛!对没错就是我不会分析!),但是我们依旧可以通过注释内容帮助我们了解。
比如我抓到了两很关键的,简单翻译理解下。
client.dmm_pc.anti_cheat.ret.ret_3:1|c
dmm客户端反作弊被ret
this guy maybe cheat
这家伙可能会作弊
看吧 这就很明显了,那么我们怎么来处理呢?这里萌新的个人意见是碰见这种大量检测作弊有关的代码段先试试ret整个代码段(当然有的游戏肯定是有被返回检测的咯 比如是前面jbe跳过不就被这里检测到了)
F9运行,游戏立马报错了,别急这只是我们ret
了ExitProcess
函数导致的,我们点击下忽略
。
至此,大功告成了!(你怎么知道?我当然试过了啊,不信你去试试。)
最终成果:
好了至此,处理逃跑吧少年非法进程检测完美收官。
总结与反思
1.经过三篇简单的教程,我们学到了什么?
第一篇教程中我们主要是运用OpenProcess
函数定位到了非法进程检测的相关代码,并且初步尝试修改跳转跳过OpenProcess达到过检测的目的,但是会触发闪退。
第二篇教程中我们进一步分析了游戏非法进程检测的相关代码,发现了检测原理是通过循环递减PID逐一去打开进程。并且进一步复习了OpenProcess
知道了传入的第三个参数就是需要打开进程的PID。于是为了避免闪退,我们修正了第一篇教程中过检测的思路,由跳过OpenProcess
改为修改OpenProcess
的传入参数,即需要打开进程的PID。
第三篇教程中我们迎难而上(打住!此处不允许开车!),通过ExitProcess
函数定位到了导致游戏闪退的代码段,通过ret头部彻底干掉了非法进程检测中闪退的源头!
2.那么教程中学的东西就只能运用在教程实例之中吗?
非也,前面也提到了,教程学的是方法是思路。教程针对的是个性,但是大家要学会的是共性,要举一反三。
后话
感谢大家的捧场,逃跑吧少年非法进程检测的处理至此完美收官。如果教程中存在错误请各位看官及时指出,萌新我不想因为自己的缺陷而误导了其他人的学习。
如果各位看得上萌新的教程想转载到其他地方,请注意表明出处。
最后还是要求评分的!怎么说来的 哦 对 支持才有动力,各位哪怕觉得教程垃圾(┭┮﹏┭┮)不想评分,回帖喷一下也好啊(当然无脑喷子还是算了,萌新受不起。适当意见可以提!)