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

时间:2013-01-27 17:53:44

标签: reverse-engineering

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

查看周围的数据,

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

任何人都可以看到这里的模式是什么吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

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

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

0x3C  00 38 7C 46

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

this website处很好地描述了将浮点数存储为十六进制值以及IEEE-754规范的整个过程。

我希望这可以帮助别人!