魔兽3内存修改器 v6

由于hsluoyz同学强烈要求我研究一下魔兽3 1.20e的HP摆放位置,以便达到他某个不可告人的目的,加上本人确实无法接受v5版修改器不能改一般单位的事实,所以昨天晚上作了这个v6修改器。这一次的重点是对3个版本的支持以及无注入的新思路。

war3trainerv6_2.gif

修改器+源代码+手册打包:war3trainerv6.rar

[新特性]

  • v6版区别于v5版的特征:
  • 无注入的新思路:这一版实现了不修改游戏代码,当然更不是内存搜索,全部直接定位。游戏怎么运行,我就怎么拿到数据,十分猥琐。
  • 同时改多个单位:现在你可以一次选中几个单位,我会列出你选择了什么。
  • 又可以改单位了:既然单位可以改,建筑也就可以改。
  • 多版本支持:受不了某些不肯升级游戏的朋友了,现在支持1.20e、1.21、1.22.0.6328三个版本。
  • 修改单位的坐标:下图就演示了主基地平移。
  • 英雄技能:按照hyp的指示,加了最简单的技能修改,更加复杂的修改没有做。

war3trainerv6_1.jpg
主基地平移, 采矿速度提升;
注意到树丛中的大法师了吗?
另外建筑的阴影明显只是一张贴图

[关于选中单位ESI的获得]
以下以1.22为例说明我是怎么拿到玩家选择的所有单位。

另外我要正告hsluoyz同学:我怀疑你找来的那个静态指针不具有普遍意义。我愿意以一顿晚饭的代价跟你打赌。

获得选中列表并不困难,如果你不愿意用我的思路,你也可以直接在内存中搜索“.?AUCUnitListNode@@”获得ESI队列,或者用.CPlayerWar3.cpp所在的段+90拿到链表基地址然后推算单位地址,都可以。但是我是不做内存搜索的,所以步骤略多:

  1. [6FAA2FFC] 记为A1
    参考:
    6F416B0A mov edi, 6FAA2FFC
    6F416B10 movzx ebx, word ptr [edi + 28]
    6F416B14 call 6F52F4A0
  2. [A1 + 58 + 4 * a2] 记为A2,a2取0
    参考:6F3A0564 mov eax, [ecx + eax * 4 + 58]
  3. [A2 + 34] 记为UnitListRoot
    参考:6F2CC0AE mov ebp, [eax + 34]
  4. 这个UnitListRoot的数据结构:
    struct UnitListRoot
    {
        BYTE NotSure[0x1F0];
        UnitListNode* Head, End;
        DWORD Length;
    }
    参考:6f415b95 mov eax, [ebx+1F4]
  5. UnitListNode的数据结构:
    struct UnitListNode
    {
        UnitListNode* Next;
        DWORD notNext;
        UnitBase* thisUnit;
    }
    其中notNext总是等于~Next,而thisUnit就是上次要找的ESI

[后记]
这一次我会说得比较小心:我不知道我还会不会更新这个修改器了。

更新2008.11.5:针对《dota》写了v7版,别介意。

相关日志

