第十八关:MagicNum
本关知识点:
1. evm操作码
2. 区分创建时字节码和运行时字节码
1. 题目要求
需要为以太坊提供一个求解器,一个用正确的数字42响应,且求解器的大小最多10个操作码
2. 代码功能解读
1. setSolver方法设置传入的地址为solver。
3. 漏洞分析
用evm操作码创建编写合约方法
先编写运行时字节码返回数字42,然后用创建时字节码返回运行时字节码
然后将返回的地址传入setSolver方法调用
4. 攻击方法
根据各个操作码的功能
1. 我们需要用创建时字节码把运行时字节码作为返回值
2. 运行时字节码的功能就是把任何请求都返回42。
602a60005260206000f3:是运行时字节码,大小刚好10字节。作用是:把2a推入栈中,然后写入内存,然后返回。
69602a60005260206000f3600052: 代表把602a60005260206000f3推入栈中,然后放到内存里面
600a6016f3: 把内存中22字节开始的后面10个字节返回
69602a60005260206000f3600052600a6016f3
5. 攻击调用图
6. 知识点分析
通过了解evm操作码,能够让我们在编写智能合约时候更加了解底层的运行,对gas的优化和运行过程都有更好的了解。
如果对大家有用,请点赞;如果喜欢,请订阅加点赞,会一直更新~