CN113504940B - 一种改善智能合约字节码逆向工程效果的方法及装置 - Google Patents

一种改善智能合约字节码逆向工程效果的方法及装置 Download PDF

Info

Publication number
CN113504940B
CN113504940B CN202110854751.XA CN202110854751A CN113504940B CN 113504940 B CN113504940 B CN 113504940B CN 202110854751 A CN202110854751 A CN 202110854751A CN 113504940 B CN113504940 B CN 113504940B
Authority
CN
China
Prior art keywords
reverse engineering
code
function
parameter
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110854751.XA
Other languages
English (en)
Other versions
CN113504940A (zh
Inventor
陈厅
李子豪
罗夏朴
王晓峰
王挺
贺哲远
房可昭
张愉菲
朱航
李洪伟
程岩
张小松
金峥卉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Electronic Science and Technology of China
Original Assignee
University of Electronic Science and Technology of China
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by University of Electronic Science and Technology of China filed Critical University of Electronic Science and Technology of China
Priority to CN202110854751.XA priority Critical patent/CN113504940B/zh
Publication of CN113504940A publication Critical patent/CN113504940A/zh
Application granted granted Critical
Publication of CN113504940B publication Critical patent/CN113504940B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及区块链智能合约技术领域,提供了一种改善智能合约字节码逆向工程效果的方法及装置。本发明能够在已知函数签名的条件下,更好地改善编译器,提高智能合约逆向工程结果的可读性。主要方案包括步骤S1:使用Erays对合约字节码进行逆向工程,得到逆向后的代码;步骤S2:根据合约字节码中已知的函数签名,为逆向工程后得到代码的每个公共/外部函数添加函数id、参数类型,并生成参数列表;步骤S3:对于步骤S1中合约字节码中的每一个函数,使用有意义参数名替换无意义的变量名;步骤S4:针对赋值语句,如果将对应函数的参数赋值给变量,则将对应参数的类型添加到变量中;步骤S5:用简单的赋值语句替换由编译器生成用于访问参数的代码。

Description

一种改善智能合约字节码逆向工程效果的方法及装置
技术领域
本发明属于区块链智能合约技术领域,具体为一种改善智能合约字节码逆向工程效果的方法,处理对象为智能合约字节码文件,可改善智能合约字节码逆向工程结果的可读性。
背景技术
超过3000万智能合约被部署在以太坊这个最大的智能合约宿主链上。以太坊智能合约是一个在以太坊虚拟机(EVM)上运行的程序(即数据和指令的集合),以太坊智能合约能够通过它的合约地址进行访问。智能合约一般由高级语言编写(例如Solidity),随后被编译为EVM字节码。在智能合约被部署到链上后,合约的public和external方法能够被调用。为了调用一个智能合约函数,调用者需要知道其函数签名,函数签名包含了functionid和函数的参数类型。function id为对函数名进行Keccak-256哈希计算后的前4字节内容。区块链上的许多以太坊智能合约是不透明的,它们没有易于链接的源代码。在文献《Erays:Reverse Engineering Ethereum’s Opaque Smart Contracts》中,Yi Zhou等研究者统计了截止到2018年1月3日,这些不透明的智能合约持有31亿美元,交易总次数为1270万次,因此如何对这些不透明合约进行公开审计,维护以太坊生态的透明性是一个重要的问题。
Erays是一种用于智能合约的逆向工程工具,它接收字节码,并输出基于寄存器的指令,这些指令比EVM字节码更可读。然而,Erays既不能恢复函数签名,也不能恢复变量类型,而且它的输出包含大量由编译器生成用于访问参数的代码,这使得程序很难理解。
发明内容
针对上述现有技术问题,本发明的目的在于提供一种改善智能合约字节码逆向工程效果的方法,在已知函数签名的条件下,通过添加函数签名、变量类型、替换变量名、替换编译器生成用于访问参数的代码来提高逆向工程结果的可读性。为了达到上述目的,本发明采用如下技术方案:
一种改善智能合约字节码逆向工程效果的方法,其特征在于:在已知函数签名的条件下,通过添加函数签名、变量类型、替换变量名、替换编译器生成用于访问参数的代码来提高逆向工程结果的可读性。该方法主要包括以下步骤:
本发明提过了一种改善智能合约字节码逆向工程效果的方法,在已知函数签名的条件下,通过添加函数签名、变量类型、替换变量名、替换编译器生成用于访问参数的代码来提高逆向工程结果的可读性。该方法主要包括以下步骤:
步骤S1:使用Erays对合约字节码进行逆向工程,得到逆向后的代码;
步骤S2:根据已知的函数签名,为逆向工程后得到代码的每个公共/外部函数添加函数id、参数类型,并生成参数列表;
步骤S3:对于步骤S1中合约的每一个函数,由步骤S2中的参数列表,使用有意义参数名替换无意义的变量名(例如使用arg1代替变量x,表示x是该函数的第一个参数;如果变量y是从第1个参数的num字段复制的,用num(arg1)代替变量y)。
步骤S4:针对赋值语句,如果将该函数的参数赋值给变量,则将对应参数的类型添加到变量中。例如变量s是从函数第一个参数直接复制的,而函数第一个参数的类型为string,那么变量s的类型将会被添加为string。
步骤S5:用简单的赋值语句替换大量由编译器生成用于访问参数的代码。为了识别这样的代码,首先合成一组包含合成函数的合约,这些函数接收各种参数类型,然后使用Solidity的所有主流版本将这些合成合同编译成EVM(Ethereum Virtual Machine以太坊虚拟机)字节码。在Erays对这些EVM字节码进行逆向工程之后,学习其代码模式,根据代码模式扫描Erays的结果来识别用于访问参数的代码。
本发明同现有技术相比,其有益效果表现在:
一、本发明提供了一种改善智能合约逆向工程效果的方法,能够有效解决使用Erays对合约字节码进行逆向工程后,输出结果可读性差的问题,有利于安全团队或监管机构对以太坊区块链的公开审核,提高智能合约程序透明度。
附图说明
图1是本发明的流程图;
图2是示例合约的源码;
图3是Erays输出的逆向工程结果
图4是Erays+逆向工程结果,本申请文件中采用Erays+作为本申请提供的一种改善智能合约字节码逆向工程效果的方法的简称。
具体实施方式
下面将结合附图及具体实施方式对本发明作进一步的描述。
一种改善智能合约字节码逆向工程效果的方法,其特征在于:在已知函数签名的条件下,通过添加函数签名、变量类型、替换变量名、替换编译器生成用于访问参数的代码来提高逆向工程结果的可读性。该方法主要包括以下步骤:
步骤S1:使用Erays对合约字节码进行逆向工程,得到逆向后的代码;
步骤S2:根据合约字节码中已知的函数签名,为逆向工程后得到代码的每个公共/外部函数添加函数id、参数类型,并生成参数列表;
步骤S3:对于步骤S1中合约字节码中的每一个函数,通过赋值语句使用有意义参数名替换无意义的变量名;(例如使用arg1代替变量x,表示x是该函数的第一个参数;如果变量y是从第1个参数的num字段复制的,用num(arg1)代替变量y);
步骤S4:针对赋值语句,如果将步骤S3所述的函数的参数赋值给变量,则将对应参数的类型添加到变量中;例如变量s是从函数第一个参数直接复制的,而函数第一个参数的类型为string,那么变量s的类型将会被添加为string。
步骤S5:用简单的赋值语句替换由编译器生成用于访问参数的代码。
步骤S5中,为了识别由编译器生成的用于访问的参数的代码,首先合成一组包含不同函数的合约,这些函数接收各种参数类型,然后使用Solidity的所有主流版本将这些合约编译成EVM(Ethereum Virtual Machine以太坊虚拟机)字节码。在Erays对这些EVM字节码进行逆向工程之后,学习其代码模式,根据代码模式扫描Erays的结果来识别用于访问参数的代码。
实施例
我们使用Erays+(本申请方法)与Erays(现有技术方法)对同一字节码进行逆向工程的结果。Erays+添加了由SigRec(第1行)提供的函数签名(EarysABI)。由于恢复的函数签名不包括函数名和参数名,因此Erays+使用了函数id,并用argN表示第N个参数。图4中的第7行和第8行对应源代码中的第4行和第5行。此外,Erays+保留了编译器生成用于检查以太传输(第2行)、数组溢出(第3-6行)和终止程序执行(第10行)的代码。需要注意的是,Erays将较低维度的边界检查简化为true(第4-6行),因为较低维度的大小是已知的,因此这些边界检查的结果可以在不执行的情况下确定。然后我们解释。Erays+如何简化Erays的结果。首先,Erays+将无意义的变量名m[$s5]替换为num(arg1),表示多维数组arg1最高维度的大小。其次,Erays+将图3中的58行代码替换为图4中第7行的代码来读取arg1中的一项。同时,Erays+为$s4添加了类型,因为Erays+知道$s4是一个参数的数组项。然后,Erays+用图4中第8行的代码替换了图3中用于读取arg2的48行代码。Erays+还给s添加了类型,因为它是从第二个参数直接复制的因此,Erays+的结果比Erays的原始输出更容易理解。
以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。

Claims (5)

1.一种改善智能合约字节码逆向工程效果的方法,其特征在于:在已知函数签名的条件下,通过添加函数签名、变量类型、替换变量名、替换编译器生成用于访问参数的代码来提高逆向工程结果的可读性,包括以下步骤:
步骤S1:使用Erays对合约字节码进行逆向工程,得到逆向后的代码;
步骤S2:根据合约字节码中已知的函数签名,为逆向工程后得到代码的每个公共/外部函数添加函数id、参数类型,并生成参数列表;
步骤S3:对于步骤S1中合约字节码中的每一个函数,通过赋值语句使用有意义参数名替换无意义的变量名;
步骤S4:针对赋值语句,如果将步骤S3所述的函数的参数赋值给变量,则将对应参数的类型添加到变量中;
步骤S5:用简单的赋值语句替换由编译器生成用于访问参数的代码。
2.根据权利要求1所述的一种改善智能合约字节码逆向工程效果的方法,其特征在于,步骤S5中,为了识别由编译器生成的用于访问的参数的代码,首先合成一组包含不同函数的合约,这些函数接收各种参数类型,然后使用 Solidity 的所有主流版本将这些合约编译成 EVM字节码,在 Erays对这些 EVM 字节码进行逆向工程之后,学习其代码模式,根据代码模式扫描 Erays 的结果来识别用于访问参数的代码。
3.一种改善智能合约字节码逆向工程效果的装置,其特征在于:在已知函数签名的条件下,通过添加函数签名、变量类型、替换变量名、替换编译器生成用于访问参数的代码来提高逆向工程结果的可读性,包括以下模块:
逆向工程模块:使用Erays对合约字节码进行逆向工程,得到逆向后的代码;
代码处理模块:根据合约字节码中已知的函数签名,为逆向工程后得到代码的每个公共/外部函数添加函数id、参数类型,并生成参数列表;
赋值模块:对于合约字节码中的每一个函数,通过赋值语句使用有意义参数名替换无意义的变量名;针对赋值语句,如果将所述的函数的参数赋值给变量,则将对应参数的类型添加到变量中;用简单的赋值语句替换由编译器生成用于访问参数的代码。
4.根据权利要求3所述的一种改善智能合约字节码逆向工程效果的装置,其特征在于,为了识别由编译器生成的用于访问的参数的代码,首先合成一组包含不同函数的合约,这些函数接收各种参数类型,然后使用 Solidity 的所有主流版本将这些合约编译成 EVM字节码,在 Erays对这些 EVM 字节码进行逆向工程之后,学习其代码模式,根据代码模式扫描 Erays 的结果来识别用于访问参数的代码。
5.一种存储介质,其特征在于,所述存储介质存储有一种改善智能合约字节码逆向工程效果的程序,CPU处理器在执行一种改善智能合约字节码逆向工程效果的程序时实现如权利要求1-2任一所述的一种改善智能合约字节码逆向工程效果的方法。
CN202110854751.XA 2021-07-28 2021-07-28 一种改善智能合约字节码逆向工程效果的方法及装置 Active CN113504940B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110854751.XA CN113504940B (zh) 2021-07-28 2021-07-28 一种改善智能合约字节码逆向工程效果的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110854751.XA CN113504940B (zh) 2021-07-28 2021-07-28 一种改善智能合约字节码逆向工程效果的方法及装置

Publications (2)

Publication Number Publication Date
CN113504940A CN113504940A (zh) 2021-10-15
CN113504940B true CN113504940B (zh) 2023-04-07

Family

ID=78014821

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110854751.XA Active CN113504940B (zh) 2021-07-28 2021-07-28 一种改善智能合约字节码逆向工程效果的方法及装置

Country Status (1)

Country Link
CN (1) CN113504940B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110688151A (zh) * 2019-09-24 2020-01-14 暨南大学 一种面向以太坊Solidity智能合约的安全翻译与解析方法
CN111563237A (zh) * 2020-03-24 2020-08-21 博雅正链(北京)科技有限公司 一种智能合约安全增强方法
CN112967059A (zh) * 2021-05-18 2021-06-15 支付宝(杭州)信息技术有限公司 一种测试资损监控系统的变异智能合约生成方法和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020069526A1 (en) * 2018-09-28 2020-04-02 ShelterZoom Smart contracts

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110688151A (zh) * 2019-09-24 2020-01-14 暨南大学 一种面向以太坊Solidity智能合约的安全翻译与解析方法
CN111563237A (zh) * 2020-03-24 2020-08-21 博雅正链(北京)科技有限公司 一种智能合约安全增强方法
CN112967059A (zh) * 2021-05-18 2021-06-15 支付宝(杭州)信息技术有限公司 一种测试资损监控系统的变异智能合约生成方法和系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Neville Grech 等."Gigahorse: Thorough, Declarative Decompilation of Smart Contracts".《2019 IEEE/ACM 41st International Conference on Software Engineering (ICSE)》.2019,第1176-1186页. *
Xiaoqi Li 等."STAN: Towards Describing Bytecodes of Smart Contract".《2020 IEEE 20th International Conference on Software Quality, Reliability and Security (QRS)》.2020,第273-284页. *
王守道 等."基于区块链的智能合约压缩存储方法".《现代计算机(专业版)》.2019,第42-46页. *

Also Published As

Publication number Publication date
CN113504940A (zh) 2021-10-15

Similar Documents

Publication Publication Date Title
Schulte et al. Automated repair of binary and assembly programs for cooperating embedded devices
CN102945203B (zh) 一种用于移动互联网应用的代码安全测试方法
CN104408366B (zh) 基于插装技术的安卓应用程序权限使用行为跟踪方法
CN110309631B (zh) 一种编程语言结构混淆处理方法、智能终端及存储介质
CN110597515A (zh) 一种字节码插桩方法
CN107203500A (zh) 基于递归替换展开回溯的excel公式面向对象语言的自动转换方法
CN109857631A (zh) 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质
CN110673851B (zh) 一种智能合约运行方法、装置及电子设备
Matthes et al. The Type System of DBPL.
CN113504940B (zh) 一种改善智能合约字节码逆向工程效果的方法及装置
CN103150199A (zh) 一种多类型msvl语言解释系统及多类型msvl语言解释方法
US20140229915A1 (en) Debugger with previous version feature
Gutstein Memory safety with CHERI capabilities: security analysis, language interpreters, and heap temporal safety
Wang et al. An empirical study of solidity language features
Foket et al. Effective and efficient Java‐type obfuscation
CN1645319A (zh) 优化网络环境下部分计值服务的方法
Hayman MExtemes Manual Version 1.00
Zhou et al. WASMOD: Detecting vulnerabilities in Wasm smart contracts
CN114611500A (zh) 表达式处理方法、装置、电子设备及计算机可读存储介质
Wang et al. A semantic-based smart contract defect detection general platform
CN113297622A (zh) 一种日志脱敏方法、系统、电子设备及存储介质
CN112287306B (zh) 一种应用程序安装包的保护方法、装置及计算机可读存储介质
CN112733054A (zh) 一种高性能基于代码动态分析的系统和方法
Cao et al. Improved metrics for encapsulation based on information hiding
CN110162937B (zh) 基于网络通讯实现计算机软件保护的方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant