+ Reply to Thread
Results 1 to 1 of 1

Thread: Kaitai Struct

  1. #1
    s.zelenyuk's Avatar

    Default Kaitai Struct

    Kaitai Struct - инструмент для описания структуры бинарных файлов, основная особенность которого в декларативном подходе, когда формат файла задаётся не командами на скриптовом языке (перейти туда-то, считать столько-то байт и т.д.), а определением каждого поля (это - двойное слово, это - строка и т.д.) на подмножестве языка YAML. Описание затем можно скомпилировать в модуль для конкретного языка, от C++ до JavaScript, и использовать в своей программе как чёрный ящик.
    Например, так может быть описан TCP пакет:

    tcp_segment.ksy

    Code:
    meta:
      id: tcp_segment
      endian: be
    seq:
      - id: src_port
        type: u2
      - id: dst_port
        type: u2
      - id: seq_num
        type: u4
      - id: ack_num
        type: u4
      - id: b12
        type: u1
      - id: b13
        type: u1
      - id: window_size
        type: u2
      - id: checksum
        type: u2
      - id: urgent_pointer
        type: u2
      - id: body
        size-eos: true
    После компиляции командой
    Code:
    ksc -t perl tcp_segment.ksy
    получаем TcpSegment.pm. Чтобы распарсить дамп пакета, импортируем в скрипте модуль, создаём объект и извлекаем всю интересующую информацию:

    parse_tcp_segment.pl

    Code:
    use strict;
    use warnings;
    use TcpSegment;
    
    my $kaitai_tcp = TcpSegment->from_file("segment.dmp");
    print 
        "src_port = ", $kaitai_tcp->src_port(),
        ", dst_port = ", $kaitai_tcp->dst_port(),
        ", body = '", unpack('H*', $kaitai_tcp->body()), "'\n";
    Вывод:
    Code:
    src_port = 43690, dst_port = 48059, body = 'ae85fa908ec1246f'
    Если нужный вам язык не поддерживается, то можно самостоятельно написать рантайм и сообщить об этом на гитхабе - автор работает очень быстро.

    Ссылки:
    http://kaitai.io/
    https://github.com/kaitai-io
    Last edited by s.zelenyuk; 19-11-2016 at 19:13.

  2. 3 пользователя(ей) сказали cпасибо:
    Darwin (20-11-2016) Shizoid (20-11-2016) gavz (22-11-2016)
+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:22
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org