
Rattle est un cadre d'analyse statique binaire EVM conçu pour fonctionner sur les contrats intelligents déployés. Rattle prend des chaînes d'octets EVM, utilise une analyse sensible à l'écoulement pour récupérer le graphique de flux de contrôle d'origine, soulève le graphique de flux de commande dans une forme de registre SSA / infinie et optimise le SSA - en supprimant les DUP, échangez, poussages et pops. La conversion d'une machine de pile en formulaire SSA supprime 60% + de toutes les instructions EVM et présente une interface beaucoup plus conviviale à ceux qui souhaitent lire les contrats intelligents avec lesquels ils interagissent.
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -OProduirait une sortie de machine à registre comme ceci:

Les fonctions sont récupérées et divisées. De plus, les arguments de fonction, les emplacements de mémoire et les emplacements de stockage sont récupérés.
Rattle fonctionne sur la chaîne hexagonale du contrat d'exécution.
Si vous exécutez un hochet sur un contrat, vous pouvez compiler avec Solidity, utilisez l'option --bin-runtime et retirez l'en-tête:
$ solc --bin-runtime KingOfTheEtherThrone.sol 2> /dev/null | tail -n1 > contract.bin Pour installer les dépendances Python, exécutez ces commandes:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtPour installer Graphviz, exécutez la commande suivante:
Linux:
sudo apt-get graphvismacOS:
brew install graphvizSi vous obtenez une erreur de syntaxe comme ceci:
File "rattle-cli.py" , line 16
def main () -> None :
^
SyntaxError : invalid syntaxVous avez probablement exécuté un hochet avec Python2 au lieu de Python3.
Pour plus de détails sur la conception et les fonctionnalités de Ronti, voir ma présentation Recon Montréal, qui est annotée ici.
Rattle est autorisé et distribué dans le cadre de la licence AGPLV3. Contactez-nous si vous recherchez une exception aux conditions.