SekaiCTF 2024 writeup: Blockchain/ZOO
O desafio
- Autor: snwo
- Descrição: Welcome to assembly zoo
Análise inicial
Dando uma olhada no contrato de setup,
vemos que o objetivo final é
setar a variável isSolved
no contrato ZOO
para 1
.
contract Setup {
ZOO public immutable zoo;
constructor() payable {
zoo = new ZOO();
}
function isSolved() public view returns (bool) {
return zoo.isSolved() == 1;
}
}
Logo de cara,
ZOO
tem alguns pontos interessantes.
Esse contrato implementa Pausable
e chama a função _pause
no final do construtor.
Usando a documentação,
vemos que isso é um mecanismos pra habilitar/desabilitar funções do contrato.
Quando pausado,
funções marcadas com o modificador whenNotPaused
chamam revert
ao serem chamadas.