KR20230027890A - Ethereum virtual machine bytecode analysis method and evm bytecode analysis tool - Google Patents

Ethereum virtual machine bytecode analysis method and evm bytecode analysis tool Download PDF

Info

Publication number
KR20230027890A
KR20230027890A KR1020210110166A KR20210110166A KR20230027890A KR 20230027890 A KR20230027890 A KR 20230027890A KR 1020210110166 A KR1020210110166 A KR 1020210110166A KR 20210110166 A KR20210110166 A KR 20210110166A KR 20230027890 A KR20230027890 A KR 20230027890A
Authority
KR
South Korea
Prior art keywords
evm
stack
bytecode
opcode
converting
Prior art date
Application number
KR1020210110166A
Other languages
Korean (ko)
Inventor
정승일
류찬호
조호묵
Original Assignee
한국과학기술원
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 한국과학기술원 filed Critical 한국과학기술원
Priority to KR1020210110166A priority Critical patent/KR20230027890A/en
Publication of KR20230027890A publication Critical patent/KR20230027890A/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

An ethereum virtual machine (EVM) bytecode analysis method and an EVM bytecode analysis tool are provided. The EVM bytecode analysis method includes the steps of: receiving an EVM bytecode; extracting an opcode corresponding to the EVM bytecode; and converting the opcode into an intermediate language, wherein converting into the intermediate language includes allocating a stack pointer capable of referring to a stack included in the opcode.

Description

EVM 바이트코드 분석 방법 및 EVM 바이트코드 분석 도구{ETHEREUM VIRTUAL MACHINE BYTECODE ANALYSIS METHOD AND EVM BYTECODE ANALYSIS TOOL}EVM bytecode analysis method and EVM bytecode analysis tool {ETHEREUM VIRTUAL MACHINE BYTECODE ANALYSIS METHOD AND EVM BYTECODE ANALYSIS TOOL}

본 발명은 EVM(Ethereum Bytecode Machine) 바이트코드 분석 방법 및 분석 도구에 관한 것으로, 더욱 구체적으로는 스택 기반 머신의 EVM에서 사용되는 바이트코드를 효율적으로 분석하기 위한 EVM 바이트코드 분석 방법 및 분석 도구에 관한 것이다.The present invention relates to an EVM (Ethereum Bytecode Machine) bytecode analysis method and analysis tool, and more particularly, to an EVM bytecode analysis method and analysis tool for efficiently analyzing bytecode used in an EVM of a stack-based machine. will be.

블록체인은 2008년 사토시 나카모토의 Bitcoin: A Peer-to-Peer Electronic Cash System에서 블록과 블록을 연결하는 방법에서 유래하였다. 블록체인은 다수의 네트워크 노드로 구성된 분산 네트워크 상에서 해쉬링크로 묶인 데이터를 공유하는 분산 데이터베이스를 총칭한다.Blockchain originated from Satoshi Nakamoto's Bitcoin: A Peer-to-Peer Electronic Cash System in 2008, where blocks are connected to each other. Blockchain is a generic term for a distributed database that shares data bound by hash links on a distributed network composed of multiple network nodes.

블록체인 플랫폼 가운데 이더(Ether, ETH)라는 암호화폐를 사용하는 이더리움(Ethereum)은 스크립트 언어인 솔리디티(Solidity)를 이용하여 프로그래밍 가능한 스마트 컨트랙트(Smart Contract)와 분산 애플리케이션(decentralized application, dApp)을 지원할 수 있도록 이더리움 가상 머신(Ethereum Virtual Machine, EVM)을 제공한다.Among blockchain platforms, Ethereum, which uses a cryptocurrency called Ether (ETH), is a programmable smart contract and decentralized application (dApp) using the script language Solidity. Ethereum Virtual Machine (EVM) is provided to support

이더리움 플랫폼이 프로그래밍 가능한 EVM 환경을 지원하는 것은 그에 따른 보안 취약점 또한 내포할 수 있음을 의미하며, EVM 환경에서 실행되는 EVM 바이트코드의 분석의 중요성이 강조된다.The fact that the Ethereum platform supports the programmable EVM environment means that it can also contain security vulnerabilities, and the importance of analyzing the EVM bytecode running in the EVM environment is emphasized.

본 발명이 해결하고자 하는 기술적 과제는 보안 취약점 분석을 위한 EVM 바이트코드의 분석 효율성을 증가시키기 위해 스택 기반의 EVM을 스택 포인터를 지원하도록 중간 언어로 변환할 수 있는 EVM 바이트코드 분석 방법 및 분석 도구를 제공하는 것이다.The technical problem to be solved by the present invention is to provide an EVM bytecode analysis method and analysis tool capable of converting a stack-based EVM into an intermediate language to support a stack pointer in order to increase the analysis efficiency of EVM bytecode for security vulnerability analysis. is to provide

본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.The technical problems of the present invention are not limited to the technical problems mentioned above, and other technical problems not mentioned will be clearly understood by those skilled in the art from the following description.

