duneanalytics/storage-layout-extractor
GitHub: duneanalytics/storage-layout-extractor
这是一个基于 EVM 字节码,通过符号执行和类型推断技术来逆向推导智能合约存储布局的 Rust 库。
Stars: 153 | Forks: 19
# EVM 存储布局提取器
本项目是一个能够处理 [EVM](https://ethereum.org/en/developers/docs/evm/)
[字节码](https://ethereum.org/en/developers/docs/evm/opcodes/) 并发现该字节码所描述合约的近似存储
布局的库。它**不**旨在成为一个完整的反编译器,
而是一个**高度**专注于执行此发现过程的工具。
有关更多详细信息,请参阅我们的 [公告](https://blog.smlxl.io/announcing-bytecode-generated-storage-layouts-on-evm-storage-96761758d397)
或查看我们博客上的 [深度解析文章](https://blog.smlxl.io/a-deep-dive-into-our-storage-layout-extractor-51554185d8af)。
此发现过程大致执行如下:
1. 摄取字节码并将其反汇编为易于分析的指令流。
这是一系列与字节码等效的 Opcode。
2. 指令流在专门的 EVM 实现上进行符号执行。此
执行既是**推测性的**也是**完全的**,探索所有可能影响
给定存储位置类型的代码路径。
3. 对于执行期间在程序中看到的每个值,VM 会构建一个**符号值**(一个小型的
树结构),表示对该特定“数据”片段执行的操作。
4. 这些执行树被传递给类型推断过程。此过程首先进行 _lifting_(提升),
将低级构造转换为更通用的高级构造。然后将结果
馈送到 _inference rules_(推断规则),这些规则输出关于其分析的树的**类型推断判断**。
最后,这些推断与 _unifier_(统一器)结合,以执行全程序类型推断。
5. 与每个存储槽关联的解析类型随后被转换为**存储布局**,
该布局描述了遇到的每个存储槽的类型。
有关该过程的更多信息,特别是参考具体的代码片段,请参阅
[`lib.rs`](src/lib.rs) 中的文档。这也提供了该库的基本用法示例,
尽管更复杂的示例可以在 [tests](tests) 中找到。
## 扩展库
扩展此库以获得更好的布局的主要方法是扩展类型推断
引擎。这可以通过编写新的 **lifting passes**(提升过程)或 **inference rules**(推断规则)来完成,您可以
在关于 [扩展库](./docs/Extending%20the%20Library.md) 的文档中找到有关此过程的更多信息。
## 贡献
如果您想向此项目贡献代码或文档(非代码贡献**始终**受到欢迎),请
查看我们的 [贡献指南](./docs/CONTRIBUTING.md) 文档。它
提供了如何开始运行的概述,以及该库的贡献流程
是什么样的。
如果您有任何问题,也可以在我们的 [Telegram 群组](https://t.me/+zw0fuNoYg39hZWRh) 中找到我们。
标签:EVM, Solidity, URL提取, 云安全监控, 云资产清单, 代码分析, 以太坊, 凭证管理, 区块链安全, 反编译, 可视化界面, 合约审计, 字节码, 存储布局, 智能合约, 符号执行, 类型推断, 逆向工程, 通知系统, 静态分析