|
发表于 2014-3-7 09:54:10
|
显示全部楼层
此次带来的文章看标题应该很吸引人吧;
如过我成功的将你吸引进来的话就回个帖子吧, 隐藏的内容保证不会让你失望.
这也是TC众多精华索引教程与帖子中无法涉及的内容;
二漠在此承诺 , 如果此文章回帖超过66帖那么下次我将带来更神奇的文章, 保证你大开眼界 .
上帝创造了人类 ,人类创造了只会用0与1说话的电脑, 如果你没有搞定人类创造出的东西的话那就说明你没有努力过;
正文开始 ! 此次的游戏限制多开的方法是枚举进程, 并对比进程名 . 如果超过2个就禁止登陆游戏.
我尝试了各种方法都依次失败. 其中有以下几种方法:
1. 隐藏游戏进程
此方法可以登录游戏,但是遇到过图的情况下游戏会再次检测进程. 那么问题就来了. 我们的窗口进程被隐藏掉了. 游戏连自己的进程都检测不到, 游戏的开发者也想到了这一点, 专门对付网上流传广泛的进程隐藏工具. 如果游戏检测不到自己的进程就按照超过多开的判断, 强制退出客户端.
2. 修改启动文件的名字
如何修改进程名? 当然是要将启动文件的主EXE文件改名了 .修改后游戏连一个窗口都无法登陆, 看来开发者也想到了这一点. 通过这一点判定这游戏里面一定是存放了对比进程名的判定的常量.
3. 根据第2条反汇编逆向跟踪常量的对比处进行修改.
那么,开启OD开始找吧, 将所有有关进程的函数全部下了断点 ,并逐个函数一步一步的跟踪推敲数值的含义. 最后终于锁定了游戏的检测进程的函数. EnumProcesses EnumProcessModules GetModuleBaseNameA 我在这3个函数地方都下了断点, 然后看堆栈.结果呢? 用后面的一句话来形容我的心情 : 游戏被我调试的这么久都没崩溃, 我崩溃了. 堆栈没有半点调用内容提供参考. 看着EBP的值寻找回去上一步跳转调用过来的带码, 分析了一下, 这是标准的VMP加密过的. 胡乱的跳转胡乱的CALL 跟了几天也是毫无头绪 .
4. CE扫描对比的常量值进行修改
我是这样想的, 将游戏主程序改名成222.exe 然后下一个改名333.exe 然后修改它的常量值的对比, 经过测试之后将一百多个地址进行修改还是失败了. 看来这个常量也是被加密了.
5. 重新找突破口.
疯狂下断点, 只要关于窗口函数, 进程函数, 注册表函数 , 发包函数 ,加载文件函数通通的断下, 然后一行一行跟踪. 跟来跟去跟的自己头昏脑胀 .最后跟到关键地方一不小心有一个CALL没进去跟游戏就进行检测了. 就这样无数次的失败, 无数次的客户端崩溃让我信心全无. 最后转战新的突破思路.
6. 猜测游戏的进程名字的常量是否存放在别处
打开注册表搜索游戏客户端的名字, 因为我在OD里看见了每次检测的时候游戏都需要调用注册表之类的函数. 我将注册表里面符合客户端相关的注册表键值进行各种惨无人道的修改, 各种尝试. 不管怎么搞换来的最终结果都是游戏强制掉线或者崩溃.
7. 通过HOOK函数来修改最终的检测结果
因为VMP的缘故我遇到了很多很多技术上的问题. 而且被HOOK的函数因为字节比较少,跳转思路也是一次又一次的碰壁. 因为TC无法使用DLL注入, 很多带有结构体的windows函数无法使用. 我的思路彻底被堵死了. 我不得不重新尝试新的思路来实现我的目标.
现在对自己的屡遭碰壁的经历进行新的总结 . 这个看似简单的枚举进程的限制却有很完善的保护机制. 重新的百度一些关于windows的系统各种构造机制. 从共享内存空间着手也是没有突破多开限制思路.
搜索一些其他论坛上的教程也是无济于事, 那些教程都是构造很简单的游戏 ,根本就是借鉴不到任何有用的东西. 最后重新将思路锁定会最初期的上面第三条的的那3个函数. 最后我成功了! 详细过程见下文.
老规矩, 回复可见 |
|