07.puzzles_7
2023-07-27 13:41:36 # 15.EVM Puzzles

puzzles_7

几个考点

  • RETURN:执行从内存中选取的代码作为initcode,然后执行完成之后,把代码部署到address中
  • 本题需要我们创建的合约的代码长度为1,也就是说runtimecode长度为1

那么我们写一个initcode来返回长度为1的runtimecode,思路如下:

1
2
3
4
5
6
7
8
9
## 把ff放进栈,任意内容都可以,只要是一个字节即可
PUSH1 ff
PUSH1 00
## 把ff放进memory
MSTORE
## 将ff从内存返回作为runtimecode
PUSH1 31
PUSH1 1
RETURN

写成的initcode为:

1
2
3
4
5
6
7
8
60 ff
60 00
52
60 01
60 1f
f3

60ff6000526001601ff3

完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
############
# Puzzle 7 #
############

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 3B EXTCODESIZE
0C 6001 PUSH1 01
0E 14 EQ
0F 6013 PUSH1 13
11 57 JUMPI
12 FD REVERT
13 5B JUMPDEST
14 00 STOP

? Enter the calldata: 0x60ff6000526001601ff3

Puzzle solved!