Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
binviz — Analyseur et outil de triage binaire — entropie, classes d'octets et surfaces de Hilbert, diagrammes en points et graphes de flux de contrôle sur un modèle d'espace d'adressage partagé. | Kitploit
Outils/GitHubGitHub/karankantaria/binviz
Analyse StatiqueRétro-ingénierieAnalyse ForensiqueFuzzingAnalyse de MalwareAnalyse de BinairesApprentissage et Éducation
GitHubkarankantaria/binviz

binviz

Analyseur et outil de triage binaire — entropie, classes d'octets et surfaces de Hilbert, diagrammes en points et graphes de flux de contrôle sur un modèle d'espace d'adressage partagé.

Voir le dépôt
3il y a 1 jourPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Site web
Partager

binviz

Outil de visualisation et de triage binaire : vues interactives liées (entropie, histogrammes, surfaces image/dot-plot, graphes de flux de contrôle) sur un modèle d'espace d'adressage partagé unique.

root@kitploit:~
pipx install binviz && binviz serve

Ce qu'il fait

Ouvrez un fichier et chaque vue observe le même espace d'adressage. Sélectionnez une plage dans l'une et les autres suivent — l'objectif est de répondre à la question « qu'est-ce que cette région » en l'examinant de plusieurs manières à la fois.

  • Cartographiez-le. binviz model analyse ELF/PE/Mach-O via LIEF en régions, symboles et un mappage offset↔adresse virtuelle, en matérialisant les lacunes et les superpositions. Une entrée malformée retombe sur un modèle brut plutôt que d'échouer.
  • Trouvez les parties qui valent la peine d'être examinées. Entropie fenêtrée et autres signaux nommés, surfaces de classes d'octets et de Hilbert, et classification fenêtrée par rapport à des seuils mesurés à partir d'un corpus de vérité terrain plutôt que choisis (ARCHITECTURE.md §2.1). Les données compressées, chiffrées, le code et le bourrage ne se ressemblent pas.
  • Identifiez un encodage. Histogrammes de bigrammes et de trigrammes épars, dot plot pour les répétitions et l'auto-similarité, et une vue image sur 15 formats de pixels compressés et 24 modes Bayer — avec un suggérateur de pas, car un mauvais pas de ligne transforme une photographie en bruit diagonal et vous concluez qu'il n'y a pas de photographie.
  • Lisez le code. Décodage Capstone par balayage linéaire et descente récursive (testé différentiellement contre objdump), une cascade de découverte de fonctions en cinq niveaux incluant les tables de saut, et des graphes de flux de contrôle disposés dans un worker — avec l'incertitude d'une limite récupérée dessinée plutôt que cachée.
  • Obtenez un verdict. binviz triage indique à quoi ressemble le fichier et pourquoi ; dans l'interface, chaque constatation renvoie aux octets dont elle est dérivée.
  • L'interface comprend cinq espaces de travail — Vue d'ensemble, Octets, Motifs, Code et Tout — sur la même sélection. Analyse statique uniquement : les échantillons sont analysés, jamais exécutés.

    Captures d'écran

    Espace de travail Vue d'ensemble

    Espace de travail Octets

    Espace de travail Motifs

    Espace de travail Code

    Planches

    Rendu par le même code que celui utilisé par l'interface, directement depuis la CLI — régénérez avec python docs/make_plates.py.

    Un binaire statiqueLe même programme, compressé avec UPX
    Classe d'octets Hilbert, statiqueClasse d'octets Hilbert, compressé
    Le code, les chaînes et le bourrage se séparent en territoires visibles.La structure s'effondre en bruit uniforme — la signature de la compression.
    Entropie, statiqueEntropie, compressé
    L'entropie fenêtrée reste en bandes et faible.Plate et élevée, jusqu'au stub de décompression.
    Bon pas de ligneMauvais pas de ligne
    Barres RVB, pas correctBarres RVB, mauvais pas

    Mêmes octets, un seul nombre différent. C'est pourquoi le suggérateur de pas existe : un mauvais pas de ligne transforme une photographie en bruit diagonal, et vous concluez qu'il n'y a pas de photographie.

    ARCHITECTURE.md explique comment c'est assemblé : ce qui est livré, la marque que chaque surface hérite, les conventions qu'un nouvel écran doit suivre, et les limitations qui sont délibérées. SECURITY.md est la posture de sécurité.

    Démarrage rapide

    root@kitploit:~
    python -m venv .venv
    # -c épingle aux versions exactes contre lesquelles la suite est verte ; pyproject.toml
    # publie des plages, donc sans cela vous obtenez ce qui se résout aujourd'hui
    .venv/Scripts/pip install -e ".[dev]" -c constraints-dev.txt   # POSIX : .venv/bin/pip
    
    # construire le corpus de vérité terrain (utilise zig cc du paquet pip ziglang ;
    # nécessite UPX dans PATH, dans $UPX, ou décompressé dans corpus/tools/upx-*/)
    make -C corpus                            # ou : python corpus/build.py
    
    # les seuils sont mesurés, jamais codés en dur (voir ARCHITECTURE.md §2.1)
    python corpus/calibrate.py                # écrit corpus/calibration.json
    
    pytest                                    # suite fonctionnelle
    pytest -m perf -s                         # cibles de performance 100 Mo
    
    binviz probe  corpus/out/hello_O2
    binviz model  corpus/out/hello_upx
    binviz signal corpus/out/hello_upx --name entropy_4096 --png out.png
    binviz hist   corpus/out/ramp16.bin --n 2 --dtype u16le --png bigram.png
    
    # surfaces : -p passe les paramètres de surface
    binviz surface corpus/out/hello_static --name hilbert -p mode=byteclass --png h.png
    binviz surface corpus/out/rgb_raw.bin  --name image -p mode=rgb8 -p width=320 --png i.png
    binviz surface corpus/out/repeats.bin  --name dotplot -p mode=exact --png d.png
    binviz stride  corpus/out/bayer_raw.bin --mode bayer_RGGB_RGB_12
    
    # code
    binviz disasm    corpus/out/hello_O2 --limit 20
    binviz functions corpus/out/hello_static --sort size
    binviz cfg       corpus/out/hello_O2 --func main --dot main.dot
    
    # le verdict, et pourquoi
    binviz triage corpus/out/hello_upx
    

    Exécution du serveur

    root@kitploit:~
    binviz serve                              # 127.0.0.1:8000
    

    Il affiche une URL contenant un jeton de session — ouvrez-la. Chaque route /api exige le jeton, car « il n'écoute que sur localhost » n'est pas une défense contre une page web dans un autre onglet, qui atteint 127.0.0.1 comme n'importe quelle autre origine. SECURITY.md contient le raisonnement.

    L'accès aux fichiers est confiné à --root (par défaut : le répertoire de travail), donc les chemins en dehors sont refusés.

    Limites

    Les quatre ont un drapeau et une variable d'environnement, et les quatre existent pour empêcher un appelant local de consommer plus que prévu. Les valeurs par défaut sont choisies pour un ordinateur portable ; augmentez-les si votre machine est plus puissante.

    DrapeauEnvDéfautCe qu'il borne
    --max-cache BYTESBINVIZ_MAX_CACHE5 GioTaille totale des analyses en cache. Au-delà, les entrées les moins récemment utilisées sont évincées — jamais celle en cours d'analyse ou de visualisation.
    --max-upload BYTESBINVIZ_MAX_UPLOAD8 GioPlus grand téléversement accepté.
    --max-analyses N—4Analyses simultanées ; au-delà, /api/open renvoie 503.
    --root DIR—cwdRépertoire à partir duquel le serveur peut lire les fichiers.

    Les analyses sont mises en cache sous ~/.cache/binviz (ou $BINVIZ_CACHE), indexées par hash de contenu, donc rouvrir un binaire est instantané. Augmentez --max-cache si vous préférez en conserver davantage ; le cache peut être supprimé manuellement à tout moment — le pire des cas est que la prochaine ouverture réanalyse.

    Autres drapeaux : --token pour épingler un jeton entre les redémarrages (utile avec le proxy de développement Vite, qui lit BINVIZ_TOKEN), --port, --cache et --no-auth pour la CI. --no-auth affiche une bannière indiquant ce qu'il a désactivé ; ne l'utilisez pas sur une machine partagée.

    Fenêtre de bureau

    root@kitploit:~
    pip install "binviz[app]"
    binviz app                    # fenêtre native ; --browser pour votre navigateur
    

    Même serveur, même jeton, même confinement --root que binviz serve — la seule différence est ce qui l'affiche. Sans pywebview installé, binviz app ouvre votre navigateur à la place.

    Il affiche l'URL sur laquelle il sert, délibérément : envelopper l'interface dans une fenêtre ne supprime pas l'écouteur réseau, cela rend seulement plus facile d'oublier qu'il y en a un. L'écouteur est authentifié dans les deux cas, et il n'y a pas de --no-auth sur binviz app.

    La fenêtre expose exactement une fonction à la page — un sélecteur de fichiers natif — et rien d'autre. Voir src/binviz/app.py pour savoir pourquoi cette liste est aussi courte.

    Construction d'une application autonome

    Les versions livrent une wheel et rien d'autre. Un exécutable Python figé non signé qui regroupe capstone et lief et existe pour disséquer des binaires compressés est exactement le profil sur lequel SmartScreen et les heuristiques antivirus font de faux positifs — donc au lieu d'en livrer un, le dépôt contient ce dont vous avez besoin pour le construire vous-même, ce qui contourne entièrement la signature de code.

    root@kitploit:~
    pip install pyinstaller                # 6.x
    python tools/build_ui.py               # construit web/ et le met en scène dans le paquet
    pyinstaller packaging/binviz.spec      # -> dist/binviz/
    

    Attendez-vous à environ 100 Mo, dominés par numpy et lief. C'est un bundle onedir, pas un fichier unique auto-extractible : lancez dist/binviz/binviz.exe (ou double-cliquez dessus) pour la fenêtre de bureau, ou donnez-lui n'importe quelle sous-commande — dist/binviz/binviz.exe triage sample.exe — car la construction figée est toute la CLI, pas seulement la fenêtre.

    L'étape de mise en scène n'est pas facultative. web/dist vit en dehors du paquet Python, donc l'ignorer produit une application dont la fenêtre s'ouvre sur un JSON 404 ; le spec refuse de construire plutôt que de laisser cela se produire silencieusement.

    Sur macOS, la même commande produit également dist/Striate.app, marqué à partir de packaging/icons/icon.icns. Aucun des deux n'a été exécuté sur un Mac — voir ARCHITECTURE.md §5.

    --root reste par défaut le répertoire de travail, donc un exécutable double-cliqué est confiné au dossier dans lequel il démarre — ce qui est généralement le dossier de l'application elle-même. Définissez le « Démarrer dans » du raccourci, ou lancez-le avec --root DIR.

    Un exécutable double-cliqué demande un identifiant. Sans arguments, la construction figée exécute binviz app --auth local, ce qui est la seule différence par rapport au défaut de la wheel qui n'a pas d'écran de connexion. Les deux répondent à des questions différentes : binviz app tapé dans un terminal est déjà un acte délibéré de la part de celui qui possède la session, tandis qu'un double-clic n'établit rien — c'est le seul chemin de lancement sans terminal, sans commande tapée et sans décision de confinement derrière lui. Demander l'identifiant est la façon dont la fenêtre dit à voix haute ce que le terminal aurait dit. Exécutez binviz passwd d'abord pour en définir un, ou passez --auth none explicitement pour l'ignorer ; tout ce que vous fournissez sur la ligne de commande l'emporte toujours.

    Connexion

    Par défaut, il n'y a pas d'écran de connexion et rien à copier : le serveur crée un jeton de session et l'injecte dans la page qu'il sert, donc ouvrir http://127.0.0.1:8000/ fonctionne simplement tandis que chaque appel API reste authentifié.

    Sur une machine partagée, activez l'écran de connexion :

    root@kitploit:~
    binviz passwd                 # invite ; digest scrypt, mode 0600
    binviz serve --auth local
    

    Si vous ignorez binviz passwd, la première connexion revendique l'installation — la bannière de démarrage vous en avertit, car celui qui atteint le port en premier devient le compte.

    Un exécutable figé double-cliqué active --auth local pour lui-même ; voir Construction d'une application autonome pour savoir pourquoi ce défaut diffère de celui de la wheel.

    L'écran de connexion n'est pas la frontière de sécurité ; la vérification du jeton sur chaque route /api l'est. Tout ce qui se trouve sur la machine peut ignorer le formulaire et appeler l'API directement, ce qui est exactement la raison pour laquelle le jeton existe. Voir SECURITY.md.

    Sécurité

    binviz ouvre des fichiers choisis par un attaquant — c'est le travail, pas un cas limite, et un outil de triage où l'analyse de logiciels malveillants compromet l'analyste est la pire défaillance possible. Les échantillons sont analysés, jamais exécutés. Ce qui est fait pour le reste :

    Contre un binaire hostile

    • L'analyse dégrade plutôt qu'échoue : un binaire que LIEF ne peut pas interpréter retombe sur un modèle brut, donc l'échantillon malformé que vous voulez le plus examiner reste inspectable.
    • Chaque mappage est borné à EOF, et ce qui a été rogné est signalé dans les avertissements du modèle plutôt que corrigé silencieusement.
    • Le désassemblage ne peut pas boucler indéfiniment — le balayage plafonne à 1 M d'instructions et porte un ensemble de visites, donc un saut vers soi-même se termine structurellement plutôt que par délai d'attente. La récupération des tables de saut plafonne à 256 entrées.
    • Les chemins de cache ne peuvent pas être traversés : l'id dans chaque route /api/{id}/… doit être exactement 64 caractères hexadécimaux avant d'être utilisé pour construire un chemin.
    • Les grands fichiers sont diffusés plutôt que mis en mémoire tampon, donc un fichier plus grand que la RAM est lent plutôt qu'un crash de mémoire insuffisante.

    Contre un navigateur hostile — la menace que « il n'écoute que sur localhost » ne traite pas, car une page dans un autre onglet atteint 127.0.0.1 comme n'importe quelle autre origine :

    • Chaque route /api exige un jeton. Il est créé au démarrage et injecté dans la page, donc rien n'est collé à la main et aucune route n'est laissée ouverte.
    • L'écran de connexion n'est pas la frontière de sécurité — la vérification du jeton l'est. Le formulaire peut être ignoré ; le jeton ne peut pas.
    • L'accès aux fichiers est confiné à --root, qui par défaut est le répertoire de travail. Les chemins en dehors sont refusés.
    • Liste blanche Host et CORS étroit, donc l'origine qui a besoin d'accès est la seule qui l'obtient.
    • Les métadonnées binaires ne peuvent pas devenir du script : les chaînes extraites d'un échantillon — noms de sections, symboles — passent par un seul échappeur, soutenu par une CSP.
    • Les requêtes sont bornées et validées — taille de téléversement, taille de cache, dimensions de raster et concurrence d'analyse ont tous des plafonds (voir Limites).

    La fenêtre de bureau ne supprime pas l'écouteur réseau, elle rend seulement plus facile d'oublier. Donc il n'y a pas de --no-auth sur binviz app, et le pont js_api expose exactement une méthode — pick_file(), qui ne prend aucun argument et renvoie un chemin à travers le même confinement --root. Un test échoue si une seconde méthode apparaît jamais.

    Les identifiants pour --auth local sont des digests scrypt écrits en mode 0600 ; binviz ne stocke aucun mot de passe en clair.

    SECURITY.md contient le modèle de menace, le raisonnement derrière chaque contrôle, ce qui n'est délibérément pas encore fait, et comment signaler une vulnérabilité en privé.

    Licence

    MIT — voir LICENSE.

    Le corpus compile en croisé des échantillons ELF avec zig cc, donc aucune chaîne d'outils Linux n'est nécessaire sur Windows/macOS — les échantillons sont analysés, jamais exécutés.

    Télécharger l’outil