1 / 14
文档名称:

诛仙多开分析文档.doc

格式:doc   大小:640KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

诛仙多开分析文档.doc

上传人:pppccc8 2019/9/27 文件大小:640 KB

下载得到文件列表

诛仙多开分析文档.doc

相关文档

文档介绍

文档介绍::..诛仙多开分析文档(WrittenBy:CoffeeTea11/9/07)不知怎么开篇,直接入正题。诛仙的多开检测,大致分为两个阶段,第一阶段是检测窗口标题和类名,通过系统函数GetWindowTextA,GetClassNameA获取窗口标题及类名,当累计检测数大于等于5时,会随机断开一个连接(断开提示:与服务器连接中断,请重新登录)。第二阶段是检测窗口类名和进程名,通过系统函数GetClassNameA,Process32Next获取窗口类名和进程信息,当累计检测数人于等于5吋,会随机断开一个连接。在第一阶段,对以通过修改游戏主程序中,存放的类名字符串和标题字符串来达到跳过检测,,搜索aZelementClientWindow”和uElementClient,,的UNICODE码来找到该位置,将这两个字符串任意修改即叭在后来,加强了对多开的检测,会要求各客户端返回正确的窗口标题和类名,一但是修改过的,会采取封号及掉线的方法惩罚该号。这个时候,需要通过APIHOOK的方式,HOOKGetWindowTextA及GetClassNameA来实现多开,APIHOOK的原理,就是在程序调用系统函数的时候,先一步进入到我们自C的处理函数,视情况处理数据,欺骗检测。当要获取的窗口句柄时当前游戏窗口时,我们就返回正确的字符串,而是其它游戏窗口时,就返回其它字符串。在第二阶段,此时,不仅针对游戏窗口标题和类名,且遍历系统进程,获取游戏述程个数來检测多开,使川CreateToolhelp32Snapshot函数创建进程快照,使用Process32First,Process32Next循环快照句柄的链农结构获取进程相关信息。依然使用GetTopWindow,GetWindow,GetWindowTextA,GetClassNameA来获取窗口相关信息。这个吋候,通过HOOKGetClassNameA和Process32Next即可达到多开的目的。此后,好景不长,诛仙增加了对APIHOOK方式的检测,对Process32Next这个函数的第一字节进行了E8,E9的检测,通过机器码转换汇编码,可以知道,E8是call的机器码,即APIHOOK方式中的一种,改API函数头5字节,转到我们口己的函数的方法。而E9是jmp的机器码,也是-•种APIHOOK的方法,都是为了转到我们自己的函数去处理。于是,采川jmpc汕来HOOK的方式失效了,然后出现了很多种对API函数头做修改;将自C函数的入口写入eax寄存器;转入自C的函数执行操作的方法,例如以下儿种:moveax,OxXXXXXXXXjmpeax或calleaxpushOxXXXXXXXXretn;将自己函数的入口压入堆栈;转入自己的函数执行xoreax,eaxpushOxXXXXXXXXpopeaxjmpeax;EAX清零;还是将自己的函数入口压栈;将自己的函数入口推出到EAX;转入自己的函数执行更有其者,模拟API函数头,比如Process32Next入口为movedi,edipushebpmovebp,esp改写为以下方式movedi,edipushebpmovebp,esppopebpmoveax,OxXXXXXXXXjmpeax其实际意思,防止对API函数头的检测,将修改转入了后续几句指令,避开对头的检测。做APIHOOK的一个原则,堆栈平衡,保护寄存器数据,这一点很重要。对于这些HOOK方式,基于原则的基础上,函数头可以做任意修改,尽可能的隐藏自C的修改,达到绕过检测的目的。关于反***检测代码的拦截对于反***检测代码,通过用OD跟踪,FAPI断点,可以很容易的拦截到检测代码所衣,方法与对send的拦截-•样,首先,必须要熟悉一些API,就是在多开检测中,需要用到哪些API,以及有哪些多开检测的方法。对丁窗口标题及类名的检测,我们知道需要用到GetWindowTextA,GetClassNameA,或GetWindowTextW,GetClassNcimeW,如何枚举窗口呢?常用的方法是使用EnumWindows,和GetWindow,对于此,我们可以在这些函数上下执行断点,断下后,直接从OD的堆栈窗口观察其调用来源,CTRL+F9返回到该调用点,分析上下文,看焰否是检测部分,通过反复的跟踪下断,就可以拦截到反***检测代码。hl于对多开的检测有两部分,一是窗口类名,一是进程,所以,反***检测代码也是两段,我们对窗口部分下断外,还要对Process32Next下断來截取反***检测的代码。这甲面涉及到游戏自身调川