0

我试图弄清楚我的游戏(Need for Speed: High Stakes)如何将玩家的钱从存储在文件中的十六进制值转换为玩家在启动游戏时看到的十进制值。

看着周围的数据,

0x30 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 8B 46
0x40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

我已经能够找到存储在偏移量 3E 和 3F 处的影响值,但它们如何被视为十六进制值并转换为常规十进制值对我来说是一个谜。

在玩了一会儿十六进制值之后,我能够找到一个模式:

Hex    Decimal   
7B 46  16120
8B 46  17904
9B 46  19952
AB 46  22000

有趣的是,AB、9B 和 8B 十进制值之间的差异是 2048(嗯,2 的幂...),虽然,就在我以为我已经开始破解它的时候,我发现 8B 和7B是1784年...

谁能看到这里的模式可能是什么?我错过了什么吗?

4

1 回答 1

2

事实证明,没有什么可以进行逆向工程......我只是不明白不同的数据类型是如何工作的 :) 货币价值实际上被存储为浮点数而不是整数。

我将从文件中获取样本值:

0x3C  00 38 7C 46

如果您反转字节(以读取 467C3800),然后将其插入任何在线计算器,您将获得 16142.0 的合理值,这正是我使用该样本值寻找的值。

将浮点数存储为十六进制值的整个过程以及 IEEE-754 规范在这个网站上都有很好的描述。

我希望这可以帮助别人!

于 2013-01-28T01:02:18.823 回答