3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 8272|回复: 20
打印 上一主题 下一主题

[原创] [ElonaEXE*研究系列*之(二)]找出SpellStock的地址公式以及游戏的基址

  [复制链接]

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
跳转到指定楼层
主题
发表于 2011-4-11 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gsky1986 于 2011-4-12 00:48 编辑

在系列2中,我们来研究如何找出Elona的SpellStock(魔法存量)的地址公式以及游戏的基址






    系列1传送门http://3dm.178.com/thread-1927561-1-2.html
    ElonaExe微调补丁包http://3dm.178.com/thread-1912689-1-1.html

>>前言

    任何在计算机上运行的软件都必须借助内存达到快速存取数据并交给CPU运算的目的,为什么是这样?问冯诺依曼去...............

    内存有很多单元,每个单元各自不同,如何区分呢?你懂的,是地址(Memory Address),找到了这个地址,我们就找到了我们要的数据。

    是不是很想做个自己的内存修改器?或是EXE补丁?无论哪个,你都必须理解并熟悉你要修改的游戏的内存布局............

    这次我们拿Elona的SpellStock开刀,看看能不能发现点啥?








>>基础知识
   
    装入内存的很多数据地址都是动态变化的,我们可以利用Cheat Engine或者金山游侠找到某个数据的临时地址,但当你重启游戏时,地址都有可能变化,所以我们要
    找的不是具体的那个地址,而是一个公式。
    ->基地址(Base Address)

    这个一般游戏版本不变就不变化,含义就像它名字一样。

    ->偏移量(Offset)

    这个一般游戏版本不变也不发生变化,指的是某个地址离它的父级地址有多远。

    -> N级偏移

    如果拿数轴上的自然数1所在的位置所谓基地址,那我们要找到数字5,有多少种找法?(被喷了吧.......)

    其实不用管有多少种找法,我们可以这样找。

    GetAddressOf(1) + Offset(1,5)= AddressOf(5)                                                    - - - -   (1)
    GetAddressOf(1) + Offset(1,n1) + Offset(n1,n2) + ... + Offset(n,5) = AddressOf(5)   - - - -   (2)


    第一种就是一级偏移,下面的就是N级偏移。

    在内存中,我们的公式会稍微有点变化,为什么呢?看下面:

    Level_1 = GetValueOf(BaseAddr + OffsetToLevel_1);

    Level_2 = GetValueOf(Level_1 + OffsetToLevel_2);

    ........

    Level_N = GetValueOf(Level_N-1 + OffsetToLevel_N).

    其中GetValueOf(X)代表取Address = X 处的值。(如果你要的地址是32位就按32位来取)

>>思路

    现在我们要找的重点就是基地址和偏移,我们一般采用回溯法去找。

    所谓回溯法,以SpellStock为例,我们先找到某时刻SpellStock的数值所在地址,然后在OllyDBG中通过回溯程序逻辑来找到从基地址到它的偏移公式。

