blockchain入门
准备
工具
MetaMask(区块链钱包)
etherscan(区块链浏览器)
remix(智能合约IDE)
Online Solidity Decompiler(在线智能合约反编译器)
https://ethervm.io/decompile?address=0xabcd&network=ropsten
address:合约地址,network:网络
VANITY-ETH (可以枚举生成带有指定前缀或后缀的账户)
靶场
水龙头(获取 test ether)
- metamask faucet (MetaMask里点购买往下拉,不是很稳定)
- chainflag faucet(稳定,一天一个)
入门(Greeter)
接下来使用chainflag的签到题Greeter来作为入门
nc上去查看合约源码
1 | pragma solidity 0.8.7; |
思路
我们的目标是成功执行isSolved函数并返回true
我们需要expected和greeting相同,expected是已知的
所以,我们使用setGreeting函数来设置greeting与expected一致
操作
打开remix,新建一个sol文件,把源码写到sol文件里,可根据需要调整代码(保证不报错,包含后面要用到的函数或变量就行)
按ctrl+s编译,或者也可以在编译栏点击编译(还可以选择编译器版本)
在这题中,我们需要nc上去创建一个账户并转账使其满足题目条件(转0.001 test ether),记得保存地址和token,这个账户接下来会用于部署合约,而部署合约所花费的gas从我们刚刚的转账里扣,转账功能为在MetaMask里的发送
等待交易完成,如图中显示绿色表示完成,再nc上去用之前的token部署合约,得到一个合约地址和一个交易hash值
回到remix,选择最后一栏(DEPLOY & RUN),把ENVIRONMENT调成Inject Web3连接MetaMask,在At Address填入目标合约地址,再点击At Address与合约交互
接下来按照之前的思路操作(有颜色的是按钮,点击调用函数或获取变量值)
最后nc上去输入token获取flag