Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
readable-thrift — Human-friendly Thrift encoder/decoder | Kitploit
Инструменты/GitHubGitHub/nccgroup/readable-thrift
Web Proxies & InterceptionReverse EngineeringWeb Application ExploitationPenetration TestingUtilities & Frameworks
GitHubnccgroup/readable-thrift

readable-thrift

Human-friendly Thrift encoder/decoder

Репозиторий
24104 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Readable Thrift

Readable Thrift упрощает работу с бинарными сообщениями протокола Thrift, преобразуя их в удобочитаемый формат и обратно. Это делает ручной анализ и модификацию бинарных сообщений Thrift такими же простыми, как работу с текстовыми протоколами вроде HTTP.

Библиотека реализована на Java, что позволяет интегрировать её с расширениями популярных инструментов тестирования веб-приложений, работающих на JVM, таких как Burp и ZAP. Чтобы запустить инструмент анализа или модификации, достаточно выделить нужные байты и передать их кодеку.

Использование библиотеки

Библиотека readablethrift — это Maven-пакет на базе Gradle, который можно установить и подключить в качестве зависимости в других проектах. Она предоставляет четыре простых метода для кодирования и декодирования в виде исходных бинарных данных или Base64-строк.

Примечание: Сейчас поддерживается только стандартный бинарный протокол. Compact binary и JSON (в отличие от читаемого JSON, который создаёт кодек) пока не поддерживаются.

Декодирование сообщений — из бинарного Thrift в JSON

  • Метод ThriftCodec::decode создаёт наглядный экземпляр org.json.JSONObject непосредственно из исходного буфера байтов, содержащего бинарное сообщение Thrift.
  • Статический метод ThriftCodec::decodeB64String декодирует строку Base64 и затем вызывает для неё decode.

Кодирование сообщений — из JSON в бинарный Thrift

  • Метод ThriftCodec::encode преобразует наглядный экземпляр org.json.JSONObject в исходный буфер байтов, содержащий эквивалентное бинарное сообщение Thrift.
  • Статический метод ThriftCodec::b64encodeJson преобразует JSON-объект в бинарный формат Thrift и кодирует результат в Base64.

Расширяемость

Класс ThriftCodec спроектирован расширяемым, чтобы обрабатывать изменения или расширения формата бинарного протокола Thrift, например дополнительные заголовки бинарного формата или инкапсуляцию.

Использование командной строки

Чтобы использовать интерактивный интерфейс командной строки, включённый в библиотеку, выполните стандартную задачу Gradle для сборки JAR-файла и затем запустите его с помощью java -jar:

root@kitploit:~
$ ./gradlew

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
$ java -jar build/libs/readablethrift-1.0.0-all.jar 
Enter Base64 encoded message or JSON object (or q to quit): 

Демонстрация

Чтобы показать, как будет выглядеть человекочитаемый JSON, возьмём пример бинарного фрагмента в кодировке Base64, извлечённого из трафика какого-либо приложения:

root@kitploit:~
$ base64 -D | hexdump
gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAAIY29vbHVzZXILAAEAAAALcGFzc3dvcmQxMjMAAA==
00000000: 8001 0001 0000 0005 6c6f 6769 6e00 0000  ........login...
00000010: 000c 0000 0b00 0000 0000 0863 6f6f 6c75  ...........coolu
00000020: 7365 720b 0001 0000 000b 7061 7373 776f  ser.......passwo
00000030: 7264 3132 3300 00                        rd123..

Строки «login», имя пользователя и пароль намекают на то, что это запрос аутентификации. Чтобы изменить такое сообщение на лету, пришлось бы изучать внутренние детали бинарного формата парсера Thrift, выяснять структуру сообщения в hex-редакторе и вручную обновлять каждое поле. В случае строк имени пользователя и пароля также потребовалось бы обновлять префиксные значения длины, а не только сами строки. Это утомительный, чреватый ошибками и трудоёмкий процесс. Readable Thrift упрощает его; вот то же самое сообщение, переданное этой библиотеке:

root@kitploit:~
Enter Base64 encoded message or JSON object (or q to quit): gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAAIY29vbHVzZXILAAEAAAALcGFzc3dvcmQxMjMAAA==
root@kitploit:~
{"message": {
    "name": "login",
    "type": "call",
    "fields": [{
        "id": 0,
        "type": "struct",
        "value": [
            {
                "id": 0,
                "type": "string",
                "value": "cooluser"
            },
            {
                "id": 1,
                "type": "string",
                "value": "password123"
            }
        ]
    }],
    "seqid": 0
}}

Теперь легко проверить, что сообщение описывает вызов метода login со структурой, содержащей два строковых значения в качестве аргумента. Обновить строковые значения так же просто, как отредактировать JSON-поля value и передать новый JSON-текст обратно кодеку. Все префиксы длины и прочие детали бинарного формата будут обработаны автоматически.

Также можно добавлять новые поля, чтобы проверить возможные опциональные параметры. Может быть, существует административный или отладочный логический флаг? Или список идентификаторов разрешений? Опишите новое поле с помощью id, type и value, а затем добавьте его в массив fields:

root@kitploit:~
Enter Base64 encoded message or JSON object (or q to quit): {"message": {
    "name": "login",
    "type": "call",
    "fields": [{
        "id": 0,
        "type": "struct",
        "value": [
            {
                "id": 0,
                "type": "string",
                "value": "differentuser"
            },
            {
                "id": 1,
                "type": "string",
                "value": "differentpassword!"
            }
        ]
    },
    {"id": 1, "type": "bool", "value": true},
    {"id": 2, "type": "list", "value":
        {
            "elemType": "i32",
            "list": [1, 2, 3]
        }
    },
    {"id": 3, "type": "map", "value":
        {
            "keyType": "string",
            "valueType": "string",
            "map": {
                "dog": "bark",
                "cat": "meow"
            }
        }
    }],
    "seqid": 0
}}
root@kitploit:~
gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAANZGlmZmVyZW50dXNlcgsAAQAAABJkaWZmZXJlbnRwYXNzd29yZCEAAgABAQ8AAggAAAADAAAAAQAAAAIAAAADDQADCwsAAAACAAAAA2NhdAAAAARtZW93AAAAA2RvZwAAAARiYXJrAA==

Ниже показано обновлённое сообщение, преобразованное обратно в бинарный протокол Thrift:

root@kitploit:~
$ base64 -D | hexdump
gAEAAQAAAAVsb2dpbgAAAAAMAAALAAAAAAANZGlmZmVyZW50dXNlcgsAAQAAABJkaWZmZXJlbnRwYXNzd29yZCEAAgABAQ8AAggAAAADAAAAAQAAAAIAAAADDQADCwsAAAACAAAAA2NhdAAAAARtZW93AAAAA2RvZwAAAARiYXJrAA==
00000000: 8001 0001 0000 0005 6c6f 6769 6e00 0000  ........login...
00000010: 000c 0000 0b00 0000 0000 0d64 6966 6665  ...........diffe
00000020: 7265 6e74 7573 6572 0b00 0100 0000 1264  rentuser.......d
00000030: 6966 6665 7265 6e74 7061 7373 776f 7264  ifferentpassword
00000040: 2100 0200 0101 0f00 0208 0000 0003 0000  !...............
00000050: 0001 0000 0002 0000 0003 0d00 030b 0b00  ................
00000060: 0000 0200 0000 0363 6174 0000 0004 6d65  .......cat....me
00000070: 6f77 0000 0003 646f 6700 0000 0462 6172  ow....dog....bar
00000080: 6b00
Скачать инструмент