前言
XCTF FINAL
二次出题,清晰记得19
年那次出题的痛,被各位师傅硬是玩成了AWD
模式,惨惨- 回想出题模式由最开始的共享地址 -> 采取随机数部署不同的地址 ->
geth + POA
禁用部分API
,让选手有更公平的做题体验,防止“抄作业”,也算比较圆满了 - 本次题目也比较水,借鉴
balsn-Election
的ABI Encoding
考点,随便写写
Source
1 | pragma solidity =0.6.12; |
Analyse
- 具体分析过程及原因就不写了,不太懂的小伙伴可以翻一番前面的博客,自行理解的过程会比简单看一篇
WP
帮助更大 ~~其实是我偷懒 :D~~ - 目标成功调用
game2
和game3
- 生成末尾为 01 的账户
- 使用 transfer 调用
setstage(1)
- 使用 transfer 调用
1 | to: 题目地址 |
- sethash(0x230fd66aacfe66f0e897312a7aefa3bcd51406d9831619983aca15c7f601ba77)
- 下述脚本可计算 [[“btc”, 100, “test1”], [“test2”, 200, “fly to moon”]] 的编码
1 | pragma solidity =0.6.12; |
- sethash(0x41c7ae758795765c6664a5d39bf63841c71ff191e9189522bad8ebff5d4eca98)
1 | keccak256(abi.encode(0x60)) |
- sethash(0xd971d7a75d56a87205c10f76d77a1984a94b99f0ba39ec86813b6d42a571a285)
1 | keccak256(abi.encode(0x240)) |
使用末尾为 01 的账户调用
giveMeMoney()
使用 transfer 调用 game2(from, 1, 0x60, 0x240, [[“btc”, 100, “test1”], [“test2”, 200, “fly to moon”]])
1 | to: 题目地址 |
- 生成末尾为 02 的账户
- 使用 transfer 调用
setstage(2)
- 使用 transfer 调用
1 | to: 题目地址 |
- 使用下述脚本,times = 0x9, 使 02 账户金额为 0x9
1 | contract son { |
- 使用 transfer 调用
game3(from, 5)
1 | to: 题目地址 |
- 使用 transfer 调用
setstage(2)
1 | to: 题目地址 |
- 调用
isSolved