
Rattle es un marco de análisis estático binario EVM diseñado para funcionar en contratos inteligentes implementados. Las cadenas de bytes de Rattle toman EVM, utiliza un análisis sensible al flujo para recuperar el gráfico de flujo de control original, eleva el gráfico de flujo de control en un formulario de registro SSA/Infinito y optimiza el SSA, eliminando DUP, Swaps, Pushs y Pops. La conversión de una máquina de pila a formulario SSA elimina el 60%+ de todas las instrucciones EVM y presenta una interfaz mucho más amigable para aquellos que desean leer los contratos inteligentes con los que están interactuando.
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -OProduciría una salida de máquina de registro como esta:

Las funciones se recuperan y se dividen. Además, se recuperan argumentos de función, ubicaciones de memoria y ubicaciones de almacenamiento.
Ratch se ejecuta en la cadena hexadecimal del contrato de ejecución.
Si está ejecutando ráfaga en un contrato, puede compilar con solidez, use la opción --bin-runtime y quite el encabezado:
$ solc --bin-runtime KingOfTheEtherThrone.sol 2> /dev/null | tail -n1 > contract.bin Para instalar las dependencias de Python, ejecute estos comandos:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtPara instalar GraphViz, ejecute el siguiente comando:
Linux:
sudo apt-get graphvismacOS:
brew install graphvizSi recibe un error de sintaxis como este:
File "rattle-cli.py" , line 16
def main () -> None :
^
SyntaxError : invalid syntaxProbablemente corriste el sonajero con Python2 en lugar de Python3.
Para obtener más detalles sobre el diseño y las características del sonajero, consulte mi presentación de Recon Montreal, que se anota aquí.
Rattle tiene licencia y se distribuye bajo la licencia AGPLV3. Contáctenos si está buscando una excepción a los términos.