标题: [原创心得] [金手指第一弹]瞬移金手指深入研究
  本主题由 rolki 于 2008-8-13 12:25 解除高亮 
rolki (蛐蛐)
副镇长
Rank: 10Rank: 10Rank: 10
物是人非


游戏区特殊贡献  
UID 10544
精华 30
积分 3053
帖子 2719
现金 951
阅读权限 200
注册 2007-12-15
来自 旧版攻略苦力组
状态 离线
宠物 那啥,就那啥


宠物级别:50
宠物PK: 拒绝挑战
 
发表于 2008-7-25 15:31  资料  个人空间  短消息  加为好友 

[金手指第一弹]瞬移金手指深入研究

废话不多讲,切入正题

先了解下基础知识
http://www.kdtown.com/thread-14637-1-1.html


我们现在在道吉镇SHOP,想要前往道吉镇此房屋[即输入金手指02031F84:0002最后到达的地点]


然后查得瞬移金手指代码为02031F84:0002
打开VBA自带的内存查看器["工具"菜单->"内存查看器],输入02031F84,点击转到

注意红色框内的数据


先不输入金手指,来到此房屋内, 打开内存查看器,输入02031F84,点击转到

注意红色框内的数据


这时随便到其他城市,输入金手指代码02031F84:0002, 打开内存查看器,输入02031F84,点击转到


我们会发现与刚才在道吉镇某房屋内的数据一样
这就很好地解释了金手指工作的原理

来自PMGBA的资料http://www.pmgba.com/dispbbs.asp?BoardID=39&ID=111799

QUOTE:
金手指为什么能修改游戏
   
    游戏的各种状态都是以数值的形式存放在内存中的。当游戏需要改变这些值时(比如第一支精灵的体力减少二十),它就会用指令改变内存中存放这个数据的字节的值(那就让这个字节的值减少二十吧!)。当游戏需要知道一个数值时,它就会读取这个字节,并运算(比如使用喷雾剂后,你每走一步,游戏就需要读取剩余步数的值,然后把它减一,再放回去)或显示在屏幕上(比如你查看精灵的状况时,游戏要读取体力、经验值、是否麻痹、烧伤、冰冻等等数值并显示出来)。
    合法”的游戏者通过游戏本身修改这些值。而使用金手指的“非法”游戏者则通过某种手段,绕过游戏而直接修改这些值,而游戏并不知情,它会认为这些数值真的改变了。这样就达到了目的。
    那么金手指代码为02031F84:0002,与内存查看器查看的数据有何关联.
既然这样,那么数据在内存中的存放方式是怎样的呢?
    内存是一块物理上连续的区域。在电脑里,数据全部用二进制方式存储。但是它的缺点是位数太多,不便于我们操作。所以一般能够显示内存状态的软件都是采用16进制(进位制等内容可以参考一些计算机理论书籍或数学书籍)。每个十六进制的数位为0-9或a-f中的一个.十六进制的每位可以表示0-15的数。用0-9表示0-9,超过九的数用A-F表示。
    而数值存放的的基本单位是字节(其实更小的还有字等,因不常用,略去),它有两个16进制位,能表示的范围为1-255。其他单位都是构造出来的。比如双节字,顾名思义,它由两个字节组成,有四个16进制位,范围为1-65535;还有四字节由四个字节组成,有八个16进制位,范围为1-4294967295(就是二的16次方减一)。

那么十六进制和十进制怎样转换?
      如果你不会转换的话,用windows自带的计算器,先调到“科学型”,选择“十进制”,然后输入一个十进制数,按“十六进制”,这样十进制数被转换到十六进制。相反的过程可以类似的进行。
    关于十六进制数还有一点, 就是对两位以上的十六进制数,在内存中的存放方式与我们平常不同,它是高低位倒置的。转换方法是:1.奇数位的十六进制数,在前面补一个零(偶数位的不需要此步骤);2.以每两个十六进制位为一组;3.分好组后将组的顺序倒过来。比如一个数0123456h,补零后是00123456h,分组后就是00、12、34、56,倒过来就是56341200h。显然这操作两次后又会恢复原值。对于以字节存放的数值不存在这个问题。

0002为偶数位,因此分为00 02,接着高低位倒置,就变为02 00,这就是红色框内的数据,也是金手指输入之后的效果.对比在道吉镇SHOP的数据可得出,金手指改变了部分数据,从而实现地点转换



注:以上只是部分地点转换,不难看出道吉镇SHOP与道吉镇某房屋的数据相同的部分很多,因此推测较为简易

那么到达道吉镇SHOP的金手指是什么呢?
根据金手指工作原理,请注意02 04两组数据.因为道吉镇SHOP与道吉镇某房屋的数据相同部分很多.可设到达道吉镇SHOP的金手指为02031F84:XXXX.

则此时02 04两组数据是关键.将其倒推回去会得到0402.则到达道吉镇SHOP的金手指为02031F84:0402


回归正统,图中的想必大家很熟悉吧.


若想输入瞬移金手指02031F84:0002,则在"地址"一栏输入02031F84,在"值" 一栏输入0002,同时选择16位
关于有有符号数和无符号数,百度的解释[谢谢鸭子大大]

QUOTE:
有符号数和无符号数的区别在于第一位表示正负数,还是数值。换句话说,有符号的二进制数最高位是符号位,剩下的是数值部分的补码(正数的补码是其本身,负数的补码是该数值取反加一)。
10000111说明这个数是负数,由于去掉符号位,0000111的补码是1111001。
而1×2^6+1×2^5+1×2^4+1×2^3+0×2^2+0×2^1+1×2^0 = 121  [这个是2进制转换10进制数的基本公式.]
所以有符号数10000111是-121

对于无符号数可以直接转换不需要考虑正负。
10000111 = 1×2^7 + 0×2^6 +0×2^5 +0×2^4 +0×2^3 +1 ×2^2 +1×2^1 +1×2^0 =135

这个不是重点,我们接下来探究的是8位,16位与32位

来自PMGBA的解释http://www.pmgba.com/dispbbs.asp?boardid=39&id=139750

QUOTE:
一般如果冒号后面只有2个数或2个字母为8Bits(进制)
4个为16Bits,8个为32Bits。这里为270F,所以为16进制

鸭子大大专业的解释

QUOTE:
8位表示开始修改的范围是从所给定的地址(图中:指针地址是指向02031F84)起之前数8位开始的2进制数.将被你修改.图中你输入了0001,并且选择了8位那么实际这一段数值将变为03007E28 : 01[ 0000 0001 ] 修改你的程序
16位,32位同理.

以下是在下从瞬移金手指角度的分析

输入02031F84:01,选择8位.起始地点是在道吉镇PC.会发现一开始到达自己家里,接着是道吉镇SHOP,山木镇某房屋,山木镇PC,对手家中以及对手家中2楼

若一边用内存查看器查看数据,注意红框位置
自己家里         01 02
道吉镇SHOP   01 09
山木镇某房屋   01 0A
山木镇PC        01 0B
对手家中2楼    01 01
对手家中         01 00

是否意味着这些数据也能转换成金手指?
经过在下验证,是的.
自己家里         02031F84:0201
道吉镇SHOP   02031F84:0901
山木镇某房屋   02031F84:0A01
山木镇PC        02031F84:0B01
对手家中2楼    02031F84:0101
对手家中         02031F84:0001

但是在下起初以为无论起始地点在哪里,理论上应该到达的地点如下
01 XX [XX为00~9F]

但是似乎有些是造成死机现象,还有的与起始地点的选择有关即若选择道吉镇PC为起始地点,则无法到达0108[爸爸的道馆]
目前不明是为何.

以上在下猜测输入02031F84:01,选择8位造成的情况是到达地点的不确定.因此可以衍生出更多的金手指代码

输入02031F84:0001,选择16位. 用内存查看器查看数据

这就是所谓的到达地点确定性.


那么在此基础上可以再衍生出一些变化

道吉镇PC1楼数据


道吉镇PC2楼数据


我们通过以上资料易知到达道吉镇PC1楼的金手指代码为02031F84:0202
经验证有效

但是如何到达道吉镇PC2楼,不难看出2组数据差异较大.为了方便采用32位



观察得出到达道吉镇PC2楼的金手指代码为02031F84:00000302
经验证有效


完毕.目前先到这里.欢迎挑刺

[ 本帖最后由 rolki 于 2008-7-26 15:20 编辑 ]





我的笑只在过去
顶部
[广告] 如果您在口袋镇的论坛签名里有您自己的宣传代码,那么请速删除。我们正在打击伪宣传,详情请看这里
无尽的梦幻
版主
Rank: 9Rank: 9Rank: 9



游戏区特殊贡献  
UID 2976
精华 18
积分 8184
帖子 7860
现金 -245
阅读权限 110
注册 2007-3-10
来自 空间
状态 离线
宠物 魔蝎大帝


宠物级别:63
宠物PK: 接受挑战
 
发表于 2008-7-26 12:39  资料  个人空间  主页 短消息  加为好友  QQ
废话一句
其实你输入冒号后面的时候可以54数和字母前面的0





顶部
[广告] 口袋镇QQ群2:50507635,欢迎您的到来~
rolki (蛐蛐)
副镇长
Rank: 10Rank: 10Rank: 10
物是人非


游戏区特殊贡献  
UID 10544
精华 30
积分 3053
帖子 2719
现金 951
阅读权限 200
注册 2007-12-15
来自 旧版攻略苦力组
状态 离线
宠物 那啥,就那啥


宠物级别:50
宠物PK: 拒绝挑战
 
发表于 2008-7-31 16:01  资料  个人空间  短消息  加为好友 

[金手指第二弹]乱谈内存修改与金手指

恩终于进入金手指第二弹了.迅速切入正题.

先谈下一些利用内存查看器原创金手指的技巧.
无疑遇敌金手指以及物品购买金手指已然很完善.比较有所作为的依然是瞬移金手指.那么怎样才能得到一些新的瞬移金手指呢?
我们不妨一用已知的瞬移金手指.在第一弹解释金手指工作原理时举的例子是一个很好的范例.不妨来回顾下.

QUOTE:
我们现在在道吉镇SHOP,想要前往道吉镇此房屋[即输入金手指02031F84:0002最后到达的地点]


然后查得瞬移金手指代码为02031F84:0002
打开VBA自带的内存查看器["工具"菜单->"内存查看器],输入02031F84,点击转到

注意红色框内的数据


先不输入金手指,来到此房屋内, 打开内存查看器,输入02031F84,点击转到

注意红色框内的数据


这时随便到其他城市,输入金手指代码02031F84:0002, 打开内存查看器,输入02031F84,点击转到


我们会发现与刚才在道吉镇某房屋内的数据一样

掌握了方法之后我们不难推测出到达道吉镇SHOP的金手指代码为02031F84:0402.
在下在第一弹的时候一再强调道吉镇SHOP与道吉镇某房屋的数据相同部分很多.这就为得到一些新的瞬移金手指提供了大胆猜想的便利.

而关于8位,16位,32位的选择.仍然要回顾第一弹的内容.

QUOTE:
但是如何到达道吉镇PC2楼,不难看出2组数据差异较大.为了方便采用32位



观察得出到达道吉镇PC2楼的金手指代码为02031F84:00000302
经验证有效

为何在下建议各位使用32位金手指?
根据金手指工作原理.8位只能改变红框内的数据,故可能造成不确定性.


我们不妨猜想若使得8位改变不止红框内的数据,那么不就实现了8位,16位与32位之间的完全转换?

但是似乎实际操作时遇到了一些问题,8位始终无法修改红框以外的数据.这样也就是说无法通过金手指改变红框以外的数据即无法通过金手指实现8位,16位与32位之间的完全转换.

那么如果直接修改内存会如何?
其实直接修改内存无法实现地点转移.

来自PMGBA的资料http://www.pmgba.com/dispbbs.asp?BoardID=39&ID=111799

QUOTE:
这种方法的缺点是不能像输入金手指码那样锁定内存,只能现用现改。

由于是现改,就会随着场景切换导致无法锁定内存,既而无法实现地点转移.

综上个人认为无法较为简易地实现8位,16位与32位之间的完全转换.因此使用32位能做到16位以及8位做不到了,但一般使用16比较方便.所以这是为什么金手指大多数都是XXXXXXXX:XXXX 的原因.


回归正题.我们再进行进一步的大胆猜想.
在游戏中无论步行到达何地,红匡内数据都不会改变.


注:飞天,潜水等除外.
例飞天到达道吉镇与步行到达道吉镇之间的对比.



因为此数据无法用金手指简易修改,所以没有什么实用价值.

但是不难发现各个城市之间除了红匡内数据外都有很大的差异.但是rolki还是用金手指32位输入了道吉镇的数据:00FF0A00.结果发现竟然到达了道吉镇中央.


似乎很神奇.经在下验证用其他地点的数据也有效.
但是用此方法只能到达某城市A点即我们无法到达某城市B点.因为在某城市的范围内,无论我们走道哪里,数据一般不会改变.

注:那个用这个方法可以到达城市比较奇怪的地方.



好了.下面说说直接修改内存的特点

QUOTE:
优点是比较灵活,且不易死机。

于是想用金手指修改物品的话可以考虑直接修改内存.这个方法确实挺灵活的.

最后附上前人的精心成果.
http://www.pmgba.com/dispbbs.asp ... D=110997&page=1

QUOTE:
将VBA金手指转CODEBREAKER及SAGAME的方法:
如果数值有两位,就把VBA码的第一个“0”改成“3”
例如:
02000089:63
转成
32000089 63

如果数值有4位,就把VBA码的第一个“0”改成“8”
例如:
02000098:E703
转成
82000098 E703

如果数值有多位,如
02004080:AABBCCDD
则转换为
82004080 AABB
82004082 CCDD

完毕.估计没有第三弹了.

[ 本帖最后由 rolki 于 2008-8-1 15:31 编辑 ]





我的笑只在过去
顶部
[广告] 影视区内可以在线看所有TV版,包括最新的DP哦,还不快加入?


当前时区 GMT+8, 现在时间是 2008-11-21 21:23
沪ICP备07002327号

 

Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.250719 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 『口袋镇』 - WAP