尝试构造out of gas的攻击
攻击概述
目的:使得jsevm run out of gas
方法:设置geth pyevm jsevm当前交易的gaslimt为0xccc,jsevm需要0x168a
1 | # geth 修改调用evm的gas不起作用,只能修改genesis.json中的gaslimit |
给定输入data=0xfe575a87000000000000000000000000bffd98ec9ba3dc965b8a97d876670bb367fa84c2
,执行函数isBlacklisted()
,成功
但是目前的问题是geth和pyevm均是revert,交易没有真正执行
1 | # geth |
问题似乎在于ethereumjs的staticcall的gas被计算了,而gas和pyevm执行staticcall的gas消耗被忽略了
1 | // initializer is not initialized |
在remix上不支持过长的合约,只能开启optimizer(200),然后调用isBlacklisted函数,注意到remix VM的gas消耗为5366
remix报错
1 | "error": "Failed to decode output: Error: hex data is odd-length (argument="value", value="0x0", code=INVALID_ARGUMENT, version=bytes/5.7.0)" |
尝试了不同的地址依然存在问题
在remix中先执行setInitializer,依然执行错误
1 | function setInitializer(address init) public onlyOwner { |