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

注册 登录

QQ登录

只需一步,快速开始

查看: 3200|回复: 17
打印 上一主题 下一主题

[求助] 会做修改器的能进来帮个忙么?

  [复制链接]

1

主题

61

帖子

110

积分

中级玩家

Rank: 3Rank: 3

贡献度
3
金元
984
积分
110
精华
0
注册时间
2009-9-15
跳转到指定楼层
主题
发表于 2011-7-24 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想自己动手编个最简单的内存修改器,但发现金钱的地址每次运行程序都不一样,有时候是0x10BA8468,有的时候又是0x10F18468,这个地址到底应该怎么算呢?
再多说明一点,基地址我找了,用枚举模块的方法,就像其他Windows程序一样都是0x0040000,按理说金钱这种全局变量都应该是编译时生成的偏移地址,理论上在虚拟内存中的地址也不会改变,但怎么它就变了呢?还希望大牛们能提供点思路
回复

使用道具 举报

10

主题

760

帖子

611

积分

超级玩家

Rank: 5Rank: 5

贡献度
20
金元
5309
积分
611
精华
0
注册时间
2008-11-30
舒服的沙发
发表于 2011-7-24 23:39 | 只看该作者
金錢在 0x234fd34 固定的
回复 支持 反对

使用道具 举报

1

主题

61

帖子

110

积分

中级玩家

Rank: 3Rank: 3

贡献度
3
金元
984
积分
110
精华
0
注册时间
2009-9-15
硬硬的板凳
 楼主| 发表于 2011-7-24 23:54 | 只看该作者
金錢在 0x234fd34 固定的
tomwu 发表于 2011-7-24 23:39

显然不是,我用我找的修改都成功了,就是地址老变
回复 支持 反对

使用道具 举报

25

主题

582

帖子

1138

积分

游戏狂人

Rank: 6Rank: 6

贡献度
170
金元
4580
积分
1138
精华
0
注册时间
2009-5-8
冰凉的地板
发表于 2011-7-25 16:05 | 只看该作者
本帖最后由 bwmouse 于 2011-7-25 16:08 编辑

所谓有基址不是指ImageBase。

是这样的,你应该找:goujian.exe(文件名我记不得了,随便写了一个)带偏移,比如:
goujian.exe+XXXX
这才是基址。
然后,钱的地址是在这个基址的基础上做偏移,比如:
[[[goujian.exe+XXXX]+YY]+ZZ]=钱的地址

古剑我没做过,我拿到游戏都已经比较晚了,这个是组内其他人做的。

还有,纠正一点,并不是WINDOWS程序都是0x00400000,是C++程序才是如此。Delphi、C#、VB根据用的版本不一样,ImageBase也不同的。
回复 支持 反对

使用道具 举报

0

主题

272

帖子

425

积分

高级玩家

Rank: 4

贡献度
54
金元
2091
积分
425
精华
0
注册时间
2004-1-31
5#
发表于 2011-7-25 16:31 | 只看该作者
本帖最后由 chica 于 2011-7-25 16:36 编辑

这个游戏每次启动游戏或加载存档都会重新计算地址(金钱,属性等等),不是不变的.找到计算地址的call引用之就行了,没什么难度
回复 支持 反对

使用道具 举报

1

主题

61

帖子

110

积分

中级玩家

Rank: 3Rank: 3

贡献度
3
金元
984
积分
110
精华
0
注册时间
2009-9-15
6#
 楼主| 发表于 2011-7-25 17:06 | 只看该作者
所谓有基址不是指ImageBase。

是这样的,你应该找:goujian.exe(文件名我记不得了,随便写了一个)带偏移, ...
bwmouse 发表于 2011-7-25 16:05

哎,课本里的基址都是在接口和汇编或计算机组成原理里讲的,根本就没和OS联系起来,而OS Concept里的虚拟内存讲的都是替换算法什么的,所以您说的Imagebase我有点不太理解(在我印象里x86处理机的物理地址就是基址左移一位+偏移地址),这个Windows的虚存实在太复杂了
我用Module32First()函数枚举Gujian.exe这个进程的里的Gujian.exe Module得到的结果是0x00400000,如果这个是您说的ImageBase的话,那么真实的基地址和偏移地址应该怎么得到呢(如果不反编译的话)?
望不吝赐教
回复 支持 反对

