DCOO迪酷作弊器的开发思路

社区服务
高级搜索
猴岛论坛CSGO反恐精英DCOO迪酷作弊器的开发思路
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
0个回复

DCOO迪酷作弊器的开发思路

楼层直达
zhaochung

ZxID:1239671

等级: 少将
H都说到这份上......你咋就这么不中用!
举报 只看楼主 使用道具 楼主   发表于: 2007-09-18 0
我简单说一下deac的道理吧..Engine HOOK的作弊里会调用一个cs引擎里面的地址 1d0d480 这个函数在SDK里面的名字是pfnGetPlayerInfo 用来获得玩家的名字信息.. 然后deac把这个地址修改到他自己的内存地址...10001aad ,而CDD因为比deac后进入内存并执行,所以他将得到dcoo被修改后的10001aad的入口...其实就进入了deac的函数啦,这样deac就知道有作弊..给一个0x45的错误..45 就是调用pfnGetPlayerInfo这个函数...我写的DCOO作弊器只要一用这个函数它就出45..不用就不会..不过这个问题我已经解决了,我用其他方法得到玩家的名字,不用调用这个函数也可以得到.. dcoo一共修改5个函数的入口,分别是pfnRegisterVariable,pfnClientCmd,pfnGetPlayerInfo,GetClientTime,pfnHookUserMsg 44是调用另外一个叫pfnGetEntbyIndex 这个是用来得到玩家的entity的信息的...但这个也可以绕过去.. 我发现这些都是OGC放出来的源码里面用到的..我想现在很多作弊器都是从Ogc里发扬光大出来的...因为这几个函数还是都在调用...    第一part:这篇东西是说如何过DCOO的,过DCOO用FPE也行,像仙剑一样,不过比较复杂而尔,现在说说前期道具:需要ring0级调试器SoftICE4.05 ForNT版本+XP补丁;FPE2001如果喜欢;USAMiMi_Hurricane游戏hacker必备工具;ring3级调试器OllyDBG V1.1改版;WinHex V10.46破解中文版;查壳工具PeID2006;加壳工具Asprotect SKE 2.3 build 04.26 beta、Themida1.5.0.0、Thinstall V2.521破解版、Vmprotect V1.2、Xtreme-Protector V1.08 beta、FilePacker V1.1清清紫衿汉化版、编程老大VC++6.0、PE格式文件编辑工具LordPE V1.4、进程补丁机Process Patcher V4.13(可选)、Acprotect(可选)和木马免杀工具CDS SS V1.0 beta1(可选),还有一个非常好使的ECC的调试器SimpleDebuger(到ECC官方网找找吧),找齐后就可以开始我们的旅程了。

