今日实时汇率
持有
美元 USD 人民币 CNY 欧元 EUR 英镑 GBP 澳元 AUD 加元 CAD 日元 JPY 港币 HKD 印度卢比 INR 澳门元 MOP 韩元 KRW 墨西哥比索 MXN 阿联酋迪拉姆 AED 阿富汗尼 AFN 阿尔巴尼列克 ALL 亚美尼亚德拉姆 AMD 荷兰盾 ANG 安哥拉宽扎 AOA 阿根廷比索 ARS 阿鲁巴弗罗林 AWG 阿塞拜疆马纳特 AZN 波黑可兑换马克 BAM 巴巴多斯元 BBD 孟加拉国塔卡 BDT 保加利亚列弗 BGN 巴林第纳尔 BHD 布隆迪法郎 BIF 百慕达元 BMD 文莱元 BND 玻利维亚诺 BOB 巴西雷亚尔 BRL 巴哈马元 BSD 不丹努尔特鲁姆 BTN 博茨瓦纳普拉 BWP 白俄罗斯卢布 BYN 伯利兹元 BZD 刚果法郎 CDF 瑞士法郎 CHF 智利比索 CLP 哥伦比亚比索 COP 哥斯达黎加科朗 CRC 古巴比索 CUP 佛得角埃斯库多 CVE 捷克克朗 CZK 吉布提法郎 DJF 丹麦克朗 DKK 多米尼加比索 DOP 阿尔及利亚第纳尔 DZD 埃及镑 EGP 厄立特里亚纳克法 ERN 埃塞俄比亚比尔 ETB 斐济元 FJD 福克兰镑 FKP FOK募集币 FOK 格鲁吉亚拉里 GEL 格恩西岛磅 GGP 加纳塞地 GHS 直布罗陀镑 GIP 冈比亚达拉西 GMD 几内亚法郎 GNF 危地马拉格查尔 GTQ 圭亚那元 GYD 洪都拉斯伦皮拉 HNL 克罗地亚库纳 HRK 海地古德 HTG 匈牙利福林 HUF 印度尼西亚卢比 IDR 以色列新谢克尔 ILS 马恩磅 IMP 伊拉克第纳尔 IQD 伊朗里亚尔 IRR 冰岛克郎 ISK 新泽西岛磅 JEP 牙买加元 JMD 约旦第纳尔 JOD 肯尼亚先令 KES 吉尔吉斯斯坦索姆 KGS 柬埔寨瑞尔 KHR 基里巴斯 KID 科摩罗法郎 KMF 科威特第纳尔 KWD 开曼群岛元 KYD 哈萨克斯坦坚戈 KZT 老挝基普 LAK 黎巴嫩镑 LBP 斯里兰卡卢比 LKR 利比里亚元 LRD 莱索托洛蒂 LSL 利比亚第纳尔 LYD 摩洛哥迪拉姆 MAD 摩尔多瓦列伊 MDL 马达加斯加阿里亚里 MGA 马其顿代纳尔 MKD 缅甸元 MMK 蒙古货币 MNT 毛塔币 MRU 毛里求斯卢比 MUR 马尔代夫拉菲亚 MVR 马拉维克瓦查 MWK 林吉特 MYR 莫桑比克新梅蒂卡尔 MZN 纳米比亚元 NAD 尼日利亚奈拉 NGN 尼加拉瓜新科多巴 NIO 挪威克朗 NOK 尼泊尔卢比 NPR 新西兰元 NZD 阿曼里亚尔 OMR 巴拿马巴波亚 PAB 秘鲁新索尔 PEN 巴布亚新几内亚基那 PGK 菲律宾比索 PHP 巴基斯坦卢比 PKR 波兰兹罗提 PLN 巴拉圭瓜拉尼 PYG 卡塔尔里亚尔 QAR 罗马尼亚列伊 RON 塞尔维亚第纳尔 RSD 俄罗斯卢布 RUB 卢旺达法郎 RWF 沙特里亚尔 SAR 所罗门群岛元 SBD 塞舌尔卢比 SCR 苏丹镑 SDG 瑞典克朗 SEK 新加坡元 SGD 圣赫勒拿镑 SHP 英镑SLE SLE 塞拉利昂利昂 SLL 索马里先令 SOS 苏里南元 SRD 南苏丹币 SSP 圣多美多布拉 STN 叙利亚镑 SYP 斯威士兰里兰吉尼 SZL 泰铢 THB 塔吉克斯坦索莫尼 TJS 土库曼斯坦马纳特 TMT 突尼斯第纳尔 TND 汤加潘加 TOP 土耳其里拉 TRY 特立尼达多巴哥元 TTD 图瓦卢元 TVD 新台币 TWD 坦桑尼亚先令 TZS 乌克兰格里夫纳 UAH 乌干达先令 UGX 乌拉圭比索 UYU 乌兹别克斯坦苏姆 UZS 委内瑞拉玻利瓦尔 VES 越南盾 VND 瓦努阿图瓦图 VUV 萨摩亚塔拉 WST 中非法郎 XAF 东加勒比元 XCD 特别提款权 XDR 西非法郎 XOF 太平洋法郎 XPF 也门里亚尔 YER 南非兰特 ZAR 赞比亚克瓦查 ZMW 津巴布韦币 ZWL
交换
兑换
美元 USD 人民币 CNY 欧元 EUR 英镑 GBP 澳元 AUD 加元 CAD 日元 JPY 港币 HKD 印度卢比 INR 澳门元 MOP 韩元 KRW 墨西哥比索 MXN 阿联酋迪拉姆 AED 阿富汗尼 AFN 阿尔巴尼列克 ALL 亚美尼亚德拉姆 AMD 荷兰盾 ANG 安哥拉宽扎 AOA 阿根廷比索 ARS 阿鲁巴弗罗林 AWG 阿塞拜疆马纳特 AZN 波黑可兑换马克 BAM 巴巴多斯元 BBD 孟加拉国塔卡 BDT 保加利亚列弗 BGN 巴林第纳尔 BHD 布隆迪法郎 BIF 百慕达元 BMD 文莱元 BND 玻利维亚诺 BOB 巴西雷亚尔 BRL 巴哈马元 BSD 不丹努尔特鲁姆 BTN 博茨瓦纳普拉 BWP 白俄罗斯卢布 BYN 伯利兹元 BZD 刚果法郎 CDF 瑞士法郎 CHF 智利比索 CLP 哥伦比亚比索 COP 哥斯达黎加科朗 CRC 古巴比索 CUP 佛得角埃斯库多 CVE 捷克克朗 CZK 吉布提法郎 DJF 丹麦克朗 DKK 多米尼加比索 DOP 阿尔及利亚第纳尔 DZD 埃及镑 EGP 厄立特里亚纳克法 ERN 埃塞俄比亚比尔 ETB 斐济元 FJD 福克兰镑 FKP FOK募集币 FOK 格鲁吉亚拉里 GEL 格恩西岛磅 GGP 加纳塞地 GHS 直布罗陀镑 GIP 冈比亚达拉西 GMD 几内亚法郎 GNF 危地马拉格查尔 GTQ 圭亚那元 GYD 洪都拉斯伦皮拉 HNL 克罗地亚库纳 HRK 海地古德 HTG 匈牙利福林 HUF 印度尼西亚卢比 IDR 以色列新谢克尔 ILS 马恩磅 IMP 伊拉克第纳尔 IQD 伊朗里亚尔 IRR 冰岛克郎 ISK 新泽西岛磅 JEP 牙买加元 JMD 约旦第纳尔 JOD 肯尼亚先令 KES 吉尔吉斯斯坦索姆 KGS 柬埔寨瑞尔 KHR 基里巴斯 KID 科摩罗法郎 KMF 科威特第纳尔 KWD 开曼群岛元 KYD 哈萨克斯坦坚戈 KZT 老挝基普 LAK 黎巴嫩镑 LBP 斯里兰卡卢比 LKR 利比里亚元 LRD 莱索托洛蒂 LSL 利比亚第纳尔 LYD 摩洛哥迪拉姆 MAD 摩尔多瓦列伊 MDL 马达加斯加阿里亚里 MGA 马其顿代纳尔 MKD 缅甸元 MMK 蒙古货币 MNT 毛塔币 MRU 毛里求斯卢比 MUR 马尔代夫拉菲亚 MVR 马拉维克瓦查 MWK 林吉特 MYR 莫桑比克新梅蒂卡尔 MZN 纳米比亚元 NAD 尼日利亚奈拉 NGN 尼加拉瓜新科多巴 NIO 挪威克朗 NOK 尼泊尔卢比 NPR 新西兰元 NZD 阿曼里亚尔 OMR 巴拿马巴波亚 PAB 秘鲁新索尔 PEN 巴布亚新几内亚基那 PGK 菲律宾比索 PHP 巴基斯坦卢比 PKR 波兰兹罗提 PLN 巴拉圭瓜拉尼 PYG 卡塔尔里亚尔 QAR 罗马尼亚列伊 RON 塞尔维亚第纳尔 RSD 俄罗斯卢布 RUB 卢旺达法郎 RWF 沙特里亚尔 SAR 所罗门群岛元 SBD 塞舌尔卢比 SCR 苏丹镑 SDG 瑞典克朗 SEK 新加坡元 SGD 圣赫勒拿镑 SHP 英镑SLE SLE 塞拉利昂利昂 SLL 索马里先令 SOS 苏里南元 SRD 南苏丹币 SSP 圣多美多布拉 STN 叙利亚镑 SYP 斯威士兰里兰吉尼 SZL 泰铢 THB 塔吉克斯坦索莫尼 TJS 土库曼斯坦马纳特 TMT 突尼斯第纳尔 TND 汤加潘加 TOP 土耳其里拉 TRY 特立尼达多巴哥元 TTD 图瓦卢元 TVD 新台币 TWD 坦桑尼亚先令 TZS 乌克兰格里夫纳 UAH 乌干达先令 UGX 乌拉圭比索 UYU 乌兹别克斯坦苏姆 UZS 委内瑞拉玻利瓦尔 VES 越南盾 VND 瓦努阿图瓦图 VUV 萨摩亚塔拉 WST 中非法郎 XAF 东加勒比元 XCD 特别提款权 XDR 西非法郎 XOF 太平洋法郎 XPF 也门里亚尔 YER 南非兰特 ZAR 赞比亚克瓦查 ZMW 津巴布韦币 ZWL
1 美元(USD)=
7.3043 人民币(CNY)
反向汇率:1 CNY = 0.1369 USD
更新时间:2025-04-19 08:02:31
立即换算
背景
从 DeFi 之夏到现在,我们在遭受各种漏洞、后门、跑路等层出不穷的手段洗礼后,总算学会了在 DEX 上参与新项目前,应先检查代币合约 的权限、代币的持仓分布及合约的代码以保护自己的资产安全。但相对的,坏人们的作恶手段也更加高明与隐蔽 。近期,慢雾安全团队收到来自 PancakeSwap 社区用户的求助,其参与项目时观察到,在项目代币没有任何增发记录的情况下,恶意用户使用未被记录的大量增发代币卷走了池子中的资金。慢雾安全团队跟进分析此事件并将结果分享如下:
攻击细节
恶意代币 IEGT 在 BSC 上的部署地址是 0x8D07f605926837Ea0F9E1e24DbA0Fb348cb3E97D[1]。我们通过区块浏览器观察其 Holders,发现在 dead 与 pair 地址持有大量 IEGT 代币的情况下,合约记录的 totalSupply 仍为 5,000,000。
通过进一步查看这些代币的来源可以发现,这些代币在0x00002b9b0748d575CB21De3caE868Ed19a7B5B56 中只有转出记录而没有转入记录。
我们都知道,EIP20标准[2]规定了代币转移时必须实现 Transfer 事件,包括在代币铸造时,从 0x0 地址进行转移也必须进行事件记录。区块浏览器依赖这些标准的事件记录进行数据统计。因此,当在区块浏览器中发现其代币总额与实际数量不匹配时,则表明代币在进行增发时并未进行事件记录,导致区块浏览器只统计了转账后相关地址的余额变化,而没有任何代币增发记录。据此,我们可以确定代币合约中必然存在增发代币的恶意代码。
此代币合约的代码是开源的,想来是项目方为了增加项目的可信度。接下来我们对其源码进行分析。一般来说,进行代币增发最简单的方式就是实现一个直接增加指定地址余额的方法。在当前合约中是通过定义一个 _balances 映射,对用户的代币余额进行记录。但经过检查,合约中并未实现对指定地址的 _balances 进行修改的代码。
既然没有发现直接增加余额的代码,那么项目方又是如何进行增发的呢?我们回顾下智能合约的基础知识,可以知道用户代币余额的变化本质上就是修改了合约在链上存储 的数据状态。因此,只要修改特定地址的 _balances 在合约中对应存储的插槽数据,即可修改其代币余额。
我们先简单回顾下 EVM 中计算合约数据存储位置的基础知识,对于映射类型 _balances 来说,其会根据其键值 k 与其所占据位置 p 进行 keccak256 后得到偏移量,作为其存储的插槽位置,即 keccak256(k,p)。通过分析 IEGT 合约的数据存储位置,我们可以发现其 _balances 参数所在位置为 slot0,那么用户的余额存储位置即为 keccak256(address,0) 。
带入恶意地址进行计算,可以得到其余额存储位置为 0x9d1f25384689385576b577f0f3bf1fa04b6829457a3e65965ad8e59bd165a716。随后查找此插槽数据变化,可以发现其在合约部署时已被修改为一个巨大的值。
因此,我们可以确定在 IEGT 合约部署初始化时,项目方就隐蔽地增发了大量的代币,为 Rug 做好准备。接下来我们跟进其初始化函数,分析发现其在进行 _pathSet 操作时,通过内联汇编对合约存储进行了修改,并且未对代码进行格式化处理,以降低其可读性。
跟进计算发现 y 值为 2b9b0748d575cb21de3cae868ed19a7b5b56,通过两次 mstore 将内存 0~64 字节的位置填充为 00000000000000000000000000002b9b0748d575cb21de3cae868ed19a7b5b56,而恶意增加代币余额的地址为 0x00002b9b0748d575CB21De3caE868Ed19a7B5B56。可以发现恶意用户通过构造一连串的数据,计算使得正好可以得到其控制的目标地址。因此,我们也可以从编译后的字节码中发现此计算后未进行填充的“地址”。
紧接着通过 keccak256 对内存 0~64 字节的数据进行哈希后,正好得到恶意用户的余额存储插槽位置 0x9d1f25384689385576b577f0f3bf1fa04b6829457a3e65965ad8e59bd165a716,这也正是合约中将 _balances 置于 slot0 位置的原因,这极大方便了在内联汇编中计算余额实际的存储位置。然后使用 sstore 将合约中此存储位置的值修改为当前时间的 6 次方,此时即完成了对指定地址的余额修改。随后的内联汇编操作类似,在此不做赘述。
至此,我们知道了项目方是在合约初始化时,通过内联汇编的方式修改了指定地址余额,隐蔽地增发了大量未被其他用户获悉的代币,导致用户在参与项目时被 Rug。
追踪分析
通过 MistTrack[3]分析此次事件获利地址为 BSC 链上 0x000000481F40f88742399A627Cbc2Afb6Ec34FeD 与 0x00002b9b0748d575CB21De3caE868Ed19a7B5B56,共计获利 114 万 USDT,获利地址转移 USDT 的手续费来源为 Binance 交易所提款。
目前资金转移情况如下图:
此外,恶意合约创建者的手续费地址 0xb795ad917DAF9A1c98eE18E03E81FBBfb6D54355 同样存在大量痕迹。
总结
此次事件中,项目方开源合约代码以增加用户信任度,通过未格式化的代码降低代码可读性,并且使用内联汇编来编写直接修改用户余额存储插槽数据的代码,提高了代码分析门槛。其使用种种手段隐藏作恶痕迹,最后将池子席卷一空。可以发现,在用户的安全意识越来越强的情况下,作恶者的手段也越发隐蔽与高明。据 SlowMist Hacked[4] 统计,截止目前,由于 Rug Pull 导致的损失金额接近 5 亿美元。因此,用户在参与新项目时应着重分析其合约中是否存在可疑的代码,尽量不参与合约未开源且未经过审计的项目。MistTrack 团队也将持续跟进并监控此事件。
参考链接:
[1] https://bscscan.com/address/0x8d07f605926837ea0f9e1e24dba0fb348cb3e97d
[2] https://eips.ethereum.org/EIPS/eip-20
[3]https://misttrack.io/
[4] https://hacked.slowmist.io/