火星链 火星链
Ctrl+D收藏火星链

UTD:教你用ETH进行聊天

作者:

时间:1900/1/1 0:00:00

前言

前段时间,PolyNetwork被盗事件的一个小插曲,一地址向黑客地址转账在inputdata中告知其USDT已被冻结,不要使用USDT,黑客知晓后向该地址转账13.37ETH。

事后很多人便通过inputData在区块链上“聊天”向黑客“索要”虚拟货币,那么我们经常在区块链浏览器中看到的inputData到底是什么?知道创宇区块链安全实验室?为您解答。

Inputdata

在以太坊协议中,当交易为合约创建时,inputdata是账户初始化程序的EVM代码;

而当交易为消息调用时,inputdata是合约函数调用数据。

正常情况下简单的消息调用如调用转账函数时需要填写你要转账的地址_to和你要转账的数量_amount,这些基本信息都包含在inputdata里面。

我们通过一个调用合约的转账交易具体分析,来理解消息调用时inputdata的结构。

解析形式:

原始形式:

我们将原始的inputdata分为三个部分进行分析:

0xa9059cbb:函数标识符

000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2:第一个参数为address即你要转账的地址,并补位到32字节即64个16进制字符

BTC全网未确认交易笔数为261025笔:金色财经报道,根据btc.com显示,BTC目前全网未确认交易笔数为261025笔,自08月12日00:00起至今笔数已减少约6%。[2023/8/14 16:24:10]

0000000000000000000000000000000000000000000054b7d8ed70650b290000:第二个参数为value即你要转账的数量,并补位到32字节即64个16进制字符

通过对比分析我们可以发现inputdata的基本结构为函数标识符参数。

函数标识符

这里的函数标识符即为函数选择器,根据官方文档可知函数选择器是某个函数签名的Keccak哈希的前4字节。

我们可以通过代码?bytess4(keccake256("transfer(adddress,uint256)"))?或者在线工具获取这种函数签名。

下图可以看出加密结果的前四个字节?(a9059cbb)?跟inputdata中函数标识符一致。

这里之所以要将函数签名截断到四个字节是考虑到Gas成本问题。

在一笔交易中0字节需要支付4gas,而非0字节需要68gas也就是0字节的17倍。

在SHA-3加密中生成的32字节随机字符串更倾向于多的非0字节,所以大概成本是32x68=2176gas,而截断成本大概为4x68=272gas,可见截断到四个字节能够节省约8倍的gas费。

Ark Invest昨日增持840万美元Coinbase股票:金色财经报道,Cathie Wood 旗下 Ark Invest 昨日再度增持 840 万美元 Coinbase 股票。

此前报道,4 月 25 日,Ark Invest 增持近 860 万美元的 Coinbase 股票。[2023/5/2 14:38:16]

而函数标识符的作用是指定调用哪一个函数,在同一个合约中两个不同函数的SHA-3签名的前4字节相同的概率是十分小的,所以截断到四个字节实际不会影响函数调用。

参数

在evm执行字节码的约定中,静态类型左补齐零至64长度,而动态类型则是右补齐零至64长度。

归纳下常见的静态类型:uint,bool,Address,bytes,动态数组类型:bytes,string,address,bytes32.....

我们通过?pyethereum的ABI编码函数?来研究不同数据类型的编码方式。

静态类型

先导入encode_abi函数

importrlp?fromethereum.abiimportencode_abi

我们以函数transfer(address,uint256)为例