>>操作

    首先我们要得到某个SpellStock的地址,怎么找?

    打开Elona,打开Cheat Engine(CE)->附加至Elona的进程。

    然后在搜索框内填入一个你想找的魔法存量的数值,比如肉体复活:

   

    好,我们在CE中输入192,并点击搜索,然后按下图选择:

   

    接着,回到游戏,使用一下肉体复活,迅速切换至CE点重新搜索(如上图),如果不行就多试几次,这样我们就得到 肉体复活 魔法存量的一个地址。

    找到地址后,按下图操作:
   
    很好,我们看看这个地址附近的内存都有什么?
   
    嗯,发现:

   

    对比我们其它的魔法存量来看,这块区域就是我们SpellStock数据存储的区域了。OK,打开OllyDBG附加Elona进程,再把这个内存地址在OD中输入查看,得到:

   

   嗯,然后下内存访问断点

  

  为什么是内存访问断点?因为我们接下来要按V键打开魔法窗口,你觉得要画这个窗口并且显示数据的话,会不会访问这个区域呢?

  在Elona中,按V打开魔法窗口,发现OD断在这里:

  

  嗯,注意看图,一定要注意看哦,这段代码是干什么用的,我们先不关心,我们只要知道我们的地址是怎么来的就好了:

  看看寄存器的值:

  

   嗯EDX = 0x00DE11F4,这个就是我们肉体复活的地址嘛~

  好,EDX的值又是从ESP+0x10(十进制的16)来的,我们看看有没有操作堆栈(Stack)的指令,喔,下面有2个POP,那么向上看

  

  发现了2个Push,我们知道,PUSH一个寄存器值会使得ESP+4,2个就是ESP+8,那么我们要找的那个堆栈值应该在什么位置呢?

  ESP+0x10-0x08 = ESP+0x08 = ESP + 8

  有趣么?呵呵,我们找找调用这段代码的时候,倒数第二个PUSH。在OD中按Ctrl+F9执行到返回,接着F8:

  

  嗯,看来就是这个ESI拉,不废话,往上跟:

  

  这幅图比较复杂,所以大家一定要集中精力看清楚,看看是怎么向上回溯的。

  在上图中每个红色框处,我们下断点并重新F9,会发现ESI的值决定于ECX,向上看看

  

  发现了什么?发现了0x424D8C?你不熟悉?你没用过Elona_Me?呵呵,这个就是我们游戏的基地址,当然要确定它是不是,我们要做一些测试,如果各种情况(除非更新了你的游戏版本)它都不变,我们就当它是个基地址吧!还有那个2C就是著名的Elona_Me中的p1->p2的偏移量,这里我们略过不提,如果你做了足够多的测试,发现很多数据都起始于这里。。。。。










  我们完成了第一个目标,找到了游戏的基地址,但我们还没有找出完全的公式,回到这幅图来:

  

  请注意第一个红框标记的那个Call, 它有什么作用呢?F7跟进去

  

  注意看图,嗯EAX的值在这里改变,并且来自于ESP+4,老办法,找离它最近的那个PUSH,来到:

  才会发现最近的那个PUSH就是ESI,这才有了我们上面找基地址那么顺利,哈哈。

  

  看来又要跟跟EAX了,上

  

  继续上:

  


  嗯,发现EAX来自内存0x424D88处,很抱歉,这个地址的数据是变化的,怎么办呢?跟这个数据的变化情况?God,我们看看放宽条件行不行,假设在处理有关我们的SpellStock数据时,0x424D88处有个值,我们看看每次我们打开

  魔法窗口和使用魔法时,它是不是一个特殊而固定的值呢?

  经测试,是的,如下:

  

  这个问题就是我在ElonaEXE微调补丁中的旧版本中,缩减SpellStock有时失效的原因了:)

  嗯,改成常量,在任意分辨率都没问题了。不是么?








>>结论

   现在,根据我们的发现整理一下这个公式:

   代码

  <

  代码执行到EAX时,它的地址就是我们的SpellStock地址


  公式

   BaseAddr = 0x400000+0x24D8C = 0x424D8C

   P2 = GetValueOf(BaseAddr +0x2C)

   P3 = GetValueOf([P2+0x4E30+0x1C])

   FirstAddrOfSpellStock = P3 + 0x0 = (((0x400000+0x24D8C)+0x2C)+0x4E4C) + 0x0
   LastAddrOfSpellStock = P3+0x31C = (((0x400000+0x24D8C)+0x2C)+0x4E4C) + 0x31C

   测试图如下:

   
   


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

2

查看全部评分

回复

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
舒服的沙发
 楼主| 发表于 2011-4-12 00:29 | 只看该作者
回复 1# gsky1986


    占楼备用
回复 支持 反对

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
硬硬的板凳
 楼主| 发表于 2011-4-12 00:29 | 只看该作者
回复 1# gsky1986


    占楼备用
回复 支持 反对

使用道具 举报

9

主题

84

帖子

151

积分

中级玩家

Rank: 3Rank: 3

贡献度
9
金元
1150
积分
151
精华
0
注册时间
2011-3-16
冰凉的地板
发表于 2011-4-12 00:34 | 只看该作者
超专业物品


这种东西以我的水平我玩不转  我用金山就好
帮忙顶
回复 支持 反对

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
5#
 楼主| 发表于 2011-4-12 00:35 | 只看该作者
回复 4# dk-setzer


    多玩玩就好了:)感谢支持。
回复 支持 反对

使用道具 举报

7

主题

689

帖子

718

积分

超级玩家

Rank: 5Rank: 5

贡献度
37
金元
5704
积分
718
精华
0
注册时间
2008-11-16
6#
发表于 2011-4-12 01:54 | 只看该作者
对研究员一定要顶下的 不过这文章嘛........对我来说 过于枯燥了.........
回复 支持 反对

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
7#
 楼主| 发表于 2011-4-12 02:10 | 只看该作者
