1

I'm writing a piece of software that will take positional data from a piece of software called Pyware and put it into a GUI so I can visualize the coordinates and assign each coordinate a color.

Pyware is written in Java and I unzipped one of its save files and found the images Pyware loads as materials and then a .3dj file. I'm trying to reverse engineer the positional data from this 3dj file so I can create some reasonable coordinate system to load into my GUI but I'm pretty lost on how to do this.

Since the software was written in Java, I thought maybe the data was a serialized object, so I used google's jdeserialize to try to reconstruct the object schema, but that didn't work. Here's the file I'm trying to reverse engineer. Any ideas?

1 Answer 1

1

This is not an answer, just a suggestion what you can explore next.

The file seems to be a simple sequence of blocks like this:

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

So in your file:

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

you get these blocks:

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

As you continue parsing the file you're probably going to find more interesting blocks, possibly related to data you're interested in.

Now what you can do is to create the simplest possible file and save it. Then modify just one coordinate in the GUI, save it and compare with the first file. Modify the coordinate in another way and compare. Because the file looks rather simple, it could be that only one floating point number changes in the file and you'll be able to identify the coordinate format.

Another approach would be to decompile the Java code. It can give you insight into the meaning of each block and how data are stored. You can also look at which 3rd party Java classes and packages are imported, it might simplify your life if you can use them directly or even find an online documentation.

Other possibilities are asking Pyware authors whether they have a documentation of the format or an SDK. If Pyware allows you to save or export files in a well-supported or open format you should be able to import with ease.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.