ethernaut——MagicNum

第十八关: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的优化和运行过程都有更好的了解。

如果对大家有用,请点赞;如果喜欢,请订阅加点赞,会一直更新~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值