상술한 기술적 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 EVM 바이트코드 분석 방법은, EVM(Ethereum Virtual Machine) 바이트코드를 입력받는 단계, 상기 EVM 바이토코드에 대응하는 오피코드(Opcode)를 추출하는 단계, 상기 오피코드를 중간언어로 변환하는 단계를 포함하되, 상기 중간언어로 변환하는 단계는, 상기 오피코드에 포함된 스택을 참조할 수 있는 스택 포인터를 할당하는 것을 포함한다.An EVM bytecode analysis method according to some embodiments of the present invention for solving the above-described technical problem includes receiving EVM (Ethereum Virtual Machine) bytecode, and generating an opcode corresponding to the EVM bytecode. Extracting and converting the opcode into an intermediate language, wherein the converting into the intermediate language includes allocating a stack pointer that can refer to a stack included in the opcode.

본 발명의 몇몇 실시예에서, 상기 스택 포인터를 할당하는 것은, 상기 스택 포인터를 저장하는 가상의 레지스터를 할당하는 것을 포함할 수 있다.In some embodiments of the present invention, allocating the stack pointer may include allocating a virtual register storing the stack pointer.

본 발명의 몇몇 실시예에서, 상기 중간언어로 변환하는 단계는, 상기 오피코드에 포함된 PUSH에 대해 상기 스택에 데이터를 저장하고 상기 스택 포인터를 증가시키도록 변환하는 것을 포함할 수 있다.In some embodiments of the present invention, the converting to the intermediate language may include converting the PUSH included in the opcode to store data in the stack and increment the stack pointer.

본 발명의 몇몇 실시예에서, 상기 중간언어로 변환하는 단계는, 상기 오피코드에 포함된 POP에 대해 상기 스택으로부터 데이터를 불러오고 상기 스택 포인터를 감소시키도록 변환하는 것을 포함할 수 있다.In some embodiments of the present invention, the converting into the intermediate language may include converting the POP included in the opcode to fetch data from the stack and decrement the stack pointer.

상술한 기술적 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 EVM 바이트코드 분석 도구는, EVM 바이트코드를 입력받는 코드 입력부, 상기 EVM 바이트코드에 대응하는 오피코드를 추출하는 역어셈블러부, 상기 오피코드를 중간언어로 변환하는 코드 변환부를 포함하되, 상기 코드 변환부는, 상기 중간언어에 오피코드에 포함된 스택을 참조할 수 있는 스택 포인터를 할당한다.An EVM bytecode analysis tool according to some embodiments of the present invention for solving the above technical problems includes a code input unit for receiving EVM bytecodes, a disassembler unit for extracting opcodes corresponding to the EVM bytecodes, and the opcodes. A code conversion unit for converting code into an intermediate language, wherein the code conversion unit allocates a stack pointer capable of referring to a stack included in an opcode to the intermediate language.

본 발명의 몇몇 실시예에서, 상기 코드 변환부는, 상기 중간언어에 스택 포인터를 저장하는 가상의 레지스터를 할당할 수 있다.In some embodiments of the present invention, the code converter may allocate a virtual register for storing a stack pointer to the intermediate language.

본 발명의 몇몇 실시예에서, 상기 코드 변환부는, 상기 오피코드에 포함된 PUSH에 대해 상기 스택에 데이터를 저장하고 상기 스택 포인터를 증가시키도록 변환할 수 있다.In some embodiments of the present invention, the code conversion unit may store data in the stack and increment the stack pointer for PUSH included in the opcode.

본 발명의 몇몇 실시예에서, 상기 코드 변환부는, 상기 오피코드에 포함된 POP에 대해 상기 스택으로부터 데이터를 불러오고 상기 스택 포인터를 감소시키도록 변환할 수 있다.In some embodiments of the present invention, the code conversion unit may read data from the stack for the POP included in the opcode and convert the data to decrease the stack pointer.

기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.Details of other embodiments are included in the detailed description and drawings.

본 발명의 실시예에 따른 EVM 바이트코드 분석 방법 및 분석 도구는 오피코드를 변환하여 최적화된 중간 언어를 생성함으로써 스택에 값을 넣거나(PUSH) 빼는(POP) 연산의 효율성을 증가시킬 수 있다. 본 발명은 특히 EVM 바이트코드의 오류 및 보안 취약점을 분석하기 위한 분석 과정에서 제어 흐름 및 데이터 흐름의 연산 시간 및 메모리 사용량을 감소시킬 수 있다.The EVM bytecode analysis method and analysis tool according to an embodiment of the present invention can increase the efficiency of an operation to insert (PUSH) or subtract (POP) a value from a stack by converting an opcode to generate an optimized intermediate language. In particular, the present invention can reduce the computation time and memory usage of control flow and data flow in the analysis process for analyzing EVM bytecode errors and security vulnerabilities.

본 발명의 효과들은 이상에서 언급한 효과들로 제한되지 않으며, 언급되지 않은 또 다른 효과들은 청구범위의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.The effects of the present invention are not limited to the effects mentioned above, and other effects not mentioned will be clearly understood by those skilled in the art from the description of the claims.

도 1은 이더리움 가상 머신(EVM)의 구성도이다.
도 2는 본 발명의 몇몇 실시예에 따른 EVM 바이트코드 분석 도구를 설명하는 블록도이다.
도 3a 및 3b는 본 발명의 EVM 바이트코드 분석 도구의 동작을 설명하기 위한 도면이다.
도 4a 및 4b는 본 발명의 EVM 바이트코드 분석 도구의 동작을 설명하기 위한 도면이다.
도 5는 본 발명의 몇몇 실시예에 따른 EVM 바이트코드 분석 방법을 설명하기 위한 순서도이다.
1 is a configuration diagram of an Ethereum Virtual Machine (EVM).
2 is a block diagram illustrating an EVM bytecode analysis tool according to some embodiments of the present invention.
3A and 3B are diagrams for explaining the operation of the EVM bytecode analysis tool of the present invention.
4A and 4B are diagrams for explaining the operation of the EVM bytecode analysis tool of the present invention.
5 is a flowchart illustrating an EVM bytecode analysis method according to some embodiments of the present invention.

