Шестнадцатеричная строка дает получитаемый результат. Как узнать, как закодировано остальное и что это значит? - PullRequest
2 голосов
/ 03 августа 2020

Я случайно наткнулся на шестнадцатеричную строку и мне интересно, о чем она и почему она закодирована именно так.

Шестнадцатеричная строка взята от повара ie из неизвестного приложения (которое само по себе было найдено после сброса уже закодированного содержимого session.db). Он гласит:

HEX=0x80037d710028580a0000005f7065726d616e656e74710188580a00000061646d696e5f61757468710288580700000076657273696f6e71035805000000372e342e30710458050000007469746c6571055811000000e5ae9de5a1944c696e7578e99da2e69dbf71065804000000636f6465710788752e

Тривиальный xxd -r -p показывает часть своего содержимого (на самом деле я сделал шестнадцатеричный дамп вывода xxd, чтобы лучше показать часть ASCII и оставшуюся шестнадцатеричную часть ):

echo $HEX | xxd -r -p | hexdump -C
00000000  80 03 7d 71 00 28 58 0a  00 00 00 5f 70 65 72 6d  |..}q.(X...._perm|
00000010  61 6e 65 6e 74 71 01 88  58 0a 00 00 00 61 64 6d  |anentq..X....adm|
00000020  69 6e 5f 61 75 74 68 71  02 88 58 07 00 00 00 76  |in_authq..X....v|
00000030  65 72 73 69 6f 6e 71 03  58 05 00 00 00 37 2e 34  |ersionq.X....7.4|
00000040  2e 30 71 04 58 05 00 00  00 74 69 74 6c 65 71 05  |.0q.X....titleq.|
00000050  58 11 00 00 00 e5 ae 9d  e5 a1 94 4c 69 6e 75 78  |X..........Linux|
00000060  e9 9d a2 e6 9d bf 71 06  58 04 00 00 00 63 6f 64  |......q.X....cod|
00000070  65 71 07 88 75 2e                                 |eq..u.|
00000076

Почему некоторые части разборчивы, а некоторые явно закодированы?

Как я могу go определить, как кодируются искаженные части и что они означают?

1 Ответ

1 голос
/ 03 августа 2020

Похоже, что объект сериализован с помощью Python 3 Pickle , библиотеки сериализации объекта:

import pickle
f = open("/mnt/z/Temp/download.dat", "rb")
data = pickle.Unpickler(f).load()
print(data)

Вывод:

{'_permanent': True, 'admin_auth': True, 'version': '7.4.0', 'title': '宝塔Linux面板', 'code': True}

Как я знал это: Ну, это можно узнать по образцу того, как он выглядит, если вы это знаете. В противном случае поиск в Google первых байтов 80 03 7d 71 00 также приведет к некоторым результатам, когда люди говорят о файлах, созданных Python, и просмотр их кода покажет, что pickle - это библиотека, используемая для записи этих файлов.

Вероятно, веб-приложение, из которого происходит этот объект сеанса, написано в Django или какой-либо другой веб-инфраструктуре на основе Python.

Итак, это не значит, что некоторые части «дополнительно закодированы», это просто что это двоичный формат, который кодирует структурированные данные, а «читаемые» части - это строковые части, а «искаженные» части - это просто части формата, которые не читаются напрямую людям, но имеют смысл в протоколе (например, определение того, что тип значения что-то такое, какова длина следующей части, et c.).

Кстати, «面板 Linux 面板» («Пагода Linux Панель») кажется удобная панель управления сервером .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...