逆向工程平面数据文件

逆向工程 静态分析 爪哇 数字取证
2021-06-28 22:02:34

我正在编写一个软件,该软件将从名为 Pyware 的软件中获取位置数据并将其放入 GUI 中,以便我可以可视化坐标并为每个坐标分配一种颜色。

Pyware 是用 Java 编写的,我解压缩了它的一个保存文件,发现 Pyware 加载的图像作为材料,然后是 .3dj 文件。我正在尝试对这个 3dj 文件中的位置数据进行逆向工程,这样我就可以创建一些合理的坐标系来加载到我的 GUI 中,但我对如何做到这一点非常迷茫。

由于软件是Java写的,我想可能是数据是序列化的对象,所以我用google的jdeserialize尝试重构对象模式,但是没有用。这是我正在尝试逆向工程文件有任何想法吗?

1个回答

这不是答案,只是建议您接下来可以探索什么。

该文件似乎是一个简单的块序列,如下所示:

+00000 [4 bytes] block tag/id
+00004 [4 bytes] block length
+00008 [length ] block data

+00008+length [4 bytes] next block tag/id
...

所以在你的文件中:

00000000  33 44 4a 56 00 00 00 0a  00 09 00 00 00 30 11 f9  |3DJV.........0..|
00000010  19 6d 50 52 50 54 00 00  00 09 00 00 00 00 00 00  |.mPRPT..........|
00000020  00 00 00 50 52 45 46 00  00 00 3f 09 53 61 6e 73  |...PREF...?.Sans|
00000030  53 65 72 69 66 00 00 00  00 00 00 00 0c 09 53 61  |Serif.........Sa|
00000040  6e 73 53 65 72 69 66 00  00 00 00 00 00 00 06 40  |nsSerif........@|
00000050  00 00 00 16 41 41 4d 42  20 32 30 31 38 20 2d 20  |....AAMB 2018 - |
00000060  41 72 65 74 68 61 20 2d  20 32 50 52 46 32 00 00  |Aretha - 2PRF2..|
00000070  00 13 00 78 07 42 10 00  00 01 00 0c 00 06 04 ff  |...x.B..........|
00000080  ff 00 ff ff 00 47 52 49  44 00 00 05 25 00 56 08  |.....GRID...%.V.|
00000090  56 45 52 53 20 30 20 30  44 54 49 54 4c 20 2f 55  |VERS 0 0DTITL /U|
...

你得到这些块:

00000000 block "3DJV", length 0x0000000a (10) bytes
00000012 block "PRPT", length 0x00000009 (9) bytes
00000023 block "PREF", length 0x0000003f (63) bytes
0000006a block "PRF2", length 0x00000013 (19) bytes
...

随着您继续解析文件,您可能会发现更多有趣的块,可能与您感兴趣的数据相关。

现在您可以做的是创建最简单的文件并保存它。然后在 GUI 中只修改一个坐标,保存它并与第一个文件进行比较。用另一种方式修改坐标并进行比较。由于文件看起来相当简单,可能文件中只有一个浮点数发生变化,您就可以识别坐标格式。

另一种方法是反编译 Java 代码。它可以让您深入了解每个块的含义以及数据的存储方式。您还可以查看导入了哪些 3rd 方 Java 类和包,如果您可以直接使用它们,甚至可以找到在线文档,它可能会简化您的生活。

其他可能性是询问 Pyware 作者他们是否有格式或 SDK 的文档。如果 Pyware 允许您以支持良好或开放的格式保存或导出文件,您应该能够轻松导入。