一句话:提出 DeepInfer,用深度学习从智能合约字节码中自动推断函数签名与返回类型。
智能合约字节码缺乏类型信息,而函数签名对合约识别、模糊测试、漏洞检测等下游任务至关重要,因此从字节码恢复签名十分困难。现有方法严重依赖有限的签名数据库或硬编码启发式模式,难以适应不同合约语言与编译器版本带来的语义差异。本文提出 DeepInfer 框架:首先将字节码提升为中间表示(IR)以保留代码语义,然后从 IR 中抽取与类型相关的知识(关键数据流、常量值和控制流图),利用深度学习技术自动推断函数签名与返回类型。作者在 Solidity 与 Vyper 合约上进行实验,结果表明 DeepInfer 比现有工具更快、更准确,并且对语言变化与多种编译器版本具有免疫性。
Smart contracts play an increasingly important role in Ethereum platform. It provides various functions implementing numerous services, whose bytecode runs on Ethereum Virtual Machine. To use services by invoking corresponding functions, the callers need to know the function signatures. Moreover, such signatures provide crucial information for many downstream applications, e.g., identifying smart contracts, fuzzing, detecting vulnerabilities, etc. However, it is challenging to infer function signatures from the bytecode due to a lack of type information. Existing work solving this problem depended heavily on limited databases or hard-coded heuristic patterns. However, these approaches are hard to be adapted to semantic differences in distinct languages and various compiler versions when developing smart contracts. In this paper, we propose a novel framework DeepInfer that first leverages deep learning techniques to automatically infer function signatures and returns. The novelties of DeepInfer are: 1) DeepInfer lifts the bytecode into the Intermediate Representation (IR) to preserve code semantics; 2) DeepInfer extracts the type-related knowledge (e.g., critical data flows, constant values, and control flow graphs) from the IR to recover function signatures and returns. We conduct experiments on Solidity and Vyper smart contracts and the results show that DeepInfer performs faster and more accurate than existing tools, while being immune to changes in different languages and various compiler versions.