본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.Advantages and features of the present invention, and methods of achieving them, will become clear with reference to the detailed description of the following embodiments taken in conjunction with the accompanying drawings. However, the present invention is not limited to the embodiments disclosed below, but will be implemented in various different forms, only these embodiments make the disclosure of the present invention complete, and common knowledge in the art to which the present invention belongs. It is provided to fully inform the holder of the scope of the invention, and the present invention is only defined by the scope of the claims. Like reference numbers designate like elements throughout the specification.

하나의 구성 요소가 다른 구성 요소와 "연결된(connected to)" 또는 "커플링된(coupled to)" 이라고 지칭되는 것은, 다른 구성 요소와 직접 연결 또는 커플링된 경우 또는 중간에 다른 구성 요소를 개재한 경우를 모두 포함한다. 반면, 하나의 구성 요소가 다른 구성 요소와 "직접 연결된(directly connected to)" 또는 "직접 커플링된(directly coupled to)"으로 지칭되는 것은 중간에 다른 구성 요소를 개재하지 않은 것을 나타낸다. "및/또는"은 언급된 아이템들의 각각 및 하나 이상의 모든 조합을 포함한다. A component is said to be "connected to" or "coupled to" another component when it is directly connected or coupled to the other component or through another component in between. include all cases. On the other hand, when one component is referred to as “directly connected to” or “directly coupled to” another component, it indicates that another component is not intervened. “And/or” includes each and every combination of one or more of the recited items.

본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 및/또는 "포함하는(comprising)"은 언급된 구성 요소, 단계, 동작 및/또는 소자는 하나 이상의 다른 구성 요소, 단계, 동작 및/또는 소자의 존재 또는 추가를 배제하지 않는다.Terminology used herein is for describing the embodiments and is not intended to limit the present invention. In this specification, singular forms also include plural forms unless specifically stated otherwise in a phrase. As used herein, "comprises" and/or "comprising" means that a stated component, step, operation, and/or element is present in the presence of one or more other components, steps, operations, and/or elements. or do not rule out additions.

비록 제1, 제2 등이 다양한 구성 요소들을 서술하기 위해서 사용되나, 이들 구성 요소들은 이들 용어에 의해 제한되지 않음은 물론이다. 이들 용어들은 단지 하나의 구성 요소를 다른 구성 요소와 구별하기 위하여 사용하는 것이다. 따라서, 이하에서 언급되는 제1 구성 요소는 본 발명의 기술적 사상 내에서 제2 구성 요소 일 수도 있음은 물론이다.Although first, second, etc. are used to describe various constituent elements, these constituent elements are not limited by these terms, of course. These terms are only used to distinguish one component from another. Accordingly, it goes without saying that the first component mentioned below may also be the second component within the technical spirit of the present invention.

다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있을 것이다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.Unless otherwise defined, all terms (including technical and scientific terms) used in this specification may be used in a meaning commonly understood by those of ordinary skill in the art to which the present invention belongs. In addition, terms defined in commonly used dictionaries are not interpreted ideally or excessively unless explicitly specifically defined.

도 1은 이더리움 가상 머신(EVM)의 구성도이다.1 is a configuration diagram of an Ethereum Virtual Machine (EVM).

도 1을 참조하면, 본 발명의 몇몇 실시예에 따른 EVM 바이트코드의 분석은 이더리움 플랫폼 상에서 스마트 컨트랙트 배포 및 실행을 처리하기 위한 이더리움 가상 머신(Ethereum Virtual Machine, EVM) 상에서 실행되는 EVM 바이트코드를 이용한다.Referring to FIG. 1, the analysis of EVM bytecode according to some embodiments of the present invention is the EVM bytecode executed on the Ethereum Virtual Machine (EVM) for handling smart contract deployment and execution on the Ethereum platform. Use

이더리움 가상 머신은 명령어의 실행 위치를 저장하는 프로그램 카운터(Program Counter, PC), 명령어 실행 시마다 발생하는 비용을 저장하기 위한 가스(Gas), 및 데이터를 읽고 쓰고 저장하기 위한 스택과 메모리로 구성될 수 있다.The Ethereum virtual machine consists of a program counter (PC) that stores the execution location of instructions, gas to store the cost incurred each time an instruction is executed, and a stack and memory to read, write, and store data. can

이더리움 가상 머신 상에서 실행되는 스마트 컨트랙트를 작성하기 위한 프로그램 언어인 솔리디티(solidity)로 작성된 프로그램은 컴파일됨으로써 EVM 바이트코드가 생성된다. 스마트 컨트랙트는 EVM 바이트코드의 형태로 이더리움 네트워크로 배포될 수 있다.A program written in Solidity, a programming language for writing smart contracts running on the Ethereum virtual machine, is compiled to generate EVM bytecode. Smart contracts can be deployed on the Ethereum network in the form of EVM bytecode.

