诛仙多开分析文档 |
|||
|
更新时间:2007-1-6 5:02:46 发布人:合格 |
|||
|
不知怎么开篇,直接入正题。 诛仙的多开检测,大致分为两个阶段,第一阶段是检测窗口标题和类名,通过系统函数GetWindowTextA,GetClassNameA获取窗口标题及类名,当累计检测数大于等于5时,会随机断开一个连接(断开提示:与服务器连接中断,请重新登录)。第二阶段是检测窗口类名和进程名,通过系统函数GetClassNameA,Process32Next获取窗口类名和进程信息,当累计检测数大于等于5时,会随机断开一个连接。 在第一阶段,可以通过修改游戏主程序中,存放的类名字符串和标题字符串来达到跳过检测,可以用UltraEdit32或WinHEX打开游戏的elementclient.exe,搜索“ZelementClient Window”和“Element Client”的UNICODE码来找到该位置,将这两个字符串任意修改即可。 在后来,加强了对多开的检测,会要求各客户端返回正确的窗口标题和类名,一但是修改过的,会采取封号及掉线的方法惩罚该号。 这个时候,需要通过API HOOK的方式,HOOK GetWindowTextA及GetClassNameA来实现多开,API HOOK的原理,就是在程序调用系统函数的时候,先一步进入到我们自己的处理函数,视情况处理数据,欺骗检测。当要获取的窗口句柄时当前游戏窗口时,我们就返回正确的字符串,而是其它游戏窗口时,就返回其它字符串。 在第二阶段,此时,不仅针对游戏窗口标题和类名,且遍历系统进程,获取游戏进程个数来检测多开,使用CreateToolhelp32Snapshot函数创建进程快照,使用Process32First,Process32Next循环快照句柄的链表结构获取进程相关信息。依然使用GetTopWindow,GetWindow,GetWindowTextA,GetClassNameA来获取窗口相关信息。这个时候,通过HOOK GetClassNameA和Process32Next即可达到多开的目的。 此后,好景不长,诛仙增加了对API HOOK方式的检测,对Process32Next这个函数的第一字节进行了E8,E9的检测,通过机器码转换汇编码,可以知道,E8是call的机器码,即API HOOK方式中的一种,改API函数头5字节,转到我们自己的函数的方法。而E9是jmp的机器码,也是一种API HOOK的方法,都是为了转到我们自己的函数去处理。 于是,采用jmp call来HOOK的方式失效了,然后出现了很多种对API函数头做修改的方法,例如以下几种: mov eax, 0xXXXXXXXX ;将自己函数的入口写入eax寄存器 jmp eax 或 call eax ;转入自己的函数执行操作
push 0xXXXXXXXX ;将自己函数的入口压入堆栈 retn ;转入自己的函数执行
xor eax, eax ;EAX清零 push 0xXXXXXXXX ;还是将自己的函数入口压栈 pop eax ;将自己的函数入口推出到EAX jmp eax ;转入自己的函数执行
更有甚者,模拟API函数头,比如Process32Next入口为 mov edi, edi push ebp mov ebp, esp |
|||
| 标签:诛仙 攻略大全 客户端 诛仙 巴士诛仙 TGBUS诛仙中国 | |||