Десериализация объекта из строки без исходной информации об объекте в Java - PullRequest
0 голосов
/ 09 марта 2019

Скажем, у меня есть сериализованная строка объекта, которая выглядит примерно так при отображении в терминале:

bd40efbfbdefbfbd00000000000a7371007e00000aefbfbdefbfbdefbfbd
2b020c49efbfbdefbfbdefbfbdefbfbd2b020c49efbfbd3fefbfbdefbfbd
efbfbd126eefbfbdefbfbd40efbfbdefbfbd000000000a7371007e00000a
efbfbdefbfbdefbfbdefbfbdefbfbd126eefbfbdefbfbdefbfbd53efbfbd
efbfbdefbfbd16efbfbd3fefbfbdefbfbdefbfbdefbfbd45efbfbd40efbf
bdefbfbd00000000000a7371007e00000aefbfbdefbfbdefbfbd3b645a1c
efbfbdefbfbdd0b4395810624e3fefbfbd020c49efbfbd5e3540efbfbdef
bfbd000000000a7371007e00000aefbfbdefbfbdefbfbdefbfbd126eefbf
bdefbfbdefbfbdefbfbd1aefbfbdefbfbd76c8b43fefbfbdefbfbd53efbf
bdefbfbdefbfbd1740efbfbdefbfbd00000000000a7371007e0000efbfbd
c49befbfbdefbfbd53efbfbdcfbf50624defbfbdefbfbdefbfbd3fefbfbd
efbfbd45efbfbdefbfbdefbfbd40efbfbdefbfbd000000000a7371007e00
00efbfbdc9ba5e353f7cefbfbdefbfbd1cefbfbd083126efbfbd3fefbfbd
2d0e560418efbfbd40efbfbdefbfbd00000000000a7371007e0000efbfbd
efbfbdefbfbd45efbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbf
bd126eefbfbd3fefbfbdefbfbd45efbfbdefbfbdefbfbd40efbfbdefbfbd
000000000a7371007e0000efbfbdefbfbd26efbfbd78efbfbdefbfbdefbf
bdefbfbd6eefbfbdefbfbd4fefbfbd3b3fefbfbd10624defbfbdefbfbd40
efbfbdefbfbd00000000000a7371007e00000aefbfbdefbfbd4fefbfbd3b
645aefbfbdefbfbd126eefbfbdefbfbd503fefbfbdefbfbdefbfbd22efbf
bdefbfbd6040efbfbdefbfbd000000000a7371007e0000efbfbdefbfbd49
efbfbd5e353f7defbfbdefbfbd10624defbfbdefbfbd3fefbfbd083126ef
bfbd78efbfbd40efbfbdefbfbd00000000000a7371007e00000aefbfbdef
bfbd26efbfbd78efbfbdefbfbdefbfbdefbfbdefbfbdefbfbd126eefbfbd
efbfbd3fefbfbdefbfbd16efbfbd2b020c40efbfbdef

Это гекс, который я вижу при наборе: xxd -p fileName в Терминале. Я также могу просмотреть его как двоичный, но я не уверен, как декодировать сериализованный объект.

Я знаю, что это набор сериализованных объектов Java, но я не знаю, где начинается / заканчивается сериализация. Я попытался перебрать с индексом начала и конца, но я продолжаю получать: java.io.StreamCorruptedException: неверный заголовок потока: 30303061

Я не знаю, что еще попробовать, любая помощь будет принята с благодарностью.

Спасибо!

1 Ответ

0 голосов
/ 03 апреля 2019

Я понял, как десериализовать объект. После некоторого исследования я пошагово прошел шестнадцатеричный дамп, чтобы извлечь соответствующую информацию. Сложность состоит в том, что некоторые данные отправляются в разных пакетах по HTTP, поэтому десериализация как бы сшивается. В любом случае, вот что я смог придумать. Если у кого-то есть какие-либо замечания по неизвестным частям фрагмента ниже, пожалуйста, не стесняйтесь комментировать, и я постараюсь отредактировать свой ответ соответствующим образом.

0005 – STREAM_VERSION 
0a - UNKNOWN
73 – TC_OBJECT
72 – TC_CLASSDESC
0015 – length of the class name
616461732e746f6f6c6b69742e646174612e504144 - class name
efbfbd221844efbf – SerialVersionUID
bdefbfbdefbfbdefbfbd - UNKNOWN
02 - OBJECT SERIALIZABLE
0004 - NUMBER OF PROPERTIES (4)
44 - PROPERTY CODE (D : Double)

0001 - PROPERTY NAME LENGTH
61 - PROPERTY NAME (a)?

44 - PROPERTY CODE (D : Double)
0001 - PROPERTY NAME LENGTH 
64 - PROPERTY NAME (d)

44 - PROPERTY CODE (D : Double)
0001 - PROPERTY NAME LENGTH 
70 - PROPERTY NAME (p)

44 - PROPERTY CODE (D : Double)
0008 - PROPERTY NAME LENGTH 
73657175656e6365 - PROPERTY NAME (sequence)
0a -UNKNOWN
78 - END BLOCK

70efbfbdefbfbdef - VALUE OF a: 1.00947731285363886197528984273E236 
bfbd2b020c49efbf - VALUE OF d: -1.13937500000189637083813920526E-1 
bdefbfbdefbfbd45 - VALUE OF p: -2.3100431973060554004134169949E-10 
efbfbdefbfbdefbf - VALUE OF sequence: -1.9249974767166909849440370334E230 

Надеюсь, это поможет тому, кто находится в той же ситуации, что и я.

Спасибо!

Полезные ссылки:

JavaWorld

Javapapers

...