본 발명의 실시예에 따른 EVM 바이트코드 분석 방법 및 분석 도구는 이러한 EVM 바이트코드 상에 보안 취약점이나 오류가 있는지 여부의 분석을 돕기 위해 EVM 바이트코드를 중간언어로 변환하는 과정에서 분석의 효율성을 높이기 위해 최적화된 중간언어 변환을 제공할 수 있다. 이를 이하의 도면을 이용하여 더욱 자세하게 설명한다.The EVM bytecode analysis method and analysis tool according to an embodiment of the present invention increases the efficiency of analysis in the process of converting EVM bytecode into an intermediate language to help analyze whether there are security vulnerabilities or errors in the EVM bytecode. It is possible to provide an intermediate language transformation optimized for This will be described in more detail using the following drawings.

도 2는 본 발명의 몇몇 실시예에 따른 EVM 바이트코드 분석 도구를 설명하는 블록도이다.2 is a block diagram illustrating an EVM bytecode analysis tool according to some embodiments of the present invention.

도 2를 참조하면, 본 발명의 몇몇 실시예에 따른 EVM 바이트코드 분석 도구(100)는 코드 입력부(110), 역어셈블러부(120) 및 코드 변환부(130)를 포함할 수 있다.Referring to FIG. 2 , the EVM bytecode analysis tool 100 according to some embodiments of the present invention may include a code input unit 110, a disassembler unit 120, and a code conversion unit 130.

EVM 바이트코드 분석 도구(100)는 솔리디티로 작성된 EVM 바이트코드를 제공받아 중간언어로 변환하는 일련의 작업을 실행할 수 있는 컴퓨팅 장치를 포함할 수 있다. 이러한 컴퓨팅 장치는 예를 들어 적어도 하나의 CPU(Central Processing Unit), 및 이들이 접근하여 데이터를 읽고 쓸 수 있는 메모리의 집합을 포함하는 모듈일 수 있다. EVM 바이트코드 분석 도구(100)는 예를 들어 개인용 컴퓨터(PC), 서버 컴퓨터, 워크 스테이션, 랩탑 컴퓨터 등의 다양한 컴퓨터 시스템을 포함할 수 있다.The EVM bytecode analysis tool 100 may include a computing device capable of executing a series of operations of receiving EVM bytecode written in Solidity and converting it into an intermediate language. Such a computing device may be, for example, a module comprising at least one Central Processing Unit (CPU) and a set of memories to which they access to read and write data. The EVM bytecode analysis tool 100 may include, for example, various computer systems such as a personal computer (PC), a server computer, a workstation, and a laptop computer.

코드 입력부(110)는 EVM 바이트코드를 입력받을 수 있다. 상술한 것과 같이 EVM 바이트코드는 이더리움 플랫폼 상의 이더리움 가상 머신에서 실행되기 위해 이진 표현법으로 구성된 코드로, 솔리디티 언어로 작성된 프로그램을 컴파일함으로써 얻어질 수 있다. 몇몇 실시예에서, 코드 입력부(110)는 솔리디티로 작성된 프로그램을 컴파일하는 기능을 보유하여 EVM 바이트코드를 얻을 수도 있다.The code input unit 110 may receive EVM bytecode. As described above, the EVM bytecode is a binary expression code to be executed in the Ethereum virtual machine on the Ethereum platform, and can be obtained by compiling a program written in the Solidity language. In some embodiments, the code input unit 110 may obtain EVM bytecode by retaining a function of compiling a program written in Solidity.

역어셈블러부(120)는 코드 입력부(110)로부터 EVM 바이트코드를 제공받아 EVM 바이트코드에 대응하는 오피코드(opcode)를 추출할 수 있다. 예를 들어 EVM 바이트코드가 '60 55'인 경우, 코드 입력부(110)는 이로부터 스택에 0x55를 저장하는 'push1 0x55'를 추출할 수 있다.The disassembler unit 120 may receive the EVM bytecode from the code input unit 110 and extract an opcode corresponding to the EVM bytecode. For example, if the EVM bytecode is '60 55', the code input unit 110 may extract 'push1 0x55' storing 0x55 in the stack.

역어셈블러부(120)가 EVM 바이트코드로를 역어셈블함으로써 도 1에 도시된 스택, 메모리를 이용하며 가스 사용량을 기록하는 다수의 오피코드를 추출할 수 있다.The disassembler unit 120 disassembles the EVM bytecode to extract a plurality of opcodes that use the stack and memory shown in FIG. 1 and record gas usage.

코드 변환부(130)는 역어셈블러부(120)가 추출한 오피코드를 변환하여 중간 언어를 생성할 수 있다. 저수준의 오피코드를 변환하여 명시적으로 표현이 가능한 언어로 변환하는 과정이 중간 언어 변환 또는 리프팅(lifting)이다. The code conversion unit 130 may generate an intermediate language by converting the opcode extracted by the disassembler unit 120 . The process of transforming low-level opcodes into a language that can be explicitly expressed is intermediate language conversion or lifting.

코드 변환부(130)는 오피코드를 변환하여 중간 언어를 생성할 때 이후 중간 언어의 효율적인 분석을 위해 최적화된 중간 언어를 생성할 수 있다. 상기 중간 언어의 최적화는 오피코드에 포함된 스택을 참조할 수 있는 스택 포인터를 할당하는 것을 포함할 수 있다.When generating an intermediate language by converting the opcode, the code conversion unit 130 may generate an optimized intermediate language for efficient analysis of the intermediate language thereafter. Optimization of the intermediate language may include allocating a stack pointer that can refer to a stack included in the opcode.