使用道具 举报

0

主题

272

帖子

425

积分

高级玩家

Rank: 4

贡献度
54
金元
2091
积分
425
精华
0
注册时间
2004-1-31
7#
发表于 2011-7-25 17:22 | 只看该作者
回复 6# novagforce


    这个游戏靠简单静态基地址加偏移是找不到所需地址的,原因上面说过了
回复 支持 反对

使用道具 举报

25

主题

582

帖子

1138

积分

游戏狂人

Rank: 6Rank: 6

贡献度
170
金元
4580
积分
1138
精华
0
注册时间
2009-5-8
8#
发表于 2011-7-25 17:24 | 只看该作者
本帖最后由 bwmouse 于 2011-7-25 17:27 编辑

额。。。。。。抱歉抱歉,我以为你是对PE之类的有一定了解,才这样写的,不好意思。
课本上说的其实是对的,但是遗憾的是恐怕你们的老师没有结合实际的文件结构来讲,所以你可能弄昏了。

是这样的,一个EXE程序,就是一个PE程序,每个程序都会有一个ImageBase,意思是映射基址,这个概念说起来很长了,不扯这个,回到游戏上来。
你现在想知道的,如何得到钱的基址和偏移,对吧?
我建议你可以去看看CE的教程。方法来说,大概是这样的,先找到钱的地址,然后,查看哪个地方在写入这个地址(这个功能CE自带,所以我说你去看看CE教程),然后找到一个地址后,再查这个地址,找到后,查找这个地址哪里访问过(和查看写入一样,是CE自带),这样一步一步向上推。

但是,这种要求汇编代码必须像下面这样写的才行:
mov eax,[ecx+8]
如果换成这样写:
add ecx,8
mov eax,[ecx]
那就你只能查到mov eax,[ecx],而查不到这个偏移的8
这种情况下,就只有靠OD来跟了。

5楼的兄弟其实是个不错的办法,可以省很多力气,可惜并不是所有游戏都支持。

古剑我没看过,不知道难度有多大?
你可以先找个简单的游戏来看看,比如我原来搞过大蛇无双Z,这个确实很简单,基址+1级偏移,好像是。
回复 支持 反对

使用道具 举报

0

主题

272

帖子

425

积分

高级玩家

Rank: 4

贡献度
54
金元
2091
积分
425
精华
0
注册时间
2004-1-31
9#
发表于 2011-7-25 17:28 | 只看该作者
回复 8# bwmouse

额..对于这个游戏只能如此找地址,简单基地址加偏移是行不通地.
回复 支持 反对

使用道具 举报

25

主题

582

帖子

1138

积分

游戏狂人

Rank: 6Rank: 6

贡献度
170
金元
4580
积分
1138
精华
0
注册时间
2009-5-8
10#
发表于 2011-7-25 17:34 | 只看该作者
回复  bwmouse

额..对于这个游戏只能如此找地址,简单基地址加偏移是行不通地. ...
chica 发表于 2011-7-25 17:28


嗯?你说的它的函数做了些什么?难道它不是干这么个事?

目前为止我只遇到过一个游戏不能这么干。不是古剑,是一个欧美的游戏。
回复 支持 反对

使用道具 举报

0

主题

272

帖子

425

积分

高级玩家

Rank: 4

贡献度
54
金元
2091
积分
425
精华
0
注册时间
2004-1-31
11#
发表于 2011-7-25 17:40 | 只看该作者
本帖最后由 chica 于 2011-7-25 17:46 编辑

回复 10# bwmouse
无他,对象生成内存地址不同,代码做了一些判断,而这些判断不可少.当然计算出正确地址后加偏移也是对的
回复 支持 反对

使用道具 举报

25

主题

582

帖子

1138

积分

游戏狂人

Rank: 6Rank: 6

贡献度
170
金元
4580
积分
1138
精华
0
注册时间
2009-5-8
12#
发表于 2011-7-25 17:53 | 只看该作者
回复 11# chica