>encode_abi(,

游戏NFT市场Fractal扩展到Polygon并获得战略融资:金色财经报道, Twitch 联合创始人 Justin Kan 开发的游戏相关非同质代币 (NFT)平台 Fractal 宣布扩展到Polygon区块链协议。Fractal 的产品套件 F Studio 将在 Polygon 上提供,包括其NFT启动板、市场、锦标赛、开发人员 SDK、游戏启动器和使用 Fractal 服务登录。Polygon 的功能已在三款游戏中上线并可用,未来几个月还会有更多。

Polygon 也将对 Fractal 进行战略投资,深化合作伙伴关系,让团队更好地为 Web3 游戏开发者和玩家服务。Kan 表示,该公司的目标是 AAAA 级区块链游戏,他说:“Fractal 的使命是不懈地为 Web3 游戏开发者提供构建游戏未来所需的一切支持。从用户获取到区块链工具再到金融基础设施,我们制定了框架,以便他们能够专注于成功的游戏开发。”[2023/1/25 11:29:04]

).hex()

000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f2

0000000000000000000000000000000000000000000000000000000000000001

对于小于32字节的定长数组会被自动填充到32字节:

Avalanche链上数字资产信息服务平台The Tie推出NFT和GameFi仪表板:11月15日消息,数字资产数据和分析提供商TheTie宣布发布了面向公众的Avalanche GameFi和NFT仪表板。该仪表板提供了对Avalanche生态系统链上和链下指标的新可见性。该平台还计划在未来几个月扩展到Avalanche的DeFi和其他数据集。

此前报道,今年3月,TheTie以1亿美元估值完成900万美元A轮融资,Blizzard领投,参投方包括HudsonRiver Trading、Golden TreeAsset Management、NYDIG、Gemini、Republic等。TheTie旨在建立一个类似彭博社的信息中心,包含价格跟踪、新闻报道等方面的信息。CoinDesk正是基于其产品SigDev建立的客户端。[2022/11/15 13:06:28]

>encode_abi("],).hex()

//自动填充0

0000000000000000000000000000000000000000000000000000000000000001

0000000000000000000000000000000000000000000000000000000000000002

0000000000000000000000000000000000000000000000000000000000000003

Axie Infinity:Origin Alpha Season已结束,DAU本月增加逾263%:7月29日消息,链游Axie Infinity发推称,Origin Alpha Season已经结束,Origin DAU比Alpha Season开始时增加了263.636%,下载量激增,平均每天约3000次。

AXS奖励将在社区保护(Community Protection)小组进行反作弊审查后发放,目前已经进入休赛期,这意味着用户仍然可以战斗,但不会有排名奖励。此外,Season 0即将到来。[2022/7/29 2:45:59]

动态类型

动态类型编码要稍微复杂一些,需要先计算偏移量进行占位处理,我们通过一个简单的例子来具体说明。

>encode_abi(????","uint256","uint256"],

????,,]

).hex()

//参数1的偏移量:32*3=96十六进制0x600000000000000000000000000000000000000000000000000000000000000060

//参数2的偏移量=参数1偏移量参数1数据部分长度=9632*4=224十六进制0xE000000000000000000000000000000000000000000000000000000000000000e0

//参数3的偏移量=参数2偏移量参数2数据部分长度=22432*4=352十六进制0x1600000000000000000000000000000000000000000000000000000000000000160

//偏移量0x60位置开始传入参数1的数据

0000000000000000000000000000000000000000000000000000000000000003//元素个

00000000000000000000000000000000000000000000000000000000000000a1//第一个数组元素

00000000000000000000000000000000000000000000000000000000000000a2//第二个数组元素

00000000000000000000000000000000000000000000000000000000000000a3//第三个数组元素

//0xe0位置。参数2的数据

0000000000000000000000000000000000000000000000000000000000000003

00000000000000000000000000000000000000000000000000000000000000b1

00000000000000000000000000000000000000000000000000000000000000b2

00000000000000000000000000000000000000000000000000000000000000b3

//0x160位置。参数3的数据

0000000000000000000000000000000000000000000000000000000000000003

00000000000000000000000000000000000000000000000000000000000000c1

00000000000000000000000000000000000000000000000000000000000000c2

00000000000000000000000000000000000000000000000000000000000000c3

短地址攻击

