尝试对十六进制到十进制函数进行反向工程



我试图弄清楚我的游戏(极品飞车:高风险)如何将玩家的钱从存储在文件中的十六进制值转换为玩家在启动游戏时看到的十进制值。

看看周围的数据,

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 年......

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

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

我将从文件中获取一个示例值:

0x3C  00 38 7C 46

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

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

我希望这可以帮助其他人!

最新更新