吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20302|回复: 35
上一主题 下一主题
收起左侧

[游戏安全] 【原创】CE教程:逃跑吧少年过非法进程检测之干掉闪退(三)

  [复制链接]
跳转到指定楼层
楼主
忆魂丶天雷 发表于 2020-3-10 12:51 回帖奖励

上篇教程:

【原创】CE教程:逃跑吧少年过非法进程检测之绕过闪退(二)

前言

经过前两篇教程的学习,相信大家对于逃跑吧少年的非法进程检测有了一些了解,但是这里还是需要强调下。教程学的是方法是思路,要知道举一反三,不要困死在教程例子这一个游戏之中。


导入与准备

如同上篇教程结尾所说,如果一定要修改跳转那么我们怎么处理会触发的闪退呢?在教程开始之前我们再来简单认识一个函数。

ExitProcess

ExitProcess 结束调用的进程及其所有的线程

首先我们已知,直接修改跳转会触发游戏的其他保护导致游戏闪退,即游戏进程退出,那么我们要想防止它退出就可以从有关结束进程的函数入手。
[注:可以达到结束进程的方法有很多,这里专指本游戏中此处闪退调用的方法]


开始

前面教程中已有的步骤这里会进行一些跳过,我们直奔主题。

首先,CE查看内存 → 右键 → 转到地址 → 填入ExitProcess → 点击确定。

如图所示,这就是ExitProcess函数。

因为一旦调用这函数游戏进程就会退出,为了方便测试我们可以把函数头部mov eax,eax修改为ret,这样做的原因可以避免游戏退出,但是也很可能会导致运行出错。
但是在这个游戏中我们可以这样做,至于原因后面就知道了。

F5在ret处下个断点。

好了 到此为止,我们的准备工作就做好了。下面按照教程(一)中的方法,0F86 59060000 - jbe snake_pc_helper.dll+118127E9 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运行,游戏立马报错了,别急这只是我们retExitProcess函数导致的,我们点击下忽略

至此,大功告成了!(你怎么知道?我当然试过了啊,不信你去试试。)

最终成果:

好了至此,处理逃跑吧少年非法进程检测完美收官。


总结与反思

1.经过三篇简单的教程,我们学到了什么?

第一篇教程中我们主要是运用OpenProcess函数定位到了非法进程检测的相关代码,并且初步尝试修改跳转跳过OpenProcess达到过检测的目的,但是会触发闪退。

第二篇教程中我们进一步分析了游戏非法进程检测的相关代码,发现了检测原理是通过循环递减PID逐一去打开进程。并且进一步复习了OpenProcess知道了传入的第三个参数就是需要打开进程的PID。于是为了避免闪退,我们修正了第一篇教程中过检测的思路,由跳过OpenProcess改为修改OpenProcess的传入参数,即需要打开进程的PID。

第三篇教程中我们迎难而上(打住!此处不允许开车!),通过ExitProcess函数定位到了导致游戏闪退的代码段,通过ret头部彻底干掉了非法进程检测中闪退的源头!

2.那么教程中学的东西就只能运用在教程实例之中吗?

非也,前面也提到了,教程学的是方法是思路。教程针对的是个性,但是大家要学会的是共性,要举一反三。


后话

感谢大家的捧场,逃跑吧少年非法进程检测的处理至此完美收官。如果教程中存在错误请各位看官及时指出,萌新我不想因为自己的缺陷而误导了其他人的学习。

如果各位看得上萌新的教程想转载到其他地方,请注意表明出处。

最后还是要求评分的!怎么说来的 哦 对 支持才有动力,各位哪怕觉得教程垃圾(┭┮﹏┭┮)不想评分,回帖喷一下也好啊(当然无脑喷子还是算了,萌新受不起。适当意见可以提!)

免费评分

参与人数 19吾爱币 +24 热心值 +17 收起 理由
gunxsword + 1 + 1 我很赞同!
weituotian + 1 + 1 学习了!
xiuji + 1 + 1 谢谢@Thanks!
11559977553300 + 1 我很赞同!
腾云驾雾 + 1 + 1 热心回复!
lj3572996 + 1 + 1 热心回复!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Dicker + 1 + 1 用心讨论,共获提升!
Dboykey + 1 + 1 谢谢@Thanks!
hhjjqq110 + 1 + 1 用心讨论,共获提升!
新手12138 + 1 + 1 我很赞同!
0基础萌新 + 1 + 1 谢谢@Thanks!
清风听不见声音 + 1 + 1 用心讨论,共获提升!
15618521545 + 1 + 1 我很赞同!
smile5 + 1 热心回复!
oyixi爷 + 1 用心讨论,共获提升!
boyulin + 1 + 1 用心讨论,共获提升!
tony198911 + 1 + 1 用心讨论,共获提升!
rsice + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| 忆魂丶天雷 发表于 2020-3-10 13:47 |楼主
rsice 发表于 2020-3-10 13:38
有个问题要请教:这种修改无法保存吧,一来不可能修改系统dll,二来加壳的话也保存不了,每次都需要重复操 ...

就教程中的游戏而言其非法进程检测都包含在游戏文件snake_pc_helper.dll这个模块之中而非系统dll,如果想保存是可以修改dll进行源文件替换,但是如果这样做会牵涉到游戏中其他检测例如游戏更新md5验证等。

至于你所说的程序,我建议你先跳过系统领空 找到调用的代码进行修改,如果是加壳了的话可以先脱壳或者采用打补丁的方式。
推荐
rsice 发表于 2020-3-10 19:37
忆魂丶天雷 发表于 2020-3-10 13:47
就教程中的游戏而言其非法进程检测都包含在游戏文件snake_pc_helper.dll这个模块之中而非系统dll,如果想 ...

感谢指点,但问题就是不去掉闪退到不了OEP就退出了,也就无法脱壳,要脱壳就要先搞定闪退。不过我也不一定能搞定脱壳呢
3#
 楼主| 忆魂丶天雷 发表于 2020-3-10 12:52 |楼主
4#
侧耳i 发表于 2020-3-10 13:01
藤椅是我的
5#
ICEFIVE 发表于 2020-3-10 13:02
虽然没看懂,但是勾起了我当年DNF时对CE的操作
6#
cwl 发表于 2020-3-10 13:08
这个游戏,是我见过查挂最严的,但是开发者把所有无法识别的软件全部作为外挂处理就很恶心了
7#
rsice 发表于 2020-3-10 13:38
有个问题要请教:这种修改无法保存吧,一来不可能修改系统dll,二来加壳的话也保存不了,每次都需要重复操作一遍吧?因为我也碰到这个问题,不知道怎么结局。
有个程序检测虚拟机,在虚拟机内运行就闪退。
8#
hyacinth1231 发表于 2020-3-10 13:44
谢谢楼主分享
9#
baby1078 发表于 2020-3-10 14:59
最近刚翻出硬盘里的CE想玩玩,好久不用了很多东西忘记了,想不到一上论坛就看到这个帖子,正好复习一下,非常感谢。
10#
0基础萌新 发表于 2020-3-10 15:15
学习一下感谢dalao分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 17:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表