半年前[tc]编写这个内存修改器的时候曾经遇到过一个重大问题,昨晚重新翻看的时候,人品爆发,找到了一个可称为“无奈之举”的方案,今天就写了出来。
[问题何在]
此前修改英雄属性的时候,力量、敏捷这两项属性代码十分简易,譬如下面是读取敏捷数据的代码:
6F13CE7B:
| 8b be a8 00 00 00 | mov edi,[esi+000000a8] |
然而“智力”却十分难修改,关键性代码有多处,其中最显眼的一处是:
6F088E78:
| 8b 42 78 | mov eax,[edx+78] |
可是不幸的是,这段代码并不仅仅是读取智力的,它似乎是一个函数,将一些离散的数据从堆地址传送到临时地址。因此,虽然这里面包含了我们想要修改的内容,但同时包含了许多其他内容。
另一方面,力量、敏捷、智力这三项属性,在内存分配上可谓是毫无联系,应该是动态分配得到的,实际游戏中无法从其中一个地址判断出其他的地址。
[人品爆发]
从大量的数据中滤出所需的“智力”地址,是解决问题的方案之一。
昨晚发现,在有限的时间里,经过6F088E78的代码的eax的取值是十分有限的一些数据,而不是任意多个数据。进一步观察发现,在这些数据中,智力的地址竟然是eax的最大值!
这一惊人的发现,促使下面的方案的形成。
[无奈之举]
嵌入的代码,不用问,和其他的代码是不同的。以往获取力量等属性的时候,一般是将寄存器的内容转移到内存里,以便查阅。而智力这一属性的地址,是“经过6F088E78代码处的eax的值”中的最大值,因此需要挑出最大的一个。
例如,针对上面的例子,获得敏捷的地址,可以嵌入下面的代码:
| 89 35 08 10 46 00 | mov [00461008],esi |
那么esi的内容将被转移到00461008处,此后只要查阅[[00461008]+a8],就可以得到并修改敏捷的值。
而针对智力,嵌入下面的代码:
| 39 15 14 10 46 00 | cmp [00461014],edx | |
| 77 06 | ja 00449E2E | ;if edx smaller->goto L1 |
| 89 15 14 10 46 00 | mov [00461014],edx | ;if edx bigger ->save |
| ;L1: | ||
| ;原来的代码 |
那么edx的最大值将被转移到00461014中,在适当的时候取出[[00461014]+78]就可以获得并修改智力值了!
接下来的问题:什么是“适当的时候”呢?
[tc]无法给出准确的答案,目前的解决方案是:在敏捷获得后的3秒钟时间内获得的数据都是准确有效的数据。为什么安排在敏捷获得之后?主要原因是魔兽3 经常运行6F088E78(智力)这里的代码,而不会运行6F13CE7B(敏捷)这里的代码,因此基本上只有运行了敏捷的读取程序才有可能运行智力的读取程序。
这种盲目性决定了本方案是一个“无奈之举”的方案。
[程序现状]
大体上程序就这么定型了。目前的修改器可以实时修改指定英雄的经验值、力量、敏捷、智力、移动速度、攻击频率等属性。事实上,[tc]还可以实现攻击力、防御力、攻击类型(如混乱、穿刺等)、防御类型(如城甲、英雄甲等)等属性,不过意义不大,[tc]没有编写程序。
2008.3.1 改:这个无聊的修改器的V4版是在这里:http://tctianchi.yo2.cn/articles/tc%e9%ad%94%e5%85%bd3nbsp121%e5%86%85%e5%ad%98%e4%bf%ae%e6%94%b9%e5%99%a8nbspv4.html
Comments 21
不知道你是通过什么来逆向的?SOFTICE?TSEARCH?还是其他什么?也不知道你用什么工具来查找内存地址的?难道就是游戏万能修改器?这软件我不能用,只能找了个俄罗斯人写的ArtMoney SE还勉强可以查查...
Reply
Posted 29 二 2008 at 15:08 ¶另外,还有个问题,貌似WAR3数据的内存地址是不固定的,不知道你是怎么解决这个问题的...
Reply
Posted 29 二 2008 at 15:10 ¶某【TC】使用的八成是 ollydbg,先用游戏修改器(FPE2000?)找到内存地址,在 ollydbg 里监视这个内存地址,当有改动是中断,在 ollydbg 里找到修改这个内存地址的 war3.exe 的代码地址,以后只要把这个位置的代码抹成 nop 就結了。
貌似某【TC】是不抹成 nop 的?
Reply
Posted 29 二 2008 at 17:34 ¶我的WARCRFT用FPE2000是没法找内存地址的,载入的时候就会出问题...同样的一个东西,比如金矿,内存地址是动态给出的,每次载入都不同,不知道怎么考虑这个问题?
Reply
Posted 01 三 2008 at 0:21 ¶To Longinus:
没错,OllyDbg。但是现在OllyDbg不更新了,所以改用OllyICE。Cheat Engine最近版本克服了一些奇怪的BUG之后也变得越来越实用。
但是你又改变对我的称呼,使用了那个非官方的中括号写法。。。
To anoymous:
FP○不能用还可以用金山游○,Cheat Engine也很好用。你所说的内存地址变化问题,这正是这篇文章讨论的内容。而且我已经把要Hack的内容都贴出来了,应该不难理解。
但是我跟某些改90 NOP,以及把E8 SUB改成C0 ADD的奇异做法不同,[tc]我用的是比较常规的做法。把要修改的内容JMP到一块干净的地址,在那里实现被抹掉的内容,并将关键地址存放到一个确定的地址,这样就完成了动态地址到静态地址的转换。
anoymous同学需要在熟悉x86的基础上做一两次反汇编,就会明白了。
Reply
Posted 01 三 2008 at 10:20 ¶改 90 怎么是奇异做法,很多作修改器的人都是这样作的。
Reply
Posted 01 三 2008 at 12:29 ¶实际上,我用过OLLYICE载入过WAR3的,只可惜效果不好:连F9都会死掉的,结束进程后显示错误:ERROR_ACCESS_DENIED,所以我只能用其他的,比如SOFTICE,TSEARCH,可惜分析起来太痛苦了...不如OL来的简单...
金山游○,Cheat Engine...几乎所有的能改内存的软件我都试过了,可惜都有问题...可能是我WAR3本身版本的问题,我猜想被人加了层保护什么的...所以按CHAOTIC教程上的做法是完全行不通的...没办法,我下一步打算自己写一个内存修改的软件来解决这个问题...这方面资料还好找,唯一的问题,就是时间不够...
Reply
Posted 01 三 2008 at 15:36 ¶你好,首先很兴奋看到你者个war3修改器,很感激你.
但是我用的时候出现了问题,因为我下载的是你的v4版,但是我玩的是war1.20,一刷新英雄参数就弹出去不能玩了,试了很多次都这样,是否V4的修改器和war版本的问题呢?
如果是的,请问你可以发我个v3版本支持war1.20的修改器么?因为我和朋友玩的都是1.20,他们都不升级1.21的,而我不想让他们知道我用修改器..so..如果可以就真的万分感激..
我的e-mail:zing5048@126.com
谢谢..
Reply
Posted 30 三 2008 at 3:03 ¶你哪天帮他们升级了不就可以了吗?
我倒不相信他们还能为了个 1.20 重装 war3 吧。
让某[TC] 专门为了 1.20 重做一个版本似乎不太可能,他似乎很忙的样子。
Reply
Posted 30 三 2008 at 15:52 ¶V2版邮件已发,只是这一版可以改的东西比较少。祝心情愉快。
但是,这个修改器不是针对局域网对战的,只能单机用。我没有做封包的部分,对不起!
做网络外挂被视为违法行为了,没办法。
Reply
Posted 31 三 2008 at 9:06 ¶那路或多,原来有 v2 版这种东西的存在啊。
Reply
Posted 31 三 2008 at 22:05 ¶-_-b 要不然这篇文章是干什么用的
Reply
Posted 05 四 2008 at 11:15 ¶看不明白 敏捷和智力的地址有关系吗?话说敏捷和力量那些是放在一起的, 文中的嵌入下面代码是啥意思~
Reply
Posted 05 四 2008 at 18:21 ¶是没啥关系,所以需要单独处理。所以我用了两种不同的方法。
嵌入就是篡改游戏代码。
Reply
Posted 11 四 2008 at 9:16 ¶老大我也是玩1.20有空发我个V2谢谢jinjia22@yahoo.com.cn
希望着修改器越搞越好 哈哈
Reply
Posted 30 五 2008 at 11:50 ¶谢谢支持,邮件已发!V2可以改的东西很少,而且实际上我已经不玩这个游戏了,所以修改器也不会更新了。
Reply
Posted 31 五 2008 at 8:45 ¶现在玩单机都不能用游侠修改了,我也玩的1.20版,麻烦也发个v2的给我吧 ganmi@sina.com
Reply
Posted 05 十 2008 at 10:55 ¶现在玩单机都不能用游侠修改了,我也玩的1.20版,麻烦也发个v2的给我吧 ganmi@sina.com 嘿
Reply
Posted 05 十 2008 at 10:56 ¶邮件已发,缺的控件网上都有。
Reply
Posted 05 十 2008 at 21:42 ¶如果不忙,我也需要一份V2版,毕竟现在还用1.20
261001126@qq.com
thank you!
Reply
Posted 09 十二 2008 at 23:27 ¶去下我的v7版吧,这个v2版只能改原版的1.20,不能改1.20e
Reply
Posted 10 十二 2008 at 0:50 ¶Post a Comment