CN109446754A - 智能合约中算法的保护方法、装置、设备及存储介质 - Google Patents
智能合约中算法的保护方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109446754A CN109446754A CN201811057926.9A CN201811057926A CN109446754A CN 109446754 A CN109446754 A CN 109446754A CN 201811057926 A CN201811057926 A CN 201811057926A CN 109446754 A CN109446754 A CN 109446754A
- Authority
- CN
- China
- Prior art keywords
- file
- binary data
- function
- intelligent contract
- algorithm
- 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.)
- Withdrawn
Links
- 238000004422 calculation algorithm Methods 0.000 title claims abstract description 92
- 238000000034 method Methods 0.000 title claims abstract description 34
- 230000006870 function Effects 0.000 claims abstract description 97
- 230000004048 modification Effects 0.000 claims description 16
- 238000012986 modification Methods 0.000 claims description 16
- 230000008569 process Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种智能合约中算法的保护方法,属于区块链技术领域。该方法包括以下步骤:采用go语言编写算法库源文件,并将所述算法库源文件通过编译和汇编后生成elf文件;复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;将所述二进制数据和所述加载器函数写入智能合约的源码中;将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。本发明利用go语言的编译特性,绕开了智能合约部署必须上传源码编译的环节,将核心代码独立出来,起到保护核心算法知识产权的作用。
Description
技术领域
本发明涉及区块链技术领域,涉及一种智能合约中算法的保护方法、装置、设备及存储介质。
背景技术
智能合约是一种数字形式的合约,也就是一段由计算机语言撰写并实现的可执行代码。
随着区块链应用的普及,智能合约的使用范围变得越来越广泛,很多智能合约中,都会用到第三方的算法库来完成某种既定的、具体的、业界公认而无可争议的功能;而这些第三方的算法库,却常常因为第三方公司对于自身知识产权的保护而不便于对外公开其源码。
以隐私保护方面被大量应用的零知识证明算法库为例,零知识证明算法库的功能是既定而确切的,即“我不需要亮出我的答案,但是我可以向外界证明我知道答案”。既便于对于这样业界非常确定的应用算法库,两家不同的公司实现的算法效率可能差距100倍以上甚至更大。
现在,有些公司为了保护自身知识产权,不对外公开源码,通过利用go语言v1.8的一些特性完成对源码的隐藏,但是在实际商业环境中,并不是所有的客户都安装了最新的go语言版本,特别是对于某些对自身***稳定性要求较高的客户,他们对于已经在运行的网络环境升级持有非常谨慎的态度,特别是对于涉及到整个网络环境运行基础的语言包的升级,更是慎之又慎。
发明内容
本发明要解决的技术问题是为了克服现有技术中无法在区块链中保护算法源码的问题,提出了一种智能合约中算法的保护方法、装置、设备及存储介质,利用go语言的编译特性,绕开了智能合约部署必须上传源码编译的环节,将核心代码独立出来,以实现核心算法知识产权的保护。
本发明是通过下述技术方案来解决上述技术问题:
一种智能合约中算法的保护方法,包括以下步骤:
采用go语言编写算法库源文件,并将所述算法库源文件通过编译和汇编后生成elf文件;
复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;
将所述二进制数据和所述加载器函数写入智能合约的源码中;
将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。
优选地,所述算法库为零知识证明算法库。
优选地,所述elf文件的生成过程为:采用go语言编写得到*.go文件,将所述*.go文件经过编译得到*.s文件,再将所述*.s文件经过汇编得到*.o文件;
所述*.go文件为算法库源文件,所述*.s文件为汇编源文件,所述*.o文件为elf文件。
优选地,所述部署包括:
通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;
通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。
优选地,所述二进制数据的修改包括以下步骤:
将所述智能合约的源码上传到docker中进行部署并初始化;
通过所述加载器函数对所述二进制数据进行解析,找到所述二进制数据中的重定位表;
根据所述重定位表,确定所要调用的外部函数和外部全局变量的地址,以及确定所述外部函数和外部全局变量的地址在所述二进制数据中的位置;
将确定的所要调用的外部函数和外部全局变量的地址***至所述二进制数据中的相应位置处。
优选地,所述外部函数由所述加载器函数以指针形式获取到,再由所述加载器函数将所述外部函数的函数指针***到所述二进制数据中的相应位置处。
本发明还公开了一种电子装置,所述电子装置上存储有智能合约中算法的保护***,所述智能合约中算法的保护***包括:
算法库源文件,所述算法库源文件采用go语言编写;
elf文件生成模块,用于将所述算法库源文件通过编译和汇编后生成elf文件;
数据生成模块,用于复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;
合约生成模块,用于将所述二进制数据和所述加载器函数写入智能合约的源码中;
部署模块,用于将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。
优选地,所述部署模块进一步包括以下子模块:
修改子模块,用于通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;
地址分配子模块,用于通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。
本发明还公开了一种计算机设备,包括存储器和处理器,所述存储器上存储有可被所述处理器执行的智能合约中算法的保护***,所述***被所述处理器执行时实现如前述任一项所述的智能合约中算法的保护方法的步骤。
本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序指令,所述计算机程序指令可被至少一个处理器所执行,以使所述至少一个处理器执行如前述任一项所述的智能合约中算法的保护方法的步骤。
本发明的积极进步效果在于:
1)本发明利用了go语言的编译特性,绕开了智能合约部署必须上传源码编译的环节,将核心代码独立出来,起到了保护核心算法知识产权的作用;
2)本发明无需对智能合约的原有部署流程做任何修改;
3)本发明具有普遍的适用性,可以用于所有使用go语言进行智能合约编写的区块链网络。
附图说明
图1示出了本发明智能合约中算法的保护方法实施例一的流程图;
图2示出了本发明智能合约中算法的保护方法中关于elf文件生成的流程图;
图3示出了本发明智能合约中算法的保护方法中elf文件格式的示意图;
图4示出了本发明智能合约中算法的保护方法中关于部署的流程图;
图5示出了本发明智能合约中算法的保护方法中关于二进制数据修改的流程图;
图6示出了本发明电子装置中智能合约中算法的保护***第一实施例的程序模块示意图;
图7示出了本发明电子装置中智能合约中算法的保护***中部署模块的子程序模块示意图;
图8示出了本发明计算机设备一实施例的硬件架构示意图。
具体实施方式
下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
首先,本发明提出一种智能合约中算法的保护方法。
在实施例一中,如图1所示,所述的智能合约中算法的保护方法包括如下步骤:
步骤01:采用go语言编写算法库源文件,并将所述算法库源文件通过编译和汇编后生成elf文件。
go语言是由谷歌发布的第二款开源编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。
在一实施例中,所述算法库具体指零知识证明算法库。所述零知识证明算法库在智能合约中的使用非常广泛,而通常这些算法库都是有第三方公司开发的。虽然零知识证明算法库的应用非常确定,但是通过不同的代码实现的零知识证明算法库在算法效率方面可能差距百倍甚至更大,因此对于零知识证明算法库源码的保护十分有必要。
在一实施例中,如图2所示,所述elf文件的生成过程具体包括以下步骤:
步骤011:采用go语言编写得到*.go文件,所述*.go文件即为算法库源文件;
步骤012:将所述*.go文件经过编译得到*.s文件,所述*.s文件即为汇编源文件;
步骤013:将所述*.s文件经过汇编得到*.o文件,所述*.o文件即为elf文件。
所述elf文件(即*.o文件)的格式如图3所示,包括ELF Head(elf头)、.text(代码区)、.data(数据区)、.rodata(只读数据区)、.comment(编译器版本信息存放区)、.relocation table(重定位表)和other data(其他数据区)其他数据区。该文件不是一个可执行文件,只有当其经过链接之后得到的*.out文件才为可执行文件。
这里需要特别说明的是重定位表,因为*.o文件无法得知本文件中调用的外部函数以及外部全局变量的实际地址,所以需要在重定位表中,将这些暂时无法确定地址的外部函数和全局变量在本文件中被引用的地方全部标记出来。这样等到Linking(链接)的时候,才能将这些被调用的外部函数和全局变量的地址回填到elf文件的代码区中相应的位置上。
*.o文件和*.out文件的主要区别就是重定位表中标记的外部引用的函数和全局变量的地址,在*.o文件中无法确定。
步骤02:复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数。
这里的加载器函数通常由算法库的开发者提供,该函数的源码是公开的。
步骤03:将所述二进制数据和所述加载器函数写入智能合约的源码中。
在智能合约需要使用到算法库时,只要将所述二进制数据作为一个静态的字节数组和加载器函数一种写入到智能合约的源码即可。这样,算法库就隐藏到了智能合约代码的数据区,无需再将算法库的源码上传。
步骤04:将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。
Docker是一个由go语言写的程序运行的“容器”,是为开发者和***管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。
部署(特指软件部署)就是把开发的软件拿给用户去用,给用户配置环境(包括硬件、软件的安装、环境变量的设置等),让开发的软件能给用户正常使用的过程就是软件部署。
在一实施例中,如图4所示,所述部署具体包括以下两步:
步骤041:通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改。
更具体地,在一实施例中,如图5所示,所述二进制数据的修改包括以下步骤:
步骤0411:将所述智能合约的源码上传到docker中进行部署并初始化;
步骤0412:通过所述加载器函数对所述二进制数据进行解析,找到所述二进制数据中的重定位表;
步骤0413:根据所述重定位表,确定所要调用的外部函数和外部全局变量的地址,以及确定所述外部函数和外部全局变量的地址在所述二进制数据中的位置;
步骤0414:将确定的所要调用的外部函数和外部全局变量的地址***至所述二进制数据中的相应位置处。
以加载外部函数为例,所述外部函数由所述加载器函数以指针形式获取到,再由所述加载器函数将所述外部函数的函数指针***到所述二进制数据中的相应位置处。
在所述加载器函数完成所有外部函数的***后,所述二进制数据即完成了根据当前环境的修改,成了一段真实可以运行并执行的程序了。
步骤042:通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。
在完成本步骤之后,所述二进制数据就和真实的*.out文件一样了,可调用其中包含的函数运行。
其次,本发明提出了一种电子装置,所述电子装置上存储有智能合约中算法的保护***20,所述***20可以被分割为一个或者多个程序模块。
例如,图6示出了所述智能合约中算法的保护***20第一实施例的程序模块示意图,该实施例中,所述***20可以被分割为算法库源文件201、elf文件生成模块202、数据生成模块203、合约生成模块204和部署模块205。其中,本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述智能合约中算法的保护***20在所述电子装置2中的执行过程。以下描述将具体介绍所述程序模块201-205的具体功能。
所述算法库源文件201采用go语言编写。
在一实施例中,所述算法库具体指零知识证明算法库。
所述elf文件生成模块202用于将所述算法库源文件通过编译和汇编后生成elf文件。
这里elf文件的生成过程具体为:采用go语言编写得到*.go文件,将所述*.go文件经过编译得到*.s文件,再将所述*.s文件经过汇编得到*.o文件;所述*.go文件即为算法库源文件,所述*.s文件即为汇编源文件,所述*.o文件即为elf文件。
所述数据生成模块203用于复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数。
所述elf文件(即*.o文件)的格式如图3所示,包括ELF Head(elf头)、.text(代码区)、.data()数据区、.rodata(只读数据区)、.comment(编译器版本信息存放区)、.relocation table(重定位表)和other data(其他数据区)其他数据区。该文件不是一个可执行文件,只有当其经过链接之后得到的*.out文件才为可执行文件。
所述合约生成模块204用于将所述二进制数据和所述加载器函数写入智能合约的源码中。
在智能合约需要使用到算法库时,只要将所述二进制数据作为一个静态的字节数组和加载器函数一种写入到智能合约的源码即可。这样,算法库就隐藏到了智能合约代码的数据区,无需再将算法库的源码上传。
所述部署模块205用于将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。
在一实施例中,如图7所示,所述部署模块205进一步被分割为修改子模块2051和地址分配子模块2052。
所述修改子模块2051用于通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改。
所述地址分配子模块2052用于通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。
再次,本发明还提出来一种计算机设备。
参阅图8所示,是本发明计算机设备一实施例的硬件架构示意图。本实施例中,所述计算机设备2是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图所示,所述计算机设备2至少包括,但不限于,可通过***总线相互通信连接存储器21、处理器22、网络接口23、以及智能合约中算法的保护***20。其中:
所述存储器21至少包括一种类型的计算机可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器21可以是所述计算机设备2的内部存储单元,例如该计算机设备2的硬盘或内存。在另一些实施例中,所述存储器21也可以是所述计算机设备2的外部存储设备,例如该计算机设备2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器21还可以既包括所述计算机设备2的内部存储单元也包括其外部存储设备。本实施例中,所述存储器21通常用于存储安装于所述计算机设备2的操作***和各类应用软件,例如所述智能合约中算法的保护***20的程序代码等。此外,所述存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器22在一些实施例中可以是中央处理器(Central ProcessingUnit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制所述计算机设备2的总体操作,例如执行与所述计算机设备2进行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器22用于运行所述存储器21中存储的程序代码或者处理数据,例如运行所述的智能合约中算法的保护***20等。
所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述计算机设备2与其他计算机设备之间建立通信连接。例如,所述网络接口23用于通过网络将所述计算机设备2与外部终端相连,在所述计算机设备2与外部终端之间的建立数据传输通道和通信连接等。所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯***(Global System of Mobile communication,GSM)、宽带码分多址(WidebandCode Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图8仅示出了具有组件21-23的计算机设备2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
在本实施例中,存储于存储器21中的所述智能合约中算法的保护***20可以被一个或多个处理器(本实施例为处理器22)所执行,以完成以下步骤的操作:
步骤01:采用go语言编写算法库源文件,并将所述算法库源文件通过编译和汇编后生成elf文件;
步骤02:复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;
步骤03:将所述二进制数据和所述加载器函数写入智能合约的源码中;
步骤04:将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。
在一实施例中,步骤01中所述elf文件的生成过程具体包括以下步骤:
步骤011:采用go语言编写得到*.go文件,所述*.go文件即为算法库源文件;
步骤012:将所述*.go文件经过编译得到*.s文件,所述*.s文件即为汇编源文件;
步骤013:将所述*.s文件经过汇编得到*.o文件,所述*.o文件即为elf文件。
在一实施例中,步骤04进一步包括以下步骤:
步骤041:通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;
步骤042:通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。
在一实施例中,所诉步骤041又更进一步包括以下步骤:
步骤0411:将所述智能合约的源码上传到docker中进行部署并初始化;
步骤0412:通过所述加载器函数对所述二进制数据进行解析,找到所述二进制数据中的重定位表;
步骤0413:根据所述重定位表,确定所要调用的外部函数和外部全局变量的地址,以及确定所述外部函数和外部全局变量的地址在所述二进制数据中的位置;
步骤0414:将确定的所要调用的外部函数和外部全局变量的地址***至所述二进制数据中的相应位置处。
此外,本发明一种计算机可读存储介质,所述计算机可读存储介质为非易失性可读存储介质,其内存储有计算机程序指令,所述计算机程序指令可被至少一个处理器所执行,以实现上述智能合约中算法的保护方法或电子装置的操作。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
Claims (10)
1.一种智能合约中算法的保护方法,其特征在于,包括以下步骤:
将采用go语言编写的算法库源文件通过编译和汇编后生成elf文件;
复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;
将所述二进制数据和所述加载器函数写入智能合约的源码中;
将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。
2.根据权利要求1所述的智能合约中算法的保护方法,其特征在于,所述算法库为零知识证明算法库。
3.根据权利要求1所述的智能合约中算法的保护方法,其特征在于,
所述elf文件的生成过程为:采用go语言编写得到*.go文件,将所述*.go文件经过编译得到*.s文件,再将所述*.s文件经过汇编得到*.o文件;
所述*.go文件为算法库源文件,所述*.s文件为汇编源文件,所述*.o文件为elf文件。
4.根据权利要求1所述的智能合约中算法的保护方法,其特征在于,所述部署包括:
通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;
通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。
5.根据权利要求4所述的智能合约中算法的保护方法,其特征在于,所述二进制数据的修改包括以下步骤:
将所述智能合约的源码上传到docker中进行部署并初始化;
通过所述加载器函数对所述二进制数据进行解析,找到所述二进制数据中的重定位表;
根据所述重定位表,确定所要调用的外部函数和外部全局变量的地址,以及确定所述外部函数和外部全局变量的地址在所述二进制数据中的位置;
将确定的所要调用的外部函数和外部全局变量的地址***至所述二进制数据中的相应位置处。
6.根据权利要求5所述的智能合约中算法的保护方法,其特征在于,所述外部函数由所述加载器函数以指针形式获取到,再由所述加载器函数将所述外部函数的函数指针***到所述二进制数据中的相应位置处。
7.一种电子装置,其特征在于,所述电子装置上存储有智能合约中算法的保护***,所述智能合约中算法的保护***包括:
算法库源文件,所述算法库源文件采用go语言编写;
elf文件生成模块,用于将所述算法库源文件通过编译和汇编后生成elf文件;
数据生成模块,用于复制出所述elf文件中的重定位表、只读数据区、数据区和代码区形成一串二进制数据,并为所述二进制数据配置加载器函数;
合约生成模块,用于将所述二进制数据和所述加载器函数写入智能合约的源码中;
部署模块,用于将所述智能合约的源码上传至docker中进行部署,使得所述加载器函数在所述智能合约运行时,可以获取所述二进制数据中包含的外部函数和外部全局变量的地址。
8.根据权利要求7所述的电子装置,其特征在于,所述部署模块进一步包括以下子模块:
修改子模块,用于通过所述加载器函数将所述二进制数据中包含的外部函数和外部全局变量的地址回填到所述二进制数据中的相应位置中,实现对所述二进制数据的修改;
地址分配子模块,用于通过所述加载器函数在内存中分配一段内存地址,并赋予这段内存地址可执行权限,然后将修改后的所述二进制数据复制到该段内存地址对应的内存区域中。
9.一种计算机设备,包括存储器和处理器,其特征在于,所述存储器上存储有可被所述处理器执行的智能合约中算法的保护***,所述***被所述处理器执行时实现如权利要求1-6中任一项所述的智能合约中算法的保护方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序指令,所述计算机程序指令可被至少一个处理器所执行,以使所述至少一个处理器执行如权利要求1-6中任一项所述的智能合约中算法的保护方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811057926.9A CN109446754A (zh) | 2018-09-11 | 2018-09-11 | 智能合约中算法的保护方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811057926.9A CN109446754A (zh) | 2018-09-11 | 2018-09-11 | 智能合约中算法的保护方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109446754A true CN109446754A (zh) | 2019-03-08 |
Family
ID=65530856
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811057926.9A Withdrawn CN109446754A (zh) | 2018-09-11 | 2018-09-11 | 智能合约中算法的保护方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109446754A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110390213A (zh) * | 2019-07-31 | 2019-10-29 | 中国工商银行股份有限公司 | 区块链网络环境下智能合约的***署方法及*** |
CN110688122A (zh) * | 2019-09-30 | 2020-01-14 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
CN112153023A (zh) * | 2020-09-11 | 2020-12-29 | 北京天德科技有限公司 | 一种基于智能合约库的多智能合约***架构及管理方法 |
CN114253615A (zh) * | 2021-12-16 | 2022-03-29 | 安天科技集团股份有限公司 | 一种引导程序设置方法、装置、电子设备及存储介质 |
-
2018
- 2018-09-11 CN CN201811057926.9A patent/CN109446754A/zh not_active Withdrawn
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110390213A (zh) * | 2019-07-31 | 2019-10-29 | 中国工商银行股份有限公司 | 区块链网络环境下智能合约的***署方法及*** |
CN110688122A (zh) * | 2019-09-30 | 2020-01-14 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
CN112153023A (zh) * | 2020-09-11 | 2020-12-29 | 北京天德科技有限公司 | 一种基于智能合约库的多智能合约***架构及管理方法 |
CN114253615A (zh) * | 2021-12-16 | 2022-03-29 | 安天科技集团股份有限公司 | 一种引导程序设置方法、装置、电子设备及存储介质 |
CN114253615B (zh) * | 2021-12-16 | 2023-08-11 | 安天科技集团股份有限公司 | 一种引导程序设置方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109299587A (zh) | 基于go语言的算法保护方法、装置、设备及存储介质 | |
CN109446754A (zh) | 智能合约中算法的保护方法、装置、设备及存储介质 | |
CN107025559B (zh) | 一种业务处理方法及装置 | |
CN108958796B (zh) | 业务请求处理方法及装置、业务请求处理*** | |
US10416979B2 (en) | Package installation on a host file system using a container | |
CN108234641A (zh) | 基于分布式一致性协议实现的数据读写方法及装置 | |
CN109658238A (zh) | 数据处理方法及装置 | |
CN105117621A (zh) | 代码混淆的控制流平展化 | |
CN106897103B (zh) | 一种移动端网络游戏版本快速热更新的方法 | |
CN105574411A (zh) | 一种动态脱壳方法、装置和设备 | |
CN104899025A (zh) | 一种生成渠道包的方法和装置 | |
CN113504918A (zh) | 设备树配置优化方法、装置、计算机设备和存储介质 | |
CN111090438A (zh) | 一种基于kubernetes的FPGA虚拟化训练的方法、设备及介质 | |
EP2937803B1 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
WO2019077607A1 (en) | SYSTEM AND METHOD FOR MANAGING PROGRAM MEMORY ON A STORAGE DEVICE | |
CN110058904A (zh) | 数据转移方法、装置及服务器 | |
CN107861751A (zh) | 配置文件的修改方法及装置 | |
CN109542860A (zh) | 基于hdfs的业务数据管理方法、终端设备 | |
CN113835748B (zh) | 基于html5的应用程序的打包方法、***和可读介质 | |
CN116208676A (zh) | 数据回源方法、装置、计算机设备、存储介质和程序产品 | |
CN109062181A (zh) | 车控指令的更新方法及装置 | |
US12039067B2 (en) | Method and apparatus of securing data | |
CN115203746A (zh) | 数据账户的访问授权方法及装置 | |
CN115203747A (zh) | 数据账户创建方法及装置 | |
CN105074667A (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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20190308 |
|
WW01 | Invention patent application withdrawn after publication |