从DCOO_0.51开始说吧,首先打开登录器,点开始游戏,cs启动后按下win键+R键输入%tmp%回车,会看到在目录下有个叫 ~bd1523.tmp的文件,现在打开PeID2006点...按钮选中刚才的目录下的~bd1523.tmp将看到最下面显示为nothing found*意思是未知改文件是加了什么壳——壳即保护软件的手段,现在打开usamimi,双击dcooXXXXX.exe进程,按菜单debug- >desassemble module,在Target Module下拉菜单中选~bd1523.tmp模块(它名字前面有个数值比如10000000业界称image base就是它加载到内存的基地址意即从内存的这个地址开始存放这个文件的)——它其实真实的文件后缀是.dll就是DCOO反作弊器了,点 CrossReference——意思是标出call、jmp等跳转的地方以参考,点Disassemble按钮对~bd1523.tmp进行反汇编,直接拖动滚动条会看到很多的PUSH XXXXXXXX——XXXXXXXX是8位不规则16进制数(比如地址10003e88处,大家可能不是10003e88因为DLL动态链接库文件每次加载到内存中的image base都可能不同业界称此为重定位而exe文件就没有这个苦恼,但只要把刚才下拉框中看到的image base+3e88就是了),它下一句就是一个JMP XXXXXXXX——意思是代码执行到此处就跳到XXXXXXXX的地方你可以在右上角的下拉框中写入这个数字然后按move按钮就可以到达那个jmp的地方了也可以用滚动条自己来找,然后在它跳到的地方又是一个PUSH XXXXXXXX+JMP XXXXXXXX再跟下去又是一串push jmp,那么就断定~bd1523.tmp是用了Vmprotect虚拟机来保护了,现在试着改一下~bd1523.tmp反汇编码的一个字节看看有什么后果——在汇编码中随便点一条语句,比如1001AEF处,单击后在下面的Fix Code By Opecodes的下拉框中看到了这条语句的汇编码,现在请把45改为44,点Fix按钮,好了,返回cs,选一个DCOO的服务器玩一下,几秒钟之后被踢出提示code99,说明~bd1523.tmp反作弊模块使用了代码防改(即使是用SoftICE对其下断点也被认为改了代码因为SoftICE下断点的实质其实就是在把语句的第一个字节改为INT3),然后返回Usamimi把刚才改的44改回45再返回cs进DCOO服务器玩就不会踢出了。本来我们只需要把PUSH 45下面的那条call 10004ebe语句nop掉就可以躲过code45检测的(注意这个code45中的45是16进制数值所以如果用FPE搜索10进制45的话就错了,而且这些codeXX中的XX从来正常下是不会出现16进制数值中不同于10进制数值的a、b、c、d、e、f的,所以这里好阴险)——在Usamimi 中nop掉指令可以右键单击该条命令然后左键单击Fill with Nop,由于使用了代码防改+OEP(进入点——模块运行的第一条语句)用了俄罗斯的Vmprotect保护——就是因为这个OEP被Vmprotect 搞过所以PeID2006测不出来是加了什么壳,所以要弄清楚代码防改的原理不是一两天的事,因此我们此时应该从另外一个角度去思考看看有没有更加便捷的方法,答案是有的。大家在DCOO上面玩过的朋友都知道如果不破解就如常进入DCOO服务器的话就会提示code45,如果是以前的DCOO登录器版本比如0.49版的话只要按照前面的方法打开cs后用Usamimi nop掉push 45下面的那条call指令就可以躲过code45检测了然后进入DCOO服务器又会看到code44的提示,绕过这个code44可以如前所述用 Usamimi打开~bd1523.tmp模块后在汇编码中右键单击一下选择Search Text In Disassemble Codes框中输入push 44点往下搜索的Next按钮发现没有反应再点几次Previous按钮往上搜索看到和刚才code45的那个call 10004ebe就对了然后nop掉call 10004ebe就躲过code44检测,注意的是必须在进入DCOO服务器之前把这2个call 先nop掉否则有记忆效应的只要在服务器中出现了codeXX的绿色字之后再nop也没有用,现在51版本的DCOO登录器加了执行代码防改,那么怎么办好呢,不可以直接nop call指令,那么我们需要另辟蹊径。这时我们开动脑筋想一想,作弊器之所以可以看到敌人名字、距离+自瞄等是因为作弊器通过与hl主程通讯获取这些方面的信息然后把信息取回自己家里进行处理然后把这些处理过的信息再次通过hl主程将敌人名字、距离输出屏幕和控制你的木仓口移动实现自瞄,这些动作都是需要和 hl主程通讯的,所以DCOO反作弊模块~bd1523.tmp肯定在这个通讯过程中做了手脚导致作弊器某些作弊功能缺失和codeXX的,那么首先要弄明白的是什么是作弊器与hl主程通讯呢?其实在作弊器的汇编代码中的反映就是一个call XXXXXXXX 这个XXXXXXXX 8 位16进制数值是hl主程中的某个汇编码开始的地址而这个地址正是hl主程中某个函数的开始地方,作弊器通过push XXXXXXXX指令(可能有几个,hl主程的函数需要用到多少个参数就有多少个push然后就是call hl函数的指令了)将hl主程函数需要的参数推入堆栈(堆栈可以被理解为内存中存放函数参数的地方,常听说它的什么先进后出原理,其实这个先进后出很容易理解,就像给木仓上子弹,最先压入弹夹的子弹肯定比最后压入的要后打出木仓膛了,堆栈的先进后出跟打子弹一样),然后call hl函数对push进去的参数交给hl主程进行处理输出就实现作弊功能了,因此可以肯定~bd1523.tmp对作弊器的这些call做了手脚。那么又如何找到这些被改过的call呢?在USAmimi的Target Module下拉框中选中作弊器的模块名(这里以CDD4.33.4b为例子说明)如前所述对它进行反汇编,然后对汇编码搜索 push [ 字句,找到01341a3a(大家可能不是01341a3a但是后面的几个数值应该相同用前所述的image base原理就可以理解过来,下面遇到类似的情况不再详述)处为call [1363bd4]加了[]代表[1363bd4]是个指针表示真正要call的地址存放在1363bd4这个地方,这时按USAmimi Top旁边的-按钮把汇编页面收起来就可以看到一片16进制数值了,在16进制数值随便一处左键单击一下,按Ctrl+G键在Dump Window Address下的框中输入1363bd4回车就可以到达1363bd4这个内存地方了,在4列16进制数值里看到一大片的以01结尾的16进制数值(其实是01开头比如4列数值里面的20 d3 d0 01其实就是01d0d320它就是hl主程一个函数的起始地址),这些01结尾的数值当中明显有些异常,一些不是以01结尾而是以10结尾的比如05 37 00 10即10003705这一看就知道是以10000000为image base的~bd1523.tmp的内存地址,说到这里聪明的你应该知道问题出在哪里了吧,~bd1523.tmp就是修改了作弊器这些地方原本应该是 call hl主程函数的现在被改为call DCOO反作弊模块~bd1523.tmp的函数了,所以你会被发现作弊codeXX,那么如何找到这些被改了的地方原来是什么数值呢?很简单,不要用 DCOO登录器而是和以前没有DCOO登录器的时候一样直接启动作弊器和cs,如前所述用USAmimi来到作弊器被改的地方看就知道了,然后记下来,现在退出cs再重新打开作弊器、开DCOO登陆器按开始游戏按钮,打开USAmimi用前述方法来到作弊器模块被改的地方把刚才记下来的数值相应地改回去就可以躲过codeXX检测了(注意准备改数值的时候需要做多一步:就是点击usamimi工具栏上的黑色闪电图标,出来一个Set/Remove BreakPoint窗口即设置断点窗口,点一下Attach按钮,再点一下Pause按钮使cs暂停——相当于FPE暂停游戏按*键的效果一样,然后才开始改数值,因为usamimi修改16进制数值是即时生效的改一个字节就生效一个,不是等你修改完整个32位地址才生效所以如果没有暂停cs的话它会崩溃的。改完后就可以点一下Resume按钮重新激活cs了),现在回到cs进入DCOO服务器看看是否还有codeXX ^_^ 。                   
本帖de评分: 1 条评分 DB +5
威望+5

优秀文章

要生存就得象狼一样在森林里生活!
奋斗是我的性格,成功是我的目标!
-----------------------------------------------------------
« 返回列表
发帖 回复