EVM 가상 머신은 오피코드를 실행한 결과를 저장하기 위한 스택을 이용하는 스택 기반 머신으로 구성된다. 스택 기반 머신은 스택에 순차적으로 데이터를 저장하고 이를 순차적으로 꺼내어 쓰는 방식으로 동작함으로써 레지스터 기반 머신에 비하여 비교적 단순하게 구현될 수 있다.The EVM virtual machine consists of a stack-based machine that uses a stack to store the results of executing opcodes. A stack-based machine can be implemented relatively simply compared to a register-based machine by operating in a manner of sequentially storing data in a stack and sequentially taking out and writing data.

도 3a 및 3b는 본 발명의 EVM 바이트코드 분석 도구의 동작을 설명하기 위한 도면이다. 3A and 3B are diagrams for explaining the operation of the EVM bytecode analysis tool of the present invention.

먼저 도 3a를 참조하면, 스택 기반 머신에서 a+b의 연산을 수행하기 위한 과정이 도시된다. 이 과정은 스택에 a와 b를 PUSH 명령어를 통해 순차적으로 저장한 후, 다시 POP 명령어를 통해 a와 b를 순차적으로 불러와 ADD 명령어를 통해 합산을 수행하고, 그 결과를 PUSH 명령어를 통해 스택에 저장하도록 진행된다. 이와 같이 스택 기반 머신에서는 a+b의 연산을 위해 6번의 명령어 사이클이 필요한 것을 알 수 있다. 솔리디티로부터 컴파일되어 생성된 EVM 바이트코드는 이와 같이 이더리움 가상 머신이 EVM 바이트코드를 실행할 때 스택 기반 머신으로 동작하도록 구성된다.Referring first to FIG. 3A , a process for performing an operation of a+b in a stack-based machine is shown. In this process, a and b are sequentially stored on the stack through the PUSH command, then a and b are sequentially loaded through the POP command, summed through the ADD command, and the result is placed on the stack through the PUSH command. proceed to save. In this way, in a stack-based machine, it can be seen that 6 instruction cycles are required for the operation of a+b. The EVM bytecode compiled and generated from Solidity is configured to operate as a stack-based machine when the Ethereum virtual machine executes the EVM bytecode.

도 3b를 참조하면, 스택의 주소를 가리키는 스택 포인터를 이용하는 경우 a+b의 연산을 수행하기 위한 과정이 도시된다. 이 과정은 스택 포인터가 가리키는 스택의 공간에 a와 b를 저장한 후, 스택 포인터를 이용하여 불러들인 a와 b를 합산하여 다시 스택에 저장하도록 진행된다. 이와 같이 스택 포인터를 이용하는 경우 a+b의 연산을 위해 3번의 명령어 사이클이 필요한 것을 알 수 있다.Referring to FIG. 3B , a process for performing an operation of a+b in the case of using a stack pointer pointing to a stack address is shown. This process proceeds to store a and b in the stack space pointed to by the stack pointer, add up a and b loaded using the stack pointer, and store them again in the stack. In this way, when using the stack pointer, it can be seen that 3 instruction cycles are required for the operation of a+b.

EVM 바이트코드의 분석 효율성을 위해, 코드 변환부(130)는 오피코드를 중간 언어로 변환할 때 스택 포인터를 할당하여 명령어 실행의 효율성을 높이도록 할 수 있다.For efficiency of analysis of the EVM bytecode, the code conversion unit 130 may allocate a stack pointer when converting an opcode into an intermediate language to increase instruction execution efficiency.

즉, 코드 변환부(130)는 스택 포인터를 저장하는 가상의 레지스터를 할당하고, 변환 대상인 오피코드 가운데 스택에 데이터를 저장하는 PUSH 또는 스택으로부터 데이터를 불러오는 POP 명령어가 존재하는 경우 스택 포인터를 증가시키거나 감소시키도록 중간 언어의 변환을 수행할 수 있다.That is, the code conversion unit 130 allocates a virtual register for storing the stack pointer, and increases the stack pointer when there is a PUSH command for storing data in the stack or a POP command for loading data from the stack among the opcodes to be converted. Transformation of the intermediate language can be performed to reduce

도 4a 및 4b는 본 발명의 EVM 바이트코드 분석 도구의 동작을 설명하기 위한 도면이다.4A and 4B are diagrams for explaining the operation of the EVM bytecode analysis tool of the present invention.

도 4a 및 4b를 참조하면, EVM 바이트코드를 역어셈블하여 추출된 일련의 오피코드가 도 4a에 도시된다. 코드 변환부(130)는 일련의 오피코드를 변환하여 도 4b와 같은 중간 언어를 생성할 수 있다.Referring to FIGS. 4A and 4B, a series of opcodes extracted by disassembling EVM bytecodes are shown in FIG. 4A. The code conversion unit 130 may generate an intermediate language as shown in FIG. 4B by converting a series of opcodes.

