Jump to content
  • eXaminando dados

       (0 reviews)

    Fernando Mercês

    No dia-a-dia da programação, análise de binários e outras áreas relacionadas à segurança da informação é comum profissionais precisarem de conversões rápidas de dados, normalmente números e strings. Muitas vezes recorremos a sites, scripts, programas gráficos, calculadores e outros, mas como nos sentimos mais confortáveis na linha de comando, foi lá que decidi fazer algo.

    Há alguns anos iniciei um projeto que chamei de bashacks, que é um conjunto de funções em bash para as mais variadas tarefas, mas percebi que muitas vezes não sei que tipo de informação estou tratando e gostaria de ver rapidamente diversas conversões para um certo tipo de dado (um número por exemplo), para ver qual deles faz mais sentido. Foi aí que pensei em criar o eXamine, cujo nome veio do comando homônimo do gdb (GNU Debugger). Trata-se de um software de linha de comando para o que chamo de conversão indiscriminada e irresponsável de dados.:)

    Para ficar ainda mais enxuto, e também roubando a ideia do gdb, eu o chamo de x. Então supondo que você na sua análise você tenha encontrado um número hexadecimal, por exemplo, 0x585ca92c e deseja ver as conversões possíveis para ele. É só mandar pro x:

    $ echo 0x585ca92c | x
    Hex string: 30783538356361393263
    Byte array: \x30\x78\x35\x38\x35\x63\x61\x39\x32\x63
    URL encoding: %30%78%35%38%35%63%61%39%32%63
    ROT13: 0k585pn92p
    Signed int: 1482467628
    Unsigned int: 1482467628
    Float: 9.70477e+14
    Hexadecimal: 0x585ca92c
    Octal: 013027124454
    Binary: 0b1011000010111001010100100101100
    IPv4: 88.92.169.44
    Timestamp: Fri, 23 Dec 2016 04:33:48 UTC/GMT-0

    O jeito correto de interpretar a saída do eXamine é: se a entrada for tratada como x, então é y, ou seja, no exemplo, se o número for tratado como string (texto), então os bytes em hexadecimal equivalente são 30 78 35 38 35 63 61 39 32 e 63. Já se for tratado como número, então a conversão para inteiro fica 1482467628. Ainda tratando como número, pode ser o endereço IPv4 88.92.169.44 ou a data/hora de hoje. Qual é o certo? A resposta é: depende de como você quer tratar. Vê o que faz mais sentido pra sua análise e vai na fé.

    Sabemos que bytes são bytes e como serão usados depende da interpretação dada. 0x41 pode ser utilizado num programa como um inteiro de 8 bits, ou como parte de um inteiro de 16, 32 ou 64-bits, ou mesmo como o caractere ‘A’ (depende de como o programa usa essa informação). O eXamine não te ajuda nisso, mas imprime como saída algumas conversões possíveis e deixa você decidir.

    Por exemplo, você pode passar uma string para ele:

    $ echo 'feliz natal' | x
    Hex string: 66656c697a206e6174616c
    Byte array: \x66\x65\x6c\x69\x7a\x20\x6e\x61\x74\x61\x6c
    URL encoding: %66%65%6C%69%7A%20%6E%61%74%61%6C
    ROT13: sryvm angny
    Signed int: 0
    Unsigned int: 0
    Float: 0
    Hexadecimal: 00
    Octal: 0
    Binary: 0b
    ASCII char: NUL
    RGB: (0, 0, 0)
    IPv4: 0.0.0.0
    Timestamp: Thu, 01 Jan 1970 00:00:00 UTC/GMT-0

    As saídas numéricas neste caso ficam zeradas e cabe a você saber que isso faz sentido, afinal, não passei um número como entrada.

    É possível também utilizá-lo no modo interativo. Neste caso, primeiro comandei x, depois digitei o número 65:

    $ x
    65
    Hex string: 3635
    Byte array: \x36\x35
    URL encoding: %36%35
    ROT13: 65
    Signed int: 65
    Unsigned int: 65
    Float: 0
    Hexadecimal: 0x41
    Octal: 0101
    Binary: 0b1000001
    ASCII char: A
    RGB: (0, 0, 65)
    IPv4: 0.0.0.65
    Timestamp: Thu, 01 Jan 1970 00:01:05 UTC/GMT-0

    Ainda há muito o que fazer no eXamine. Há várias conversões possíveis com strings, inteiros de outros tamanhos, hashes, etc. Se você tiver alguma sugestão de conversão, basta abrir uma issue na página do projeto no Github e a discutimos lá. Se souber programar em C, ficarei feliz em receber seu pull request após a discussão.


    Revisão: Leandro Fróes

    User Feedback

    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Guest

    • This will not be shown to other users.
    • Add a review...

      ×   Pasted as rich text.   Paste as plain text instead

        Only 75 emoji are allowed.

      ×   Your link has been automatically embedded.   Display as a link instead

      ×   Your previous content has been restored.   Clear editor

      ×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

×
×
  • Create New...