|
|
|
|
|
[讨论]关于迅游的破解
硬盘序列号+mac XP下有个驱动版修改硬盘序列号的软件。64位得找到迅游获取序列号的代码,HOOK掉获取的本机序列号。mac好改,序列号不好弄。楼主学会了别忘了分享一下。 |
|
|
[原创]我也讨论下“奕奕” 平台,全图使用~[连载]
我最开始的思路是下断点找到所有访问6f351f7c的代码,然后全都HOOK掉。 我也确实这么做了。 相当麻烦,CRC上面还有CRC。 完全不被追封的特征就是一局游戏中除了进入游戏和退出游戏时会访问以外,其余时间全不访问6f361f7c. 这种方法最大弊端就是更新太麻烦,VM的代码没有特征码可言。 后来我发现了更为简单的思路,现在我的外挂已经可以不随平台更新而更新了。 平台花了相当大代价去校验6f361f7c,以及周围代码(6f361f80等),对其余代码的校验必然就弱多了。 最后我竟然发现平台对整个Game.dll代码段的校验只有一个地方。 校验方法是申请一片内存把当前代码复制出来,然后校验。 顺着申请内存API一路搞定了这个CRC。 避开敏感地址,不仅开发难度降低了,连维护成本都省了。 楼主这种思路适合纯粹研究技术的人学习,这样学下来技术更扎实。 如果单纯为了做外挂,遇到不会的问题不是应该第一时间去学会,而是想办法绕过去,可以更早实现目标。 |
|
|
[求助]我想学习过tp保护,写驱动,应该学习什么?
郁金香的大概看看就行。过TP得看“和尚”“幽灵逆向”的才行。 |
|
|
|
|
|
奕奕平台检测那点事
前文再续,贴接上一回。 从我们测试结果看,“4分半掉线”,意味着对于这段代码的CRC检测不是持续进行的,检测间隔时间很长。 于是我有了第一个想法。 开局时修改此处代码,在1min代码执行完之后,再把修改的地方还原。 再开一局测试,只修改这一处代码(11xp.dll+6cd60 push ebp改ret 8),1min之后还原回去。 测试结果:游戏进行多久都不会掉线。 分析一下这个方法的优缺点:好处就是思想简单,容易实现。但是可应用范围不广。此处这段代码在一局游戏中只执行一次,而且CRC在代码执行之后很久才进行。如果游戏期间11平台又调用该代码对Game.dll进行还原,而且如果第二次CRC的时间不固定,有可能第5min又进行校验,这样这种方法就太冒险了,有可能代码还原的晚,就会被检测到。 一般的CRC并不是对所有代码段进行校验,有的程序只对代码的关键部分(比如代码头,重要的call,jmp等位置)进行检测,所以我接着就考虑对call WriteProcessMemory这句处理。 可惜11平台对这段代码都进行检测,哪里都不能修改。 我说过11平台不会对所有代码都检测,哪里平台认为不重要,不会去检测呢? 系统API——WriteProcessMemory。 既然我们不想让11平台调用它,我们可以直接从这个函数入手。 我们不能贸然对WriteProcessMemory进行ret 0x14(该函数需要5个参数),因为我们还不清楚平台的其他地方是否需要调用她。 我们可以开一局游戏,对WriteProcessMemory下断,看看究竟需要调用她多少次,并且分别测试每一次的调用直接返回是否会检测作弊。 但是我们不需要那么做。我们只是想让平台对Game.dll的还原无效,至于其他的写内存操作我们最好还是不要动。 我们可以从多次调用中找出对Game.dll还原的那一次。 其实特征还是很明显的。比如WriteProcessMemory的5个参数中第二个参数:待写入数据的内存地址==Game.dll+0x1000 .第四个参数写入数据大小==0x87e000 。 我们可以对WriteProcessMemory函数头进行HOOK,找出我们感兴趣的调用直接返回,而其他调用我们正常执行。 说明一:根据我的经验,只判断第四个参数就可以定位。因为该API的调用并不频繁。 说明二:该函数最后一个参数是实际写入了多少字节,存放在一个内存地址中。我们直接返回并未对其进行处理。我测试11平台并未对次进行检测,所以我们可以无视。但最好在处理程序中把该地址写入0x87e000。 说明三:其实这个函数没有必要一定要处理。因为每次游戏只调用一次,而且是刚刚开局就调用,我们完全可以选完英雄之后再开图,这样就算是直接过掉她了。但是有些人喜欢让外挂在魔兽运行时自动开启,就需要对此进行处理了。 至于HOOK代码的有关细节,我将在奕奕平台全图制作第五弹之HOOK大法中详细介绍。 |
|
|
奕奕平台检测那点事
有关这位童鞋说的,实现起来是有难度的。 当可以无压力完成以上代码时,我可以很负责任的告诉大家,100%还是会被11平台检测的。 至于原因我现在先不说,在我的帖子后面会提到。 这里可以发广告么? 不可以么? |
|
|
奕奕平台检测那点事
上回说到,我们找到了11平台第一个反作弊程序段:调用WriteProcessMemory()重写Game.dll代码。 这里介绍一种常用的过检测方法。 找到检测函数,修改代码头直接返回,不执行此函数。 从WriteProcessMemory这个断点我们能得到很多信息,看堆栈,寻找函数调用流程。[esp]里通常装的是call WriteProcessMemory()的下一条指令,这里我们在堆栈区esp位置右键,反汇编窗口跟随,会跟到如下代码段。 ![]() 我们看到了GetCurrentProcess(),紧接着就是WriteProcessMemory(),很明显就是这段代码还原了Game.dll. 我们往上一直寻找,直到找到 mov edi,edi push ebp mov ebp,esp 代码,这是通常的代码头。也有可能没有mov edi,edi这一句(这里就没有)。 有关mov edi,edi这一句其作用等同于nop,nop,目的是和push ebp mov ebp,esp在一起凑成5字节可以写HOOK跳转。而之所以不用nop,nop据说是因为其代码执行效率比nop,nop快。 找到代码头先不能简单的写ret。为了维护栈平衡,我们要找到函数本身的代码尾巴,找到函数正常返回是返回多少。 具体找的过程我就不赘述了,实在找不到就在函数里下个断点,一直F8步过跟踪,或者Ctrl+F9执行到返回。总之,这里应该ret 8. 下面我们再开一局测试一下,验证我们的修改有没有效。 (开发辅助就是要有耐心,有了新的想法就一定要及时测试,好知道下一步是接着这个思路还是另辟蹊径。另外,测试时会被“囚”好多好多账号,所以提前一定要申请大量小号。申请小号如果申请一定数量之后就会总结一些小技巧,比如申请的账号不必验证邮箱,申请账号的邮箱不必是真的,随便写一个没注册过的就可以,姓名和身份证是不会验证的。。。我是不是说的有点多了。如果你还嫌麻烦可以自己写个小程序申请。) 测试时因为这个函数是在游戏开局1min以内就执行了,所以我们修改时一定要快。OD在等待游戏开局时最好就附加上,然后定位到刚才的代码头。 (OD是有断点记忆功能的,如果上次退出时在函数头下F2断,下次进入游戏OD会自动定位代码头并下断。该定位应该是模块地址+偏移找到的,因为每次魔兽11xp.dll加载的地址可能不同,在xp系统下有可能相同,但win7X64上一定不会相同,所以以后我们所有要修改的位置都要记住代码的相对位置,就是相对于11xp.dll的位置。) 当函数断下来时,看OD标题栏提示的信息,代表断点所在代码位于什么模块内(行话叫“领空”)。 至于相对位置怎么记,可以记下当前代码位置,再打开OD的可执行模块列表,找到该模块的起始位置(基地址,也就是模块句柄,用GetmoduleHandle("11xp.dll")获取的值),用十六进制计算器计算差就是偏移。我更喜欢在CE中找,因为CE的“视图”中有“显示模块地址”,直接显示的就是现对于某模块的地址。此处代码头相对位置是11xp.dll+6cd60. 测试结果:好消息和坏消息。 好消息是:对WriteProcessMemory下断会发现确实不调用了,这意味着我们对于6f361f7c写0不会被还原了。 坏消息:当不对6f361f7c修改,单纯只测试函数代码头ret 8进行游戏时,到4分半左右就会提示“作弊嫌疑”,被T下线了。 我们没修改6f361f7c,也就是说我们没“开图”,但是还是检测到了,什么原因? 假如我们是奕奕公司的,我们除了对Game.dll校验之外,还比较关心游戏哪里会被修改? 肯定是检测Game.dll的那一部分代码。 就是CRC之上的CRC,用来校验11xp.dll的代码是否被修改。 这个问题就有点棘手了。这里的代码只要一动,就会被T,更别说开图了。 欲知后事如何,且看奕奕平台全图制作第四弹之山人自有妙计。 |
|
|
奕奕平台检测那点事
很久以来一直不知道为啥11平台下11xp.dll里的字符是7F(7FWARDEN_)开头的,最近无聊百度“神捕”,总算知道原因了。 继续我们的外挂制作之旅。 上回说到dota开局后我们把6f361f7c里的4字节数据由1改成0之后,可以实现小地图显示敌方单位,但是立即又不会显示了。 这里普及一下外挂制作原理。 最普遍意义的外挂是修改程序内存数据。 这其中有两种形式:修改程序的数据(堆,栈,寄存器blablabla)和修改程序代码。 像小地图显示单位这种方式就是修改程序代码。修改数据的方式我们以后会提到。 根据矛盾双方一定条件下可以相互转换,反作弊也相对应有2种形式:对程序源代码校验(传说中的代码CRC校验)和对程序数据的检测(通常以HOOK的形式并且代码进行VM保护)。 调试阶段我们是使用的调试工具OD或者CE进行内存修改的,检测程序要想修改内存就必然要用到修改内存的api。 先隆重介绍一个修改内存比较霸道的函数:WriteProcessMemory()。 这个api的牛X之处在于不仅可以修改本程序的内存,还可以修改其他程序内存,一看这功能就是为做外挂准备的。 用OD定位到这个函数。 具体操作是附加War3.exe后游戏刚开局立即按Ctrl+G,输入函数名,在函数头按F2下软断点。 二十几秒后游戏断下来了,主要看OD的堆栈区,如下图。 ![]() 当你接触魔兽外挂一段时间后就会对一些数据特别敏感。就如图中的6f001000,Game.dll代码的起始位置,在WriteProcessMemory函数中是要写入的内存地址,图中的8个F翻译过来就是-1(补码),这个参数是待写入内存的目标进程句柄,-1代表本进程(通常由GetCurrentProcess()获取,其实是多此一举的,直接用-1强制转换成HANDLE就行,但是习惯上大家都这么写),接下来看 87e000,这又是一个敏感数字,代表了Game.dll代码的大小(不是Game.dll的大小,Game.dll大小是bd4000)。 通过以上简单分析我们已经很明确11平台在做什么了。 在游戏开始时,11平台对War3进程的Game.dll代码部分进行了重新改写。所以我们之前的小地图显示单位功能会在游戏开始后20多秒消失了。 逢山开路,遇水搭桥。 就先从WriteProcessMemory下手。 下辑预告:在奕奕平台全图制作第三弹中,我将用讲解如何过掉本节中找到第一个的反作弊小程序,让大家对外挂制作有一个初步的了解。 |
|
|
奕奕平台检测那点事
半年之前我写过过当时的11平台外挂的帖子。 那时的11平台还很年轻,那时的我也很年轻。 当年11的检测只需要挂起线程就轻松搞定,而且检测有时根本不开,不需处理就能开图。 时光如水,岁月如锅。 现在的11平台已经今时不同往日,对外挂的检测力度堪称所有魔兽对战平台之首。 但是在作弊与反作弊这场游戏中,作弊者总是占据有利条件的,毕竟客户端在本地,所以调试起来就方便多了。 废话不多说,先介绍下调试工具。 肯定首选OD。 其实CE也可以调试,但是CE没有隐藏调试器(对IsDebugPresent的处理),调试起来多有不便,而且没有硬件断点功能。但是CE有另一个好处,数据,特征码搜索方便,并且拥有强大的汇编编写脚本,可以方便的对游戏原代码进行HOOK,所以在辅助开发阶段OD与CE工具要结合使用。 许多人制作过平台辅助时不知从何下手,不知11究竟检测了些什么。 在这里我提供一个思路,我们从修改代码的位置入手,逆向出11的检测函数。 本帖以后所有内容均以小地图显示单位功能在War3-1.24e-6387为例,内存地址为Game.dll+0x361f7c(其他功能地址可自行百度搜索,其偏移万年不变),该地址未经修改为1(4字节)。只要完成了这个功能的稳定开发,其他功能的实现只是多写几句代码而已。 通常Game.dll在War3进程中内存起始地址为6f000000。 在电信非强力反挂房天梯2房开一局游戏(不要在非天梯万人房间开单机测试,单机的检测会弱很多,这个以后会提到),用OD附加,在OD命令行 6f361f7c,数据窗口中将该地址的1改为0. 这时已经可以在小地图看见敌方单位(非隐身)了。 但是马上就会又看不见了。 回到OD发现6f361f7c地址内数据又变成1了。 到此我们应该意识到这不是单机游戏,我们的辅助之路才刚刚开始。 预知后事如何且看奕奕平台全图制作第二弹之初识“神捕”! |
|
|
[下载]2012年11月DNF"外挂"
随便看看过TP的视频教程就行,tp这么多年除了清零多了几处,其他都没变。 |
|
|
[求助]TP的四个HOOK都过了 OD提示无法附加游戏
明显是DNF4月份更新了,添加了几个新的钩子。 现在这几个钩子又没有了,驱动相对来说容易过了。 Ring3加入了动态代码校验,使得Win7 64位OD附加后网络连接中断。 |
|
|
[求助]TP的四个HOOK都过了 OD提示无法附加游戏
明显是DNF4月份更新了,添加了几个新的钩子。 现在这几个钩子又没有了,驱动相对来说容易过了。 Ring3加入了动态代码校验,使得Win7 64位OD附加后网络连接中断。 |
|
|
[求助]TP的四个HOOK都过了 OD提示无法附加游戏
清零没过会附加失败?楼上的写过驱动没? |
|
|
[求助]基地址问题
总会有基地址的。这个您放心! |
|
|
[求助]想学习做游戏辅助(挂),自己娱乐自己用,想知道需要知道哪些
汇编方面我认为非专业人士只需要知道: 有哪些寄存器,加减法,各类跳转,call和jmp的区别及地址机器码写法,以及内存方面知识。 以上这些都了解足够写出DNF,CF这类游戏的外挂了。 |
|
|
|
|
|
[求助]想学习做游戏辅助(挂),自己娱乐自己用,想知道需要知道哪些
我觉得写辅助不是先把要用的知识都学一遍再开始写,而是在写的过程中发现哪里不会,之后去找资料学习。 先看看视频教程和别人的源码,从修改代码搞起。 天下代码一大抄! |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值