도 4b에는 도 4a에 표시된 3개의 push1 명령어를 중간 언어로 변환한 예시가 도시된다. 코드 변환부(130)는 스택에 0x55를 저장하는 'push1 0x55' 명령에 대하여, 스택 포인터(SP)와, 스택 포인터에 의해 참조되는 스택에 저장되는 데이터([SP])를 할당하여 변환된 중간 언어를 생성할 수 있다. PUSH를 통해 스택에 데이터를 저장한 후 스택은 0x20만큼 증가하여 스택의 다음 저장 공간을 가리키도록 설정된다.FIG. 4B shows an example of converting the three push1 commands shown in FIG. 4A into an intermediate language. The code conversion unit 130 assigns a stack pointer (SP) and data ([SP]) stored in the stack referred to by the stack pointer to the 'push1 0x55' command that stores 0x55 in the stack, thereby converting the intermediate language can be created. After saving data to the stack via PUSH, the stack is incremented by 0x20 and set to point to the next storage space on the stack.

이어서, 코드 변환부(130)는 스택에 0x23과 0xb를 차례로 저장하는 'push1 0x23' 및 'push1 0xb'를 변환한 중간 언어를 생성한다. 상기 과정에서 코드 변환부(130)는 가상의 레지스터에 스택 포인터를 저장하고, 오피코드에 PUSH라 포함되는 경우에 스택 포인터가 가리키는 스택의 저장 공간에 데이터를 저장한다.Subsequently, the code conversion unit 130 generates an intermediate language converted from 'push1 0x23' and 'push1 0xb', which sequentially stores 0x23 and 0xb in the stack. In the above process, the code conversion unit 130 stores the stack pointer in a virtual register, and stores data in the storage space of the stack indicated by the stack pointer when the opcode includes PUSH.

코드 변환부(130)는 PUSH 또는 POP 명령어 이외에 다른 명령어에 대해서도 스택 포인터를 적용하도록 변환된 중간 언어를 생성할 수 있다. 도 4c 내지 4e를 참조하면, 코드 변환부(130)에 의해 dup3, add, and를 변환한 중간 언어를 생성하는 예가 도시된다.The code conversion unit 130 may generate an intermediate language converted to apply the stack pointer to commands other than the PUSH or POP commands. Referring to FIGS. 4C to 4E , an example of generating an intermediate language by converting dup3, add, and and by the code conversion unit 130 is shown.

dup3의 경우 스택에 저장되어 있던 값을 다시 복사하여 다시 스택에 쓰기 위한 명령어로, 코드 변환부(130)는 현재 스택 포인터(SP)에서 0x40만큼 감소된 주소에 있는 데이터를 불러와 현재 스택 포인터가 가리키는 스택([SP])에 저장하는 방식으로 변환된 중간 언어를 생성할 수 있다.In the case of dup3, it is a command for copying the value stored in the stack and writing it to the stack again. The code conversion unit 130 reads the data at the address reduced by 0x40 from the current stack pointer (SP), so that the current stack pointer is Converted intermediate language can be created by storing it in the pointed stack ([SP]).

add 및 and의 경우 스택에 차례로 저장되어 있던 값을 불러와 연산한 후 다시 스택에 쓰기 위한 명령어로, 코드 변환부(130)는 스택에 차례로 저장된 값에 대하여 스택 포인터(SP)를 0x20씩 감소시켜가며 불러오고, 합산 또는 비트 연산된 값을 스택에 저장하는 방식으로 변환된 중간 언어를 생성할 수 있다.In the case of add and and, these are commands for calling values stored in the stack in order, performing the operation, and then writing them back to the stack. It is possible to create an intermediate language that is converted in a way of loading it and storing the summed or bit-operated value on the stack.

도 5는 본 발명의 몇몇 실시예에 따른 EVM 바이트코드 분석 방법을 설명하기 위한 순서도이다.5 is a flowchart illustrating an EVM bytecode analysis method according to some embodiments of the present invention.

도 5를 참조하면, 본 발명의 실시예에 따른 EVM 바이트코드 분석 방법은 EVM 바이트코드를 입력받는 단계(S110), EVM 바이트코드에 대응하는 오피코드를 추출하는 단계(S120) 및 오피코드를 중간언어로 변환하는 단계(S130)를 포함한다.Referring to FIG. 5 , the EVM bytecode analysis method according to an embodiment of the present invention comprises receiving an EVM bytecode (S110), extracting an opcode corresponding to the EVM bytecode (S120), and converting the opcode into an intermediate step. and converting into a language (S130).

코드 입력부(110)는 EVM 바이트코드를 입력받을 수 있다(S110). 코드 입력부(110)는 외부 구성 요소로부터 솔리디티 코드를 컴파일하여 생성된 EVM 바이트코드를 입력받거나, 솔리디티 코드를 제공받고 이를 컴파일하여 EVM 바이트코드를 생성할 수 있다.The code input unit 110 may receive EVM bytecode (S110). The code input unit 110 may receive EVM bytecode generated by compiling Solidity code from an external component or generate EVM bytecode by receiving Solidity code and compiling it.

역어셈블러부(120)가 EVM 바이트코드를 역어셈블링함으로써 EVM 바이트코드에 대응하는 오피코드를 추출할 수 있다(S120). 역어셈블러부(120)는 '60 55'와 같이 이진 형식으로 기록된 바이트코드에 대응하는 오피코드를 추출할 수 있다.The disassembler unit 120 may extract an opcode corresponding to the EVM bytecode by disassembling the EVM bytecode (S120). The disassembler unit 120 may extract an opcode corresponding to a bytecode recorded in a binary format, such as '60 55'.

