
Rattle ist ein EVM -Binäranalyse -Framework für die Arbeit an bereitgestellten intelligenten Verträgen. Rattle nimmt EVM-Byte-Saiten ein, verwendet eine flussempfindliche Analyse, um das ursprüngliche Steuerungsflussgraphen wiederzugewinnen, hebt das Steuerflussdiagramm in ein SSA/Infinite-Registerformular und optimiert die SSA-Entfernen von DUPs, Swaps, Pushs und Pops. Die Konvertierung von einer Stack -Maschine in SSA -Form enthält 60%+ aller EVM -Anweisungen und bietet diejenigen, die die intelligenten Verträge lesen möchten, mit denen sie interagieren möchten.
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -OWürde eine solche Registermaschinenausgabe erzeugen:

Funktionen werden wiederhergestellt und abgespaltet. Zusätzlich werden Funktionsargumente, Speicherorte und Speicherorte wiederhergestellt.
Rattle läuft mit der Laufzeitvertrags -Sechserfolge.
Wenn Sie einen Vertrag mit Rasseln ausführen, können Sie die Option --bin-runtime verwenden und den Header ausziehen:
$ solc --bin-runtime KingOfTheEtherThrone.sol 2> /dev/null | tail -n1 > contract.bin Führen Sie die folgenden Befehle aus, um die Python -Abhängigkeiten zu installieren:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtFühren Sie den folgenden Befehl aus, um GraphViz zu installieren:
Linux:
sudo apt-get graphvismacos:
brew install graphvizWenn Sie einen solchen Syntaxfehler erhalten:
File "rattle-cli.py" , line 16
def main () -> None :
^
SyntaxError : invalid syntaxSie haben wahrscheinlich mit Python2 anstelle von Python3 rasseln.
Weitere Informationen zum Rasseldesign und zu den Funktionen finden Sie in meiner Recon Montreal -Präsentation, die hier kommentiert wird.
Rattle ist lizenziert und unter der AGPLV3 -Lizenz verteilt. Kontaktieren Sie uns, wenn Sie nach einer Ausnahme von den Bedingungen suchen.