08.puzzles_8
2023-07-27 14:31:40 # 15.EVM Puzzles

puzzles_8

分为三部分

  • 将calldata放到memory
  • 从memory选取内容创建合约
  • 调用合约的内容需要返回0,也就是执行失败报错

其实就是要求我们输入一个initcode,然后该runtimecode会部署到合约地址上面,call调用它的时候需要失败报错。上一题puzzles_7我们写了一个initcode,它部署的runtimecode是ff,也就是sefldestruct,因为只有一个ff而没有提供地址,因此会执行失败报错,所以这个initcode也符合本题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
############
# Puzzle 8 #
############

00 36 CALLDATASIZE
01 6000 PUSH1 00
03 80 DUP1
04 37 CALLDATACOPY
05 36 CALLDATASIZE
06 6000 PUSH1 00
08 6000 PUSH1 00
0A F0 CREATE
0B 6000 PUSH1 00
0D 80 DUP1
0E 80 DUP1
0F 80 DUP1
10 80 DUP1
11 94 SWAP5
12 5A GAS
13 F1 CALL
14 6000 PUSH1 00
16 14 EQ
17 601B PUSH1 1B
19 57 JUMPI
1A FD REVERT
1B 5B JUMPDEST
1C 00 STOP

? Enter the calldata: 0x60ff6000526001601ff3

Puzzle solved!