이어서, 코드 변환부(130)가 오피코드를 변환하여 중간 언어를 생성할 수 있다(S130). 중간 언어의 생성 과정에서, 코드 변환부(130)는 오피코드에 포함된 스택을 참조할 수 있는 스택 포인터를 저장하는 가상의 레지스터를 할당할 수 있다.Subsequently, the code conversion unit 130 may generate an intermediate language by converting the opcode (S130). In the process of generating the intermediate language, the code conversion unit 130 may allocate a virtual register storing a stack pointer that can refer to a stack included in an opcode.

코드 변환부(130)는 오피코드에 포함된 PUSH에 대해 스택에 데이터를 저장하고 가상의 레지스터에 저장된 스택 포인터를 증가시키도록 변환할 수 있다. 또한 코드 변환부(130)는 오피코드에 포함된 POP에 대해 스택으로부터 데이터를 불러오고 가상의 레지스터에 저장된 스택 포인터를 감소시키도록 변환할 수 있다. 이와 같은 코드 변환부(130)에 의한 동작의 예시가 도 4a 및 4b를 이용하여 설명되었다.The code conversion unit 130 may convert the PUSH included in the opcode to store data in a stack and increase a stack pointer stored in a virtual register. Also, the code conversion unit 130 may read data from the stack for the POP included in the opcode and decrement the stack pointer stored in the virtual register. An example of an operation by the code conversion unit 130 has been described using FIGS. 4A and 4B.

마찬가지로, 코드 변환부(130)는 오피코드에 포함된 다양한 명령어에 대해 스택 포인터를 증가 또는 감소시켜 스택 포인터에 의해 참조되는 스택을 액세스할 수 있도록 오피코드를 변환하는 예시가 도 4c 내지 4e를 이용하여 설명되었다.Similarly, the code conversion unit 130 increases or decreases the stack pointer for various instructions included in the opcode to access the stack referenced by the stack pointer, and converts the opcode using FIGS. 4C to 4E. was explained.

본 발명의 실시예에 따른 EVM 바이트코드의 분석 방법 및 분석 도구는 상술한 방법을 이용하여 최적화된 중간 언어를 생성함으로써 스택에 값을 넣거나(PUSH) 빼는(POP) 연산의 효율성을 증가시킬 수 있다. 본 발명은 특히 EVM 바이트코드의 오류 및 보안 취약점을 분석하기 위한 분석 과정에서 제어 흐름 및 데이터 흐름의 연산 시간 및 메모리 사용량을 감소시킬 수 있다.The EVM bytecode analysis method and analysis tool according to an embodiment of the present invention can increase the efficiency of an operation to insert (PUSH) or subtract (POP) a value from a stack by generating an optimized intermediate language using the above-described method. . In particular, the present invention can reduce the computation time and memory usage of control flow and data flow in the analysis process for analyzing EVM bytecode errors and security vulnerabilities.

본 발명은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 장치에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 하드디스크, ROM, RAM, CD-ROM, 하드 디스크, 자기 테이프, 플로피 디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다.The present invention can also be implemented as computer readable codes on a computer readable recording medium. A computer-readable recording medium includes all types of recording devices in which data that can be read by a computer device is stored. Examples of computer-readable recording media include hard disks, ROMs, RAMs, CD-ROMs, hard disks, magnetic tapes, floppy disks, optical data storage devices, etc., and carrier waves (for example, transmission over the Internet). It also includes what is implemented in the form of.

이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.Although the embodiments of the present invention have been described with reference to the accompanying drawings, those skilled in the art can realize that the present invention can be implemented in other specific forms without changing the technical spirit or essential features. you will be able to understand Therefore, the embodiments described above should be understood as illustrative in all respects and not limiting.

100: EVM 바이트코드 분석 도구 110: 코드 입력부
120: 역어셈블러부 130: 코드 변환부
100: EVM bytecode analysis tool 110: code input unit
120: disassembler unit 130: code conversion unit

Claims (9)