O,那这个没什么,只要搞明白它的函数,一样能用基址+偏移

我见过一个比较BT的
估计是动态编译生成对象的。
比如玩家,它是这样的,进游戏时,基址+偏移,得到一个地址。
这个地址其实是一个函数的地址,然后,设置一个结构体,调用这个函数,返回一个结构体。
然后这个结构体里有一些数据,再基址+另一个偏移,得到另一个函数的地址。
再用得到的结构体其中一些数据,当参数,调用这个函数,得到玩家信息,比如HP什么的。
玩家的EXP又是这个规律再走一遍。
这几个函数里面有很多解密的内容,很长,我都懒得看了。

当时弄这个游戏时,我还在给一个朋友开玩笑说,我算知道为什么欧美游戏都TMD要求高了,这根本是没事找事嘛。就一单机游戏,用得着吗?

名字我忘了,很小众的一个游戏,当时也没做东西,只是因为朋友提到这游戏不好找数据,我帮他看看罢了。
回复 支持 反对

使用道具 举报

0

主题

272

帖子

425

积分

高级玩家

Rank: 4

贡献度
54
金元
2091
积分
425
精华
0
注册时间
2004-1-31
13#
发表于 2011-7-25 17:57 | 只看该作者
回复 12# bwmouse


   这个游戏就是动态生成对象,依靠代码的判断偏移会增加或减少几个层次,所以只能用它的call...
回复 支持 反对

使用道具 举报

25

主题

582

帖子

1138

积分

游戏狂人

Rank: 6Rank: 6

贡献度
170
金元
4580
积分
1138
精华
0
注册时间
2009-5-8
14#
发表于 2011-7-25 18:00 | 只看该作者
回复 13# chica


你说古剑?
O。。。。。。如果这种情况确实比较恼火了。

话说,现在动态生成对象用得是越来越多了。。。。。。看来中国现在都富了,开发者都不考虑用户用的配置比较低了。
回复 支持 反对

使用道具 举报

0

主题

272

帖子

425

积分

高级玩家

Rank: 4

贡献度
54
金元
2091
积分
425
精华
0
注册时间
2004-1-31
15#
发表于 2011-7-25 18:04 | 只看该作者
回复 14# bwmouse

这个游戏就是,不过不复杂,很好理解.你看下代码就明白了.呵呵,说明开发者注意保护自己的产品了..
回复 支持 反对

使用道具 举报

0

主题

272

帖子

425

积分

高级玩家

Rank: 4

贡献度
54
金元
2091
积分
425
精华
0
注册时间
2004-1-31
16#
发表于 2011-7-25 18:30 | 只看该作者
给点线索吧,对应游戏1.58版
AurGameCombatS.dll+2BFB3开始
到AurGameCombatS.dll+2C01C
是计算金钱地址的代码段
回复 支持 反对

使用道具 举报

10

主题

320

帖子

931

积分

超级玩家

Rank: 5Rank: 5

贡献度
161
金元
2767
积分
931
精华
1
注册时间
2010-12-12
17#
发表于 2011-7-25 21:14 | 只看该作者
古剑的地址是变来变去,CE我也是一知半解,那些例题可以做出来但是不知道如何应用在程序里。
而且古剑好多地方是多线程的同时工作,即使搜到代码也要小心地处理。
另外,古剑可以用OD来跟踪吗,我也不会OD,但印象中OD是调不了古剑的。
回复 支持 反对

使用道具 举报

25

主题

582

帖子

1138

积分

游戏狂人

Rank: 6Rank: 6

贡献度
170
金元
4580
积分
1138
精华
0
注册时间
2009-5-8
18#
发表于 2011-7-26 10:13 | 只看该作者
现在中国的软件业也就是游戏业还比较注意保护。主要是被整怕了

最近我根本没有空,工作上+生活上的事情,已经忙得不可开交了。唉。。。。。。

回17楼的朋友,你说的例题是CE的吗?CE的话,网上有视频教程教你怎么找游戏基址的,至少我几年前看过。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-8 04:54 , Processed in 0.112603 second(s), 15 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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