回复 6# w5601324


    ,对我来说也很枯燥,呵呵。
回复 支持 反对

使用道具 举报

14

主题

2629

帖子

2830

积分

游戏达人

凝默Akali 丶

Rank: 7Rank: 7Rank: 7

贡献度
65
金元
25700
积分
2830
精华
0
注册时间
2010-12-27
8#
发表于 2011-4-12 02:12 | 只看该作者
技术贴留名 广告位招租
回复 支持 反对

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
9#
 楼主| 发表于 2011-4-12 02:16 | 只看该作者
回复 8# xuanxinhun


    头像很闪
回复 支持 反对

使用道具 举报

279

主题

1万

帖子

2万

积分

云游仙境

教主大人

Rank: 12Rank: 12Rank: 12

贡献度
5956
金元
9725
积分
24797
精华
0
注册时间
2009-11-22
10#
发表于 2011-4-12 09:21 | 只看该作者
技术贴...我又只能路过了
回复 支持 反对

使用道具 举报

7

主题

183

帖子

255

积分

高级玩家

Rank: 4

贡献度
19
金元
1792
积分
255
精华
0
注册时间
2006-10-6
11#
发表于 2011-4-12 09:35 | 只看该作者
强人!你的EXE微调补丁太好用了。再次感谢一个!
回复 支持 反对

使用道具 举报

17

主题

712

帖子

485

积分

高级玩家

Rank: 4

贡献度
25
金元
3847
积分
485
精华
0
注册时间
2009-7-20
12#
发表于 2011-4-12 09:37 | 只看该作者
看不懂 猥观
回复 支持 反对

使用道具 举报

1

主题

1097

帖子

1471

积分

游戏狂人

Rank: 6Rank: 6

贡献度
208
金元
6388
积分
1471
精华
0
注册时间
2009-10-13
13#
发表于 2011-4-12 10:33 | 只看该作者
技术帖啊,我小白只能膜拜了,希望以后能看到LZ更好的修改~
回复 支持 反对

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
14#
 楼主| 发表于 2011-4-12 12:46 | 只看该作者
回复 10# sunmoon55555


   
回复 支持 反对

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
15#
 楼主| 发表于 2011-4-12 12:46 | 只看该作者
回复 11# mseren


    抛砖引玉而已,没有什么强的。

    谢谢你喜欢:)
回复 支持 反对

使用道具 举报

18

主题

660

帖子

937

积分

超级玩家

Rank: 5Rank: 5

贡献度
94
金元
5510
积分
937
精华
1
注册时间
2009-4-24
16#
 楼主| 发表于 2011-4-12 12:47 | 只看该作者
回复 13# 蓝色休止符


    目前正考虑制作一个外挂式Mod:)
回复 支持 反对

使用道具 举报

12

主题

693

帖子

1615

积分

游戏狂人

Rank: 6Rank: 6

贡献度
74
金元
13192
积分
1615
精华
0
注册时间
2009-10-30

3DM页游玩家3DM页游玩家

17#
发表于 2011-4-12 14:37 | 只看该作者
顶技术帖,有个傻瓜工具EloSnack应该可以满足各位的要求啦
回复 支持 反对

使用道具 举报

17

主题

1089

帖子

1305

积分

游戏狂人

Rank: 6Rank: 6

贡献度
29
金元
11889
积分
1305
精华
0
注册时间
2009-3-13
18#
发表于 2011-4-12 19:34 | 只看该作者
楼主能不能研究下睡觉涨潜力的公式啊
回复 支持 反对

使用道具 举报

87

主题

2945

帖子

3010

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
316
金元
17461
积分
3010
精华
0
注册时间
2009-11-16
19#
发表于 2011-4-12 21:49 | 只看该作者
代表艾薇儿感谢你
回复 支持 反对

使用道具 举报

1

主题

725

帖子

689

积分

超级玩家

Rank: 5Rank: 5

贡献度
3
金元
6774
积分
689
精华
0
注册时间
2009-9-3
20#
发表于 2011-4-16 16:54 | 只看该作者
ddddddddddd
回复 支持 反对

使用道具 举报

212

主题

1946

帖子

2345

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
245
金元
13652
积分
2345
精华
0
注册时间
2008-11-15
21#
发表于 2011-4-16 19:36 | 只看该作者
帮顶,...........
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-2-25 14:06 , Processed in 0.126156 second(s), 20 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表