易游网络验证,通杀旧版那套东西,旧版在逆向圈子里早就是易游验证烂大街的靶子了。但真上手做补丁,网络一堆人还是并写卡在“找关键跳”这一步,改完一个字节,全自重启又失效。动补丁为啥?通杀因为验证不止一处,你patch了表面那层,旧版它底下还有暗桩。易游验证
我见过最蠢的网络搞法,是并写拿OD载入,搜字符串“登录成功”,全自然后往上翻几条je/jne就改。动补丁那玩意儿纯粹碰运气。通杀旧版易游的验证逻辑其实很死板——它先发一个POST请求到服务器,拿到返回值,再在本地用一段固定的算法比对。问题就出在这个“固定”上。服务器返回的数据里,藏着一个时间戳和一个随机数,本地算法会拿这两个值去算一个动态的CRC。你光改跳转,不处理那个CRC校验,程序过一会儿自己就崩了。
真正的通杀思路,得从验证的“根”上动手。旧版易游有个致命弱点:它所有的网络通信,最终都要经过一个统一的send函数。你不需要去逆向它那个复杂的算法,直接把send函数的返回值改掉——强制让程序认为“数据包已经发送成功,且服务器返回了合法状态”。具体操作很简单,用Inline Hook把send函数头几个字节改成jmp到你的补丁代码,在补丁里模拟一个假的数据包结构,填充进去正确的CRC值,然后跳回原函数继续跑。
这么做的好处是,不管易游怎么更新它的算法,只要它还用同一个send函数发包,你的补丁就永远有效。我2019年写过一版,到现在还能用。当然,你得先定位那个send函数——用火绒剑或者x64dbg的断点功能,下个条件断点,看哪个函数在点击“登录”按钮的时候被频繁调用,而且参数里有“user”和“pass”字样。找到了,就成功一半。
剩下的工作全是体力活。写补丁的时候,别用那些现成的补丁工具,什么keymake之类的,生成的补丁太容易被杀软查。自己写个loader,用纯C语言,加载主程序后,手动修改内存里的函数地址。有个细节:旧版易游是VC6编译的,没有开ASLR,所以基址固定是0x400000。你直接硬编码地址就行,省事。但要注意,如果程序加了VMP壳,那这个思路就废了,得先脱壳。不过旧版易游基本没壳,最多加个简单的压缩壳,ESP定律一两次就能脱干净。
全自动补丁的核心,其实就是把“找地址”和“改代码”这两步自动化。你写个小程序,先扫描进程内存,特征码匹配那个send函数的开头几个字节——一般就是“55 8B EC 83 EC 50”这种标准序言。匹配到了,就自动替换成你自己的shellcode。整个过程不到一秒钟。我当年给朋友写了个界面,就一个按钮,点一下,自动找到游戏进程,注入,完事。他拿去用,对面网吧老板还以为他开了外挂。
最后说点实在的。这种补丁技术,现在看确实有点过时,新版易游早就换成了HTTPS加密通信,send函数也变成了异步的。但旧版那批游戏,很多还在私服圈子里活着。你写个通杀补丁,挂到论坛上,下面一群人说“大佬牛X”,其实也就那么回事。真正难的不是技术,是你能不能静下心来,把那个固定的算法模式摸透。逆向这活儿,耐心比脑子重要。