EVM(Ethereum Virtual Machine) 바이트코드를 입력받는 단계;
상기 EVM 바이토코드에 대응하는 오피코드(Opcode)를 추출하는 단계;
상기 오피코드를 중간언어로 변환하는 단계를 포함하되,
상기 중간언어로 변환하는 단계는,
상기 오피코드에 포함된 스택을 참조할 수 있는 스택 포인터를 할당하는 것을 포함하는,
EVM 바이트코드 분석 방법.
Receiving EVM (Ethereum Virtual Machine) bytecode;
extracting an opcode corresponding to the EVM bytecode;
converting the opcode into an intermediate language;
The step of converting to the intermediate language,
Including allocating a stack pointer that can refer to a stack included in the opcode.
EVM bytecode analysis method.
제 1 항에 있어서,
상기 스택 포인터를 할당하는 것은,
상기 스택 포인터를 저장하는 가상의 레지스터를 할당하는 것을 포함하는,
EVM 바이트코드 분석 방법.
According to claim 1,
Allocating the stack pointer,
Including allocating a virtual register for storing the stack pointer,
EVM bytecode analysis method.
제 1항에 있어서,
상기 중간언어로 변환하는 단계는,
상기 오피코드에 포함된 PUSH에 대해 상기 스택에 데이터를 저장하고 상기 스택 포인터를 증가시키도록 변환하는 것을 포함하는,
EVM 바이트코드 분석 방법.
According to claim 1,
The step of converting to the intermediate language,
Converting to store data in the stack and increment the stack pointer for the PUSH included in the opcode.
EVM bytecode analysis method.
제 1항에 있어서,
상기 중간언어로 변환하는 단계는,
상기 오피코드에 포함된 POP에 대해 상기 스택으로부터 데이터를 불러오고 상기 스택 포인터를 감소시키도록 변환하는 것을 포함하는,
EVM 바이트코드 분석 방법.
According to claim 1,
The step of converting to the intermediate language,
Including fetching data from the stack for the POP included in the opcode and converting to decrement the stack pointer.
EVM bytecode analysis method.
컴퓨터를 이용하여 제 1항 내지 제 4항의 방법 중 어느 한 항의 방법을 실행시키기 위한 프로그램을 기록한 상기 컴퓨터로 판독 가능한 기록매체에 저장된 컴퓨터 프로그램.A computer program stored in the computer-readable recording medium in which a program for executing any one of the methods of claims 1 to 4 using a computer is recorded. EVM 바이트코드를 입력받는 코드 입력부;
상기 EVM 바이트코드에 대응하는 오피코드를 추출하는 역어셈블러부;
상기 오피코드를 중간언어로 변환하는 코드 변환부를 포함하되,
상기 코드 변환부는,
상기 중간언어에 오피코드에 포함된 스택을 참조할 수 있는 스택 포인터를 할당하는,
EVM 바이트코드 분석 도구.
a code input unit for receiving EVM bytecode;
a disassembler unit extracting an opcode corresponding to the EVM bytecode;
A code conversion unit for converting the opcode into an intermediate language;
The code conversion unit,
Allocating a stack pointer that can refer to a stack included in an opcode to the intermediate language,
EVM bytecode analysis tool.
제 6항에 있어서,
상기 코드 변환부는,
상기 중간언어에 스택 포인터를 저장하는 가상의 레지스터를 할당하는,
EVM 바이트코드 분석 도구.
According to claim 6,
The code conversion unit,
Allocating a virtual register for storing a stack pointer in the intermediate language,
EVM bytecode analysis tool.
제 6항에 있어서,
상기 코드 변환부는,
상기 오피코드에 포함된 PUSH에 대해 상기 스택에 데이터를 저장하고 상기 스택 포인터를 증가시키도록 변환하는,
EVM 바이트코드 분석 방법.
According to claim 6,
The code conversion unit,
converting to store data in the stack and increment the stack pointer for a PUSH included in the opcode;
EVM bytecode analysis method.
제 6항에 있어서,
상기 코드 변환부는,
상기 오피코드에 포함된 POP에 대해 상기 스택으로부터 데이터를 불러오고 상기 스택 포인터를 감소시키도록 변환하는,
EVM 바이트코드 분석 방법.
According to claim 6,
The code conversion unit,
converting to fetch data from the stack and decrement the stack pointer for the POP included in the opcode;
EVM bytecode analysis method.
KR1020210110166A 2021-08-20 2021-08-20 Ethereum virtual machine bytecode analysis method and evm bytecode analysis tool KR20230027890A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020210110166A KR20230027890A (en) 2021-08-20 2021-08-20 Ethereum virtual machine bytecode analysis method and evm bytecode analysis tool

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210110166A KR20230027890A (en) 2021-08-20 2021-08-20 Ethereum virtual machine bytecode analysis method and evm bytecode analysis tool

Publications (1)

Publication Number Publication Date
KR20230027890A true KR20230027890A (en) 2023-02-28

Family

ID=85327012

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210110166A KR20230027890A (en) 2021-08-20 2021-08-20 Ethereum virtual machine bytecode analysis method and evm bytecode analysis tool

Country Status (1)

Country Link
KR (1) KR20230027890A (en)

Similar Documents

Publication Publication Date Title
CN110096338A (en) Intelligent contract executes method, apparatus, equipment and medium
EP1145120B1 (en) Generating compiled programs for interpretive runtime environments
US7406684B2 (en) Compiler, dynamic compiler, and replay compiler
CN109492017A (en) Business information inquiry processing method, system, computer equipment and storage medium
US8997066B2 (en) Emulating pointers
WO2017219526A1 (en) Method for using graphic file format and storage device
CN114816417B (en) Cross compiling method, device, computing equipment and storage medium
CN106033370B (en) Method and device for realizing 64-bit Java virtual machine
US8141042B2 (en) Extending portability of java code through the use of AOP
US6959430B2 (en) Specialized heaps for creation of objects in object-oriented environments
US6901591B1 (en) Frameworks for invoking methods in virtual machines
JP2009169864A (en) Compile method and compile program
JP2012014289A (en) Code conversion program, method and system
KR20230027890A (en) Ethereum virtual machine bytecode analysis method and evm bytecode analysis tool
CN116342283A (en) Trusted intelligent contract implementation method, device, equipment and readable storage medium
CN114168151B (en) Container-based program compiling method and device, electronic equipment and storage medium
KR101083271B1 (en) System and method for converting active x control
US20230325476A1 (en) Obfuscation device, obfuscation method, and obfuscation program
US20020174261A1 (en) Lightweight native method invocation interface for Java computing environments
JP7073813B2 (en) Control programs, control methods and information processing equipment
CN114020278A (en) Data processing method, device, equipment and storage medium
CN117289913B (en) Compiler source file processing method, electronic device and medium
US20230086877A1 (en) Method and apparatus for isolated execution of computer code with a native code portion
CN114579135B (en) Installation package generation method and device
CN118509159B (en) Intelligent contract acceleration execution method and device based on just-in-time compiling