经过前面的分析当静态类型如address长度不足32字节时EVM会根据规则将长度补齐到32字节,如果当转账的地址以00结尾,如0x641988625108585185752230bde001b3ebd0fc00,转账时将地址后面的两个零去掉,EVM依然会认为address_to是32位的,所以它会从_value的高位取0来补充,amount的位数会多两位也就是会乘以256。

攻击过程如下:

将恶意转账地址最后一个字节的0去掉

函数标识符:a9059cbb

转账地址:

000000000000000000000000641988625108585185752230bde001b3ebd0fc

转账金额:

00000000000000000000000000000000000000000000000000000000000000001

由于EVM的补位规则,解析结果为:0xa9059cbb000000000000000000000000641988625108585185752230bde001b3ebd0fc0000000000000000000000000000000000000000000000000000000000000000100

我们分解后发现,转账金额已经多了两位也就是多了一个字节,即为原来转账的256倍

函数标识符:a9059cbb

转账地址:

000000000000000000000000641988625108585185752230bde001b3ebd0fc00

转账金额:

00000000000000000000000000000000000000000000000000000000000000100

如何在inputdata附着信息

在以太坊中直接进行转账交易的inputdata字段默认是没有内容的,但是我们可以通过设置钱包实现文章开头的“聊天功能”。

我们以MetaMask钱包为例展示如何通过转账在inputdata字段附着一些额外的信息。

1、首先我们需要打开钱包高级选项的显示十六进制数据开关

2、在转账时将你要附着的信息通过十六进制编码后填入下方十六进制数据中,记得在开头加上0x然后进行转账

3、转账成功后在etherscan中就能够看到附着信息

总结

我们能够通过交易中的inputdata将一些信息永久存储在区块链中,可以通过此项技术在食品药品监管部门的产品防伪溯源、财税部门的电子票据打假验真、学术成果存证等方面实现应用落地。

标签:PUTUTDATADATBitconch Reputation Heatutd币合法吗Catapult.acDataOK

以太坊最新价格热门资讯
HTT:AOFEX於10月16日上線FODL(Fodl Finance)

尊敬的用戶:AOFEX將於2021年10月16日上線FODL,具體時間安排如下:充提業務均已開啟交易時間:10月16日18:00提示:以下内容来源于公告发布时的网络现有资料.

1900/1/1 0:00:00
DEF:ZBG关于VLX暂停充提币的公告

公告编号2021101701各位关心ZBG的投资者们和项目方:VLX因钱包维护暂停充提币,具体开放时间以公告为准,给您带来不便深感抱歉,敬请谅解.

1900/1/1 0:00:00
比特币:巴西国会正在讨论有关“加强对加密资产的反监管”法案

10月20日消息,巴西国会目前正在讨论针对第2303/15号法案的修正案。该法案最近由巴西众议院的一个特别委员会批准,旨在加强对数字货币的反监管.

1900/1/1 0:00:00
KEX:BKEX Global 关于\"POKERFI交易大赛\"活动的公告

尊敬的用户:为回馈广大用户,BKEX现举行"POKERFI交易大赛"活动,详情如下:一、活动时间2021年10月20日20:00-10月27日20:00二、活动规则1.POKERFI交易排行赛活.

1900/1/1 0:00:00
PEN:OpenPunks盲盒25秒售罄:明日解锁 150个限量盲盒(最后一日)

首批OpenPunks发售已于10月11日正式发售,截至10月19日下午2点,共解锁OpenPunks盲盒1350个.

1900/1/1 0:00:00
PIT:去中心化资管协议 Babylon Finance 开启 50 万枚 BABL 代币奖励的社区挖矿计划

链闻消息,由社区驱动的去中心化资产管理协议BabylonFinance开启50万枚BABL代币奖励的社区挖矿计划,从2021年10月17日开始,十年内共50万枚BABL代币将分配给该计划.

1900/1/1 0:00:00