
O Rattle é uma estrutura de análise estática binária EVM projetada para trabalhar em contratos inteligentes implantados. O Rattle pega strings de byte EVM, usa uma análise sensível ao fluxo para recuperar o gráfico de fluxo de controle original, eleva o gráfico de fluxo de controle em um formulário de registro SSA/infinito e otimiza o SSA-removendo DUPs, swaps, pushs e pop. A conversão de uma máquina de pilha para o formulário SSA remove 60%+ de todas as instruções do EVM e apresenta uma interface muito mais amigável para aqueles que desejam ler os contratos inteligentes com os quais interagem.
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -OProduziria uma saída de uma máquina de registro como esta:

As funções são recuperadas e divididas. Além disso, os argumentos da função, os locais de memória e os locais de armazenamento são recuperados.
O Rattle funciona na sequência hexadecimal do contrato de tempo de execução.
Se você estiver executando chocalhos em um contrato, poderá compilar com a Solidity, use a opção --bin-runtime e retire o cabeçalho:
$ solc --bin-runtime KingOfTheEtherThrone.sol 2> /dev/null | tail -n1 > contract.bin Para instalar as dependências do Python, execute estes comandos:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtPara instalar o GraphViz, execute o seguinte comando:
Linux:
sudo apt-get graphvismacos:
brew install graphvizSe você receber um erro de sintaxe como este:
File "rattle-cli.py" , line 16
def main () -> None :
^
SyntaxError : invalid syntaxVocê provavelmente correu Rattle com Python2 em vez de Python3.
Para obter mais detalhes sobre o design e os recursos do chocalho, consulte minha apresentação do Recon Montreal, que é anotada aqui.
O Rattle é licenciado e distribuído pela licença AGPLV3. Entre em contato conosco se você estiver procurando uma exceção aos termos.