【问题标题】:Reverse engineering of data structure数据结构逆向工程
【发布时间】:2017-03-29 11:06:17
【问题描述】:
我正在对一个 .net 应用程序进行逆向工程,该应用程序在 blob 之后存储在 DB (Firebird) 中。它包含 ~0.00 到 ~6.00 之间的 18 个数字。你知道这可能是什么数据结构,以及如何将此十六进制反转为十进制或浮点数,范围在 0.00~6.00 之间。
FE 13 73 64 7A 59 FB 3F EB 8C 9B 85 26 75 05 40 A0 2F 2D 06 96 73 00 40 B8
A8 BE 1D 0F E5 01 40 D2 DF C9 6A 79 83 03 40 97 65 59 96 65 B9 0C 40 B2 88
F1 7E 55 DE 05 40 E4 45 5E E4 45 9E 00 40 34 05 20 CD 9E B9 FB 3F 58 20 9F
8B 53 D2 FC 3F 1A 44 DB 4D 77 4E 02 40 03 F9 5C 9C 92 B6 FF 3F 85 54 48 85
54 C8 00 40 E0 C9 6A 79 63 04 05 40 87 05 F2 B9 38 25 09 40 2D 41 79 FA 0D
66 03 40 CA 77 49 64 11 A3 FE 3F 57 AA D8 BD 10 7F FD 3F
谢谢!
【问题讨论】:
标签:
.net
hex
blob
reverse-engineering
data-conversion
【解决方案1】:
看起来这些数字只是连接在一起的 18 个 IEEE-754 双精度浮点数。
您可以使用BitConverter.ToDouble 再次将这些字节中的 8 个转换为数字。因此,您必须以 8 个字节为单位对这个字节数组进行迭代。
您的特定示例将产生以下数字:
FE 13 73 64 7A 59 FB 3F => 1.7093452380952
EB 8C 9B 85 26 75 05 40 => 2.6822023809524
A0 2F 2D 06 96 73 00 40 => 2.0564384920635
B8 A8 BE 1D 0F E5 01 40 => 2.2368452380952
D2 DF C9 6A 79 83 03 40 => 2.4391964285714
97 65 59 96 65 B9 0C 40 => 3.5905257936508
B2 88 F1 7E 55 DE 05 40 => 2.7335615079365
E4 45 5E E4 45 9E 00 40 => 2.0772817460317
34 05 20 CD 9E B9 FB 3F => 1.7328174603175
58 20 9F 8B 53 D2 FC 3F => 1.8013492063492
1A 44 DB 4D 77 4E 02 40 => 2.2883134920635
03 F9 5C 9C 92 B6 FF 3F => 1.9820734126984
85 54 48 85 54 C8 00 40 => 2.0978174603175
E0 C9 6A 79 63 04 05 40 => 2.6271428571429
87 05 F2 B9 38 25 09 40 => 3.1431746031746
2D 41 79 FA 0D 66 03 40 => 2.4248313492063
CA 77 49 64 11 A3 FE 3F => 1.9148115079365
57 AA D8 BD 10 7F FD 3F => 1.8435218253968