• 简体版 | 繁體版
  • 联系我们
  • 加入我们
  • 关于我们
  •  
  • 首页
  • 快讯
  • 价值号
  • 视频
  • 专题
  • 滚动
  • 入驻价值号
  • 碳链APP
    微信公众号

    扫码下载App

  • 登录
  • 微信公众号

    微信公众号

导航
  • 首页
  • 快讯
  • 区块链+
  • 价值号
  • 视频
  • 专题
  • DeFi优选
碳链价值APP
专注服务于金融科技和区块链
立即打开

以太坊 Input Data 解析

创宇区块链安全实验室创宇区块链安全实验室  •  2021-10-13
我们经常在区块链浏览器中看到的 input Data 到底是什么?

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

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

input data

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

而当交易(transaction)为消息调用时,input data 是合约函数调用数据。正常情况下简单的消息调用如调用转账函数时需要填写你要转账的地址 _to 和你要转账的数量 _amount,这些基本信息都包含在 input data 里面。我们通过一个调用合约的转账交易具体分析,来理解消息调用时 input data 的结构。

解析形式:

原始形式:

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

  • 0xa9059cbb:函数标识符

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

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

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

函数标识符

这里的函数标识符即为函数选择器,根据官方文档可知函数选择器是某个函数签名的 Keccak(SHA-3)哈希的前 4 字节(高位在左的大端序)。

我们可以通过代码

bytess4(keccake256("transfer(adddress,uint256)"))或者在线工具获取这种函数签名。下图可以看出加密结果的前四个字节 (a9059cbb) 跟 input data 中函数标识符一致。

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

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

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

参 数

在 evm 执行字节码的约定中,静态类型左补齐零至 64 长度,而动态类型则是右补齐零至 64 长度。归纳下常见的静态类型:uint,bool,Address,bytes[0-32], 动态数组类型:bytes,string,address[],bytes32[].....我们通过 pyethereum的ABI编码函数 来研究不同数据类型的编码方式。静态类型先导入 encode_abi 函数

import rlp from ethereum.abi import encode_abi

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

> encode_abi(["address", "uint256"],[345d8e3a1f62ee6b1d483890976fd66168e390f2,1]).hex()000000000000000000000000345d8e3a1f62ee6b1d483890976fd66168e390f20000000000000000000000000000000000000000000000000000000000000001

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

