Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
silica — Validation différentielle exhaustive de tous les 4,3 milliards d'encodages d'instructions AArch64. | Kitploit
Outils/GitHubGitHub/nathan-luevano/silica
Analyse StatiqueAnalyse Dynamique (Sandboxing)Analyse des VulnérabilitésRétro-ingénierieFuzzingUtilitaires et FrameworksAnalyse de BinairesArticles et Recherche
GitHubnathan-luevano/silica

silica

Validation différentielle exhaustive de tous les 4,3 milliards d'encodages d'instructions AArch64.

Voir le dépôt
431il y a 1 moisPas encore vérifié
Site web

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 →
Partager

SILICA

Une comparaison exhaustive des décisions d'allocation d'instructions A64.

Silica vérifie chacun des 4 294 967 296 mots d'instruction A64 possibles. Il compare si Capstone, LLVM, Unicorn et une table compilée à partir des diagrammes d'encodage XML d'Arm acceptent chaque mot.

Rust Python PyPI License: Apache 2.0 Encodings swept


Un décodeur et un diagramme d'encodage ne répondent pas exactement à la même question. Capstone et LLVM décodent des instructions, Unicorn tente une exécution, et la table dérivée du XML de Silica correspond aux bits fixes des diagrammes d'encodage d'Arm. Les comparer est utile, mais une divergence n'est pas automatiquement un bug de décodeur.

Les instructions A64 font 32 bits de large, de sorte que la comparaison d'allocation peut couvrir l'intégralité de l'espace d'entrée. Les décomptes de validité ci-dessous sont exhaustifs pour les versions et la configuration épinglées. L'analyse du texte des instructions est échantillonnée.

Résultats en un coup d'œil

Ces artefacts utilisent ISA_A64_xml_A_profile-2026-06_mc et 256 fragments couvrant l'ensemble des 2³² mots.

Résultat d'allocation dérivé du XMLDécomptePart
Correspond à un motif d'encodage dans le périmètre1 799 435 77641,9 %
Ne correspond à aucun motif d'encodage dans le périmètre2 495 531 52058,1 %

Sur les quatre bitmaps de validité, 723 801 678 mots ont au moins une classification divergente. Cela représente 16,9 % de l'espace total des mots. Il s'agit d'un décompte de désaccords, et non d'un décompte de bugs confirmés.

Concordance par paire avec le bitmap d'allocation dérivé du XML :

OutilConcordance
Capstone84,8 %
LLVM87,6 %
Unicorn88,3 %

Ces pourcentages ne classent pas la justesse des décodeurs. En particulier, la table XML compilée n'évalue pas le pseudocode des instructions, la disponibilité des fonctionnalités, ni toutes les contraintes au moment du décodage. Unicorn répond également par l'exécution et les pièges plutôt que par le désassemblage. Chaque différence nécessite une analyse de la famille d'instructions et de la configuration avant de pouvoir étayer un rapport de bug en amont.

Le texte des instructions est uniquement diagnostique

Silica a enregistré un échantillon déterministe de 1 000 000 de mots parmi les 1 266 064 016 mots acceptés par les quatre vérifications de validité. Les sorties ne sont pas symétriques : Capstone et LLVM renvoient un texte de désassemblage complet, la table XML ne renvoie qu'un mnémonique, et Unicorn renvoie l'espace réservé <valid>.

Le classificateur actuel rapporte :

ClassificationEnregistrementsPart
Même mnémonique normalisé, texte complet différent862 64886,3 %
Mnémonique normalisé différent137 35213,7 %

La valeur de 86,3 % n'est pas un taux d'erreur d'opérande. Dans la plupart des enregistrements, une instruction complète est comparée à une référence composée uniquement d'un mnémonique. La gestion des alias reste également prudente lorsqu'une condition d'alias XML ne peut être prouvée à partir du texte rendu. Ces enregistrements sont des pistes d'analyse, et non des constats sur la justesse des décodeurs.

Ce que signifient les dix exemples

Les fichiers dans artifacts/reproducers sont dix enregistrements distincts sélectionnés parmi les cinq premiers fragments de désaccord éligibles. La sélection privilégie les catégories de texte et plafonne les paires (category, spec mnemonic) répétées. Les dix fichiers actuels comparent tous Capstone avec le mnémonique dérivé du XML.

Ils prouvent que les enregistrements existent dans le corpus généré et peuvent être reproduits à partir d'un seul mot d'instruction. Ils n'ont pas été arbitrés de manière indépendante comme dix bugs Capstone, et ils ne constituent pas une preuve que LLVM et Unicorn s'accordent sur l'instruction rendue. Trois sont explicitement marqués NORMALIZATION_UNCERTAIN. Le générateur et le vérificateur sont g6_reproducers.py et verify/g6_reproducers.py.

Explorer les résultats

Le balayage produit un jeu de données volumineux. silica-scope en est le lecteur en terminal. Il ouvre un répertoire d'artefacts Silica, affiche les métriques et la carte des 256 shards, filtre les enregistrements de désaccord et recherche des mots individuels. Il peut également ouvrir les dix enregistrements d'exemple avec leurs limitations indiquées.

Installez-le depuis PyPI avec Python 3.11 ou une version plus récente :

pipx install silica-scope

Puis exécutez-le depuis un checkout Silica ou pointez-le vers un répertoire d'artefacts :

silica-scope
silica-scope /path/to/silica/artifacts
silica-scope --report

silica-scope est un lecteur en Python pur. Il n'exécute pas le balayage et ne nécessite pas les bibliothèques de décodage natives. Consultez le guide du lecteur terminal pour les commandes clavier et la découverte des artefacts.

Fonctionnement

flowchart LR
    XML["Arm XML encoding diagrams"] --> SPEC["compiled allocation matcher"]
    SPEC --> SWEEP["parallel 32-bit sweep"]
    CAP["Capstone"] --> SWEEP
    LLVM["LLVM"] --> SWEEP
    UNI["Unicorn"] --> SWEEP
    SWEEP --> MAP["validity bitmaps"]
    MAP --> DIFF["exhaustive XOR comparison"]
    DIFF --> CORPUS["classified disagreement corpus"]
    CORPUS --> OUT["metrics · examples · result hash"]

Le chemin à haut volume est écrit en Rust et appelle chaque décodeur en cours de processus. Il stocke un bit par encodage par oracle, ce qui maintient la comparaison exhaustive compacte et fait de la divergence une opération directe sur bitmap. Les plantages sont bisectés jusqu'au mot d'instruction exact.

Python gère la compilation XML, la normalisation, la génération de rapports et la vérification. Les schémas d'artefacts et les règles d'échantillonnage sont documentés dans docs/formats.md. La source de chaque valeur phare est :

AffirmationArtefactRecalculé par
Nombre d'allocations XMLartifacts/g1_metrics.jsonG1
Différences de validité exhaustivesquatre bitmaps de validitéG2 et G5
Décomptes de catégories d'échantillonsartifacts/g4_metrics.jsonG4
Pourcentages d'accord par pairesartifacts/report/metrics.jsonG5
Dix enregistrements d'exemple sélectionnésartifacts/reproducers/*.mdG6
Empreinte de l'artefact publiéartifacts/result_hash.txtG7

Reproduire le travail

Créez l'environnement épinglé et vérifiez que les entrées locales requises sont disponibles :

micromamba create -y -p ./.venv -f environment.yml
micromamba run -p ./.venv silica doctor

La spécification XML d'Arm n'est pas intégrée en raison de sa licence. silica doctor indique où Silica s'attend à la trouver ainsi que tout autre prérequis manquant.

Télécharger l’outil