Comments 24

  1. zx.longinus wrote:

    你不是说不做魔兽3 的修改器了吗?

    Reply

    Posted 27 十 2008 at 14:56
  2. [tc]天驰 wrote:

    我错了,下次注意。

    Reply

    Posted 27 十 2008 at 19:36
  3. zx.longinus wrote:

    關于陰影是貼圖的問題我一開始就注意到了,因為相對魔獸3 其他方面的技術,那個陰影的質量太高了。

    Reply

    Posted 27 十 2008 at 22:04
  4. [tc]天驰 wrote:

    但是不会随一天中时间的不同而改变贴图。

    Reply

    Posted 28 十 2008 at 20:00
  5. zx.longinus wrote:

    做了个参考界面的形状,c# 的。
    http://farm4.static.flickr.com/3022/2983248224_60d0d5ce77_o.jpg

    魔兽里的光照应该是简单的全局光照,没有考虑过太阳的入射角。

    Reply

    Posted 29 十 2008 at 10:20
  6. [tc]天驰 wrote:

    你这个图是用来秀桌面的是吧。

    Reply

    Posted 30 十 2008 at 21:24
  7. zx.longinus wrote:

    我还没有沦落到要靠这种方法秀桌面的地步。

    怎么样,改成 tab 风格的吧。

    Reply

    Posted 30 十 2008 at 22:16
  8. [tc]天驰 wrote:

    恩,界面元素多了之后就不好了。但是你对呈现修改列表怎么看的,我对表格不算满意。

    Reply

    Posted 01 十一 2008 at 11:39
  9. zx.longinus wrote:

    我觉得表格很好,界面这种东西,只要有何用的控件就没有必要更换。而且尽量融合逻辑作用相同的按钮。以及在空间上层叠逻辑类似的区域。
    所以你原来界面上数个“修改”“刷新”实际可以融合成一个;general 和 unit 之间没有交互操作,就完全可以用 tab 来层叠,减少界面空间。说来我很讨厌现在 ide 的界面,为什么搞那么多的子栏目把代码区挤得这么小。为了解决这问题又提供了个脑残的 perspective 选择,简直是不让人顺心嘛。

    而且除了表格你还能用什么,难道要搞美工软件里的 property bar ?

    Reply

    Posted 01 十一 2008 at 12:09
  10. [tc]天驰 wrote:

    你不是可以把宽屏竖起来嘛,影响就小多了。
    上一版的“刷新”、“修改”很难合并,因为单击“刷新”之后,用户要用Alt+Tab切换回游戏再做操作,所以时间上是不连续的。

    Reply

    Posted 02 十一 2008 at 10:07
  11. zx.longinus wrote:

    我只是泛泛的说一说,还有,把按钮放在 frame 的线框上是非常不好的,赶快去掉。

    Reply

    Posted 02 十一 2008 at 11:55
  12. [tc]天驰 wrote:

    > 美工软件里的 property bar
    正有这个打算来着。

    > 魔兽里的光照应该是简单的全局光照
    偶尔也会有加出来的光源,比如英雄裤裆下的手电筒。

    Reply

    Posted 02 十一 2008 at 21:58
  13. zx.longinus wrote:

    那个适合属性多,但是数量固定,又需要非常多种控件才能表示的情况。

    那个不是光源啦,就是个贴图……

    Reply

    Posted 02 十一 2008 at 23:17
  14. hyp wrote:

    good job!
    再次下来研究 娃哈哈

    Reply

    Posted 03 十一 2008 at 12:35
  15. hyp wrote:

    -_-测试结果:
    单位刷不出来,版本的话他说完全支持就是了
    游戏那里的那些数值刷出来是正确的,可惜改不了(不知道是我不会改不)

    Reply

    Posted 03 十一 2008 at 12:45
  16. [tc]天驰 wrote:

    呃……又变成再写一版的理由了。
    麻烦你看一下game.dll的版本号?然后“单位刷不出来”是指什么,左侧的列表没有东西?

    Reply

    Posted 04 十一 2008 at 23:27
  17. [tc]天驰 wrote:

    To hyp:
    原来是《dota》在搞怪,已在v7中修正。

    To zx.longinus:
    这才发现你给的图中有奇怪的文字。

    Reply

    Posted 05 十一 2008 at 12:21
  18. zx.longinus wrote:

    什么文字?
    我一直主张截图要有内含。

    Reply

    Posted 05 十一 2008 at 13:20
  19. [tc]天驰 wrote:

    问题是,里面有调教系的剧情,而且我还不认识被调教的人。

    Reply

    Posted 06 十一 2008 at 11:51
  20. zx.longinus wrote:

    这是以前叫 werner 玩 crysis 但是他不从,留下的怨念。正好 werner crysis 的缩写是 wc。

    Reply

    Posted 06 十一 2008 at 22:50
  21. pooxer wrote:

    好东西
    弱弱的问下是VB哪个版本做的?

    Reply

    Posted 05 五 2009 at 1:07
  22. [tc]天驰 wrote:

    VB6,古老的版本。其实是因为写后续版本的时候懒得把老的代码移植到新平台造成的。

    Reply

    Posted 05 五 2009 at 10:39
  23. pooxer wrote:

    有个很汗的问题:

    该V6好像只有1.20.4.6074可用

    我的是1.20.3

    请问这1.20.4跟1.20E有什么不同啊 ?网络上的转换器都是直接1.20 1.21 1.22的 怎么还有这么多不同

    是不是只是game.dll文件的区别

    Reply

    Posted 05 五 2009 at 23:58
  24. [tc]天驰 wrote:

    > 我的是1.20.3
    其实增加1.20是因为有人催,而催促的人用的是1.20e。1.20有好几个版本,其中1.20e就是1.20.4。你下载的这个可能是早先的版本了。

    > 网络上的转换器都是直接1.20 1.21 1.22的
    你有试过在互联网上对战吗?其他用1.20e的人应该不能与你游戏。

    Reply

    Posted 07 五 2009 at 13:25

Post a Comment

Your email is never published nor shared. Required fields are marked *

下面是页面统计代码,当作没看见就行了