
Visualiza sequências de bytes repetidas em arquivos binários para revelar estrutura oculta, apoiando engenharia reversa e descoberta de padrões sem assinaturas predefinidas.

hexcymatix é um projeto de pesquisa exploratória, concebido de forma ampla como uma ferramenta de engenharia reversa de binários para extrair informações estruturais a partir de padrões repetidos de bytes em arquivos binários.
A ideia nunca se materializou em uma ferramenta utilizável, mas ainda assim produz algumas representações fascinantes da impressionante autossimetria presente nos dados do dia a dia.
Às vezes, em engenharia reversa, você tem um exemplo de alguns dados — uma tabela, um blob compactado, um payload de protocolo — e quer encontrar dados semelhantes em outro lugar do arquivo, sem ainda ser capaz de escrever uma regra ou parser que os descreva. Você quer similaridade sem especificação.
hexcymatix postula que sequências repetidas de bytes implicam estrutura ou relação, mesmo que não saibamos qual é essa estrutura. Ao visualizar as repetições, podemos trazer à tona dados relacionados sem saber exatamente o que estamos procurando.
Por exemplo, a passagem das Pensées abaixo tem várias sequências autorrepetidas (' incapable of ', ' which he ', 'ing either ') — o hexcymatix dispõe o arquivo em duas linhas e conecta quaisquer sequências repetidas de bytes com pelo menos 8 bytes:

As conexões que surgem então indicam estruturas e relações subjacentes nos dados.
Repetir esse processo em um arquivo binário comum começa a extrair automaticamente autossimilaridades, conexões e estruturas inesperadas. Como exemplo, aqui está o executável de consulta de erros em uma instalação padrão do Windows:

A parte mais importante do processo é adicionar arcos entre as conexões dos fragmentos para deixar a saída com um visual interessante:

Tendo perdido completamente o fio da meada, podemos experimentar diversas representações dos dados. Por exemplo, o mesmo arquivo e as mesmas conexões renderizados ao redor do perímetro de um círculo aparecem da seguinte forma:

python hexcymatix.py [options] file [file ...]
# Circular visualization of an executable
python hexcymatix.py --circular guidgen.exe
# Linear visualization, top 500 fragments only
python hexcymatix.py --linear --top 500 guidgen.exe
# Batch, 4K output
python hexcymatix.py --circular --resolution 4k *.exe






























pip install pycairo numpy pillow
O pycairo é compilado contra a biblioteca nativa cairo, que precisa estar presente primeiro — brew install cairo pkg-config no macOS, ou apt install libcairo2-dev pkg-config no Debian/Ubuntu.
A ferramenta foi desenvolvida como um auxílio à engenharia reversa: dado um único exemplo conhecido de alguns dados — uma struct, um blob compactado, um payload de protocolo — encontrar outras ocorrências dele no arquivo sem precisar de RE adicional. A esperança era que regiões compartilhando muitas subsequências repetidas com o exemplo conhecido se agrupassem em candidatos que valessem a pena investigar mais a fundo.
Em última análise, a ideia parecia frágil e o caso de uso limitado, então a técnica nunca foi desenvolvida no tipo de plugin integrado que seria necessário para uma pesquisa útil. O trabalho está sendo compartilhado aqui para que não se perca no éter, na esperança de que talvez outra pessoa possa dar continuidade.
Este projeto foi escrito originalmente à mão em C#. Foi portado para Python usando LLMs, com pouca supervisão ou revisão.
hexcymatix é um esforço de pesquisa de Christopher Domas (@xoreaxeaxeax).

| Flag | Descrição |
|---|
--circular | Layout circular: deslocamentos de bytes mapeiam para ângulos em um anel (padrão) |
--linear | Layout de barras paralelas: duas barras horizontais conectadas por quads que se cruzam |
--top N [N ...] | Mantém apenas os N fragmentos mais longos antes da renderização; passe vários valores para renderizar uma imagem por corte |
--no-arcs | Desenha apenas as cordas, omitindo os arcos (substancialmente mais rápido, menos ruído visual) |
--resolution RES | Resolução de saída como WxH ou um preset: 480p, 720p, 1080p, 1440p, 4k, uwfhd (2560x1080), suwfhd (3840x1080) (padrão: 1080p) |
--ultra | Atalho para --resolution 4000x4000 |
--circle-fill F | Fração do diâmetro da tela usada pelo círculo (padrão: 0.25, ou 0.50 para os presets ultra-wide) |
--jpg | Também grava um JPEG com qualidade de 80% junto a cada PNG |
--output-dir DIR | Diretório para os arquivos de saída (padrão: output) |