> encode_abi(["int8[3]"],[[1, 2, 3]).hex()// 自动填充 0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003

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

> encode_abi(["uint256[]", "uint256[]", "uint256[]"],[[0xa1, 0xa2, 0xa3], [0xb1, 0xb2, 0xb3], [0xc1, 0xc2, 0xc3]]).hex()// 参数 1 的偏移量:32*3=96 十六进制 0x600000000000000000000000000000000000000000000000000000000000000060// 参数2的偏移量=参数 1 偏移量+参数 1 数据部分长度=96+32*4=224 十六进制0xE000000000000000000000000000000000000000000000000000000000000000e0// 参数3的偏移量=参数 2 偏移量+参数 2 数据部分长度=224+32*4=352 十六进制0x1600000000000000000000000000000000000000000000000000000000000000160// 偏移量 0x60 位置开始传入参数 1 的数据0000000000000000000000000000000000000000000000000000000000000003//元素个数00000000000000000000000000000000000000000000000000000000000000a1//第一个数组元素00000000000000000000000000000000000000000000000000000000000000a2//第二个数组元素00000000000000000000000000000000000000000000000000000000000000a3//第三个数组元素// 0xe0位置。参数 2 的数据000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000b100000000000000000000000000000000000000000000000000000000000000b200000000000000000000000000000000000000000000000000000000000000b3//0x160 位置。参数 3 的数据000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c100000000000000000000000000000000000000000000000000000000000000c200000000000000000000000000000000000000000000000000000000000000c3

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

将恶意转账地址最后一个字节的 0 去掉函数标识符:a9059cbb转账地址:000000000000000000000000641988625108585185752230bde001b3ebd0fc转账金额:00000000000000000000000000000000000000000000000000000000000000001由于 EVM 的补位规则,解析结果为:0xa9059cbb000000000000000000000000641988625108585185752230bde001b3ebd0fc0000000000000000000000000000000000000000000000000000000000000000100我们分解后发现,转账金额已经多了两位也就是多了一个字节,即为原来转账的 256倍函数标识符:a9059cbb转账地址:000000000000000000000000641988625108585185752230bde001b3ebd0fc00转账金额:00000000000000000000000000000000000000000000000000000000000000100

如何在 input data 附着信息

在以太坊中直接进行转账交易的 input data 字段默认是没有内容的,但是我们可以通过设置钱包实现文章开头的“聊天功能”。我们以 MetaMask钱包为例展示如何通过转账在 input data 字段附着一些额外的信息。

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

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

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

总结

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

展开全文
打开碳链价值APP  查看更多精彩资讯
声明:本文内容为作者独立观点,不代表碳链价值立场,且不构成任何投资理财建议。
0 0

扫一扫,分享到微信

相关推荐

Uniswap 提案被 a16 z 否决的背后,加密社区因 VC 的治理举措而担忧 深度

Uniswap 提案被 a16 z 否决的背后,加密社区因 VC 的治理举措而担忧

白泽研究院 2023-02-07 深度
Wormholea16zUniswapJumpCapitalLayerZero
a16z 真的控制了 Uniswap 吗?是,也不完全是。
用户「生成收藏」崛起:创作者正从四大领域获得赋能 深度

用户「生成收藏」崛起:创作者正从四大领域获得赋能

巴比特资讯 2023-02-07 深度
UGC
在过去的几年里,我们看到了由 UGC 塑造的在线交流...
盖茨再谈ChatGPT:AI能提高效率,但要考虑边界在哪 深度

盖茨再谈ChatGPT:AI能提高效率,但要考虑边界在哪

澎湃新闻 2023-02-07 深度
AIGCChatGPT
比尔·盖茨一直对AI青睐有加

碳链快讯更多 ›

2023-02-07

OKX宣布将向土耳其地震灾区捐款100万里拉

2023-02-07

SPACE ID 完成 1000 万美元战略轮融资,Polychain Capital 和 dao5 领投

2023-02-07

国际清算银行正开发稳定币监控系统,以确保发行方保持足够储备资产

2023-02-07

ENS DAO 社区已通过“出售 1 万枚 ETH 来支付运营成本”的链上提案

2023-02-07

OpenAI跻身全球TOP50网站,1月访问量突破6.72亿

2023-02-07

北京市监局提醒警惕元宇宙、NFT 炒作

2023-02-07

360计划推出类ChatGPT产品

2023-02-07

蓝色光标:公司正在积极试用ChatGPT技术

2023-02-07

加密矿企Layer1 CEO指控两名董事会成员利用多数股权攫取公司收益

2023-02-07

软银愿景基金第三财季亏损约 49.92 亿美元,投资亏损约 55.26 亿美元

2023-02-07

韩国国民议会将加快制定《数字资产基本法》,最早本月举行公开听证会

2023-02-07

联合国报告:朝鲜黑客2022年盗取的加密货币为历年最多

2023-02-07

DCG 已半价出售约四分之一的灰度以太坊信托基金股份,筹款达 2200 万美元

2023-02-07

Aave创始人:V3升级完全是为了管理风险

2023-02-07

欧易Web3钱包与Avalanche生态借贷协议Benqi达成官方合作

2023-02-07

a16z:已将约 4000 万枚 UNI 投票权无条件委托给外部团体

2023-02-07

加密储蓄公司 Donut:Genesis 的重组计划债权回收率或达 80% 以上

2023-02-07

香港监管机构正扩招负责虚拟资产的职位

2023-02-07

Yuga Labs 在 Bored Ape NFT 商标诉讼中达成和解

2023-02-07

区块链数据分析公司 Elementus 获 1000 万美元 A-2 轮融资,ParaFi Capital 领投

2023-02-07

SBF 获电子通信保释,将被允许使用 FaceTime、Zoom、电子邮件等消息应用程序

2023-02-07

英国央行和财政部邀请公众参与制定数字英镑计划

2023-02-07

Genesis 已就重组计划和母公司 DCG 、债权人 Gemini 达成初步协议

2023-02-07

FTX 已敦促南希·佩洛西等政客在 2 月 28 日前归还此前的政治捐款

2023-02-06

OpenSea 推出内测计划,现已开放申请

2023-02-06

彭博社:区块链金融公司 Figure 放弃 SPAC 上市,并寻求 1 亿美元融资

2023-02-06

Louis Vuitton将与草间弥生发行1万枚联名款NFT并上架OpenSea

2023-02-06

欧易Web3钱包与去中心化交易所BabyDogeSwap达成官方合作

2023-02-06

ARK Invest:未来十年加密货币和智能合约可分别创造 20 万亿和 5 万亿美元的市场价值

2023-02-06

区块链初创公司 Super Block 完成约 722 万美元 A 轮融资,SK、Netmarble 等参投

2023-02-06

徐明星:OKX 暂无推出稳定币的计划

2023-02-06

加密 KOL:Debt DAO 发行的 FTX 债券代币 FUD 可能违反证券法

2023-02-06

普华永道:全球共有 11 个支持加密货币合法的国家/地区

2023-02-06

Visa 正在测试以太坊上的 USDC 大额支付结算系统

2023-02-05

a16z 投票反对在 BNB Chain 上部署 Uniswap V3,希望部署采用 LayerZero 桥接

2023-02-05

集成ChatGPT-4的微软Bing于今日短暂上线

2023-02-05

多名投资人退出前 Moonbirds 首席运营官 Ryan Carson 创立的新项目「Flux」

2023-02-05

数据:1 月份 NFT 交易量达 9.46 亿美元,创 2022 年 6 月以来最高记录

2023-02-05

Yuga Labs 联创:Dookey Dash 得分审核与实时作弊检测分开,玩家得分在审核后或被减为零

2023-02-04

Pioneer宣布获香证监会虚拟资产管理牌照,可管理100%虚拟资产

2023-02-04

去中心化数据系统 Inery 完成新一轮融资,Truth Ventures 参投

2023-02-04

美国司法部机构 U.S. Trustee 代表任命成立 Genesis 破产案中代表无担保债权人的七人委员会

2023-02-04

Arthur Hayes:Zhu Su 新 CEX 项目“GTX”已完成融资

2023-02-04

Microstrategy 创始人:查理·芒格若处于第三世界,会比我更加看好比特币

2023-02-03

慢雾:Orion Protocol 被黑分析

2023-02-03

韩国金融服务委员会定于2月6日公布「证券型代币发行」相关制度指南

2023-02-03

MicroStrategy首席财务官:公司考虑利用比特币波动,进行更多加密货币交易

2023-02-03

以太坊核心开发者:计划2月7日在Zhejiang测试网上激活上海升级

2023-02-03

欧易 Web3 钱包上线币种行情功能

2023-02-03

Damus:正通过比特币闪电网络随机向用户发放小额比特币

推荐文章

  • 深度研究:如何设计代币经济学框架?

    2022-05-31

  • 万事达卡CEO:SWIFT系统将在五年内被央行数字货币取代

    2022-05-31

  • 达沃斯Crypto手记:加密幽灵,在欧洲游荡

    2022-05-30

  • 以太坊合并:如何影响显卡和区块链行业?

    2022-05-29

  • V神:「灵魂绑定」币将成为你们的区块链护照

    2022-05-28

价值号更多 ›

吉时通信
吉时通信
文章: 133
  • 以太坊合并:如何影响显卡和区块链行业?
  • 以太坊合并的底层观察:区块结构和MEV
  • 宏观视角解析LUNA和UST崩盘:稳定币的路在何方?
链集市ChainMarket
链集市ChainMarket
文章: 177
  • 区块链产业周刊丨全球区块链商业委员会与全球数字金融合并;最高人民法院发布区块链司法应用相关意见;蚂蚁链区块链应用专利获国家授权
  • 区块链将如何帮助我们解决气候问题?
  • 区块链产业周刊丨国家级数据云平台“人民云”正式上线;徐工机械成立包含区块链技术的国重实验室;欧盟推进数字欧元发展阶段
Unitimes
Unitimes
文章: 380
  • 深度研究:如何设计代币经济学框架?
  • 创作者经济:正统性危机之下的变革之路
  • 哈佛商业评论:Web3的机遇和挑战
换一批

热门标签

新基建 比特币 以太坊 矿业 DeFi 共识对话 区块链+ 研报 美联储 央行数字货币 无限QE 加密衍生品 AI 云计算 大数据 5G 政策 交易所 稳定币 电子支付 Libra 算力产业 联盟链 公链 区块链 加密货币 Nervos Cosmos EOS STO

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

App内打开

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

Moshou

碳链价值是集资讯、行情、数据于一身的区块链信息服务平台,我们追求及时、全面、专业、精确的资讯与数据,致力于为区块链创新者和数字货币投资者提供优质的服务。

关于我们 加入我们 联系我们 隐私条款
微信公众号

扫一扫关注微信公众号

Copyright © 2018-2020 碳链价值 京ICP备18046423号
下载碳链App

下载碳链App

微信公众号

微信公众号

微信公众号

微信公众号

打赏文章作者

支付宝打赏二维码 支付宝扫一扫打赏
微信打赏二维码 微信扫一扫打赏

# 热门搜索 #

CBDC 比特币 DeFi 以太坊 区块链