一种智能合约安全增强方法技术

技术编号:25346252 阅读:25 留言:0更新日期:2020-08-21 17:05
本发明专利技术提供一种智能合约安全增强方法,涉及区块链智能合约安全技术领域。首先恢复智能合约字节码的控制流图,标记所有JUMP/JUMPI指令跳转的目的地址及其入栈指令、JUMP/JUMPI指令的位置以及跳转目的地址和跳转指令之间的前后位置关系;在智能合约原始字节码中寻找可插入替换字节码的位置并标记插入位置的地址;根据选择的不同地址混淆模式生成基础替换字节码;重构基础替换字节码和原始字节码中所有的跳转地址和跳转指令,恢复字节码的控制流图;在替换字节码中插入混淆后的跳转地址,将替换字节码插入到原始字节码中,生成新的智能合约字节码。该方法使常见的智能合约逆向分析工具的分析工作失效,增加合约的安全性。

【技术实现步骤摘要】
一种智能合约安全增强方法
本专利技术涉及区块链智能合约安全
,尤其涉及一种智能合约安全增强方法。
技术介绍
随着区块链技术特有的去中心化、不可篡改性和公开性被广泛认可,越来越多的人们开始使用区块链技术作为支撑金融、监管和游戏等领域的底层框架,来实现互联网技术与金融价值的高度融合。为满足用户在更多场景下的需求,区块链支持部署并运行智能合约,为智能合约的执行提供图灵完备的环境,可以通过交易调用智能合约,完成用户所需的一系列操作。由于区块链的公开性和不可篡改性,区块链上部署的所有智能合约都是公开可见的,且交易的执行结果是确定的。这一特性导致智能合约无法实现生成随机数等功能,这对于游戏和金融等应用至关重要。例如CryptoKitties是一款在以太坊中备受欢迎的游戏,玩家可以繁殖并交易数字小猫,小猫的稀有基因组合会使其具有更高的价值。该游戏开发团队为了确保遗传和突变的随机性,使用闭源的智能合约为小猫的繁殖引入随机数。尽管如此,研究者宣称能够使用Erays对CryptoKitties的智能合约进行逆向分析,来大幅度提高繁殖高价值小猫的概率,毫无疑问这种方式破坏了游戏的随机性并降低了拥有稀有基因的小猫的价值。除了产生随机数外,部分智能合约开发人员出于安全原因将合约设置为闭源,以防止攻击者分析已部署的合约字节码,但仍然可以使用诸如Vandal、Gigahorse等智能合约反编译工具,分析合约代码的功能,对智能合约的开发者和使用者造成大量损失。虽然开发人员对于智能合约字节码的抗逆向分析技术有着迫切的需求,但目前还没有有效的方法可用于保护智能合约。由于智能合约运行环境具有特殊的架构,因此现有的在其他平台上的抗逆向分析技术对智能合约来说是无效的或过于昂贵的。其主要困难有:(1)智能合约虚拟机(后简称EVM)不是标准的冯诺依曼体系,合约在EVM中执行时,其代码存储在一个只读存储空间中,而不是像传统计算机组成中一样存储在可读写的内存或外部存储空间中。因此合约代码在执行过程中是无法修改的,这就意味着传统的代码加密方式无法应用在区块链中。(2)智能合约的调用执行会消耗Gas。Gas是区块链中用于衡量交易消耗计算资源的基本单位。合约执行的步骤越多,执行指令越昂贵,消耗的Gas就越多,这会给部署和调用合约的用户带来额外的支出。传统的代码混淆技术会在代码中加入大量额外指令,会导致Gas消耗量显著增加,这对于合约开发者和用户来说是不可接受的。常用的智能合约逆向分析工具(Erays,Vandal,Gigahorse)在分析智能合约时首先恢复字节码的控制流图(ControlFlowGraph,简称CFG),然后基于CFG将智能合约的字节码恢复为人类可读的代码或安全分析工具可用的中间代码表示形式(IntermediateRepresentation,简称IR)。如果CFG恢复失败,逆向分析工具就无法产生正确的分析结果。
技术实现思路
本专利技术要解决的技术问题是针对上述现有技术的不足,提供一种智能合约安全增强方法,使逆向工具对智能合约的逆向分析失败,实现对智能合约字节码的保护。为解决上述技术问题,本专利技术所采取的技术方案是:一种智能合约安全增强方法,包括以下步骤:步骤1、获取一份智能合约的原始字节码,并恢复智能合约原始字节码的控制流图,标记所有JUMP/JUMPI指令跳转的目的地址及其入栈指令、JUMP/JUMPI指令的位置以及跳转目的地址和跳转指令之间的前后位置关系;步骤2、在智能合约原始字节码中寻找可插入替换字节码的位置并标记插入位置的地址;在智能合约原始字节码对应的指令序列中,将匹配到的每一组{EQ-PUSH*-JUMPI}指令序列作为待替换的目标代码,用于对智能合约的字节码控制流图进行混淆;步骤3、用户选择四种地址混淆模式中的任意一种进行字节码替换,根据选择的不同地址混淆模式生成不同的基础替换字节码;所述四种地址混淆模式分别为:地址混淆模式1:使用memory存取获得跳转地址;地址混淆模式2:使用storage存取获得跳转地址;地址混淆模式3:使用sha3()函数计算获得跳转地址;地址混淆模式4:使用外部合约调用获得返回值作为跳转地址;当用户选择地址混淆模式1时,其基础替换字节码为:“[**][**]604052604051”;当用户选择地址混淆模式2时,其基础替换字节码为:“[**][**]604055604054”;当用户选择地址混淆模式3时,其基础替换字节码为:“60ff6050526001606f20600f1660099004[**][**]02”;当用户选择地址混淆模式4时,其基础替换字节码为:“[**][**]61007d60048073bde95422681e4c3984635af2f2f35f8c44a4ddc973ffffffffffffffffffffffffffffffffffffffff1690602001909190505060008173ffffffffffffffffffffffffffffffffffffffff16638dde08406000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156102c65a03f115155050506040518051905090509190505016”;其中,[**]表示需要进行混淆的跳转地址和入栈操作指令的字节码;步骤4、重构基础替换字节码和原始字节码中所有的跳转目的地址和跳转指令,恢复智能合约字节码正常的控制流图;步骤4.1、依次判断步骤1中的每个JUMP/JUMPI指令跳转的目的地址与步骤2中的插入位置地址的前后关系,如果跳转的目的地址在插入位置之后,则跳转目的地址加上插入代码的字节长度,得到新的跳转目的地址;否则JUMP/JUMPI指令跳转的目的地址不变;步骤4.2、再依次判断步骤4.1得到的每个JUMP/JUMPI指令跳转的目的地址是否发生进位,如果发生进位则根据新的跳转目的地址长度修改对应的入栈操作指令,同时按字节补齐字节码;否则入栈操作指令不变;步骤4.3、最后依次判断步骤4.1得到的每个JUMP/JUMPI指令跳转目的地址所指向位置之前是否有其他的跳转目的地址发生进位,如果发生进位则根据新的跳转目的地址长度修改对应的入栈操作指令,并按字节补齐跳转目的地址;否则入栈操作指令不变;步骤5、在基础替换字节码中插入混淆后的跳转地址,并将插入后的基础替换字节码插入到重构后的原始字节码中,生成新的智能合约字节码,增强智能合约的安全性。采用上述技术方案所产生的有益效果在于:本专利技术提供的一种智能合约安全增强方法,通过模式识别、控制流图重构和字节码替换这些方法本文档来自技高网
...

【技术保护点】
1.一种智能合约安全增强方法,其特征在于:包括以下步骤:/n步骤1、获取一份智能合约的原始字节码,并恢复智能合约原始字节码的控制流图,标记所有JUMP/JUMPI指令跳转的目的地址及其入栈指令、JUMP/JUMPI指令的位置以及跳转目的地址和跳转指令之间的前后位置关系;/n步骤2、在智能合约原始字节码中寻找可插入替换字节码的位置并标记插入位置的地址;/n步骤3、用户选择四种地址混淆模式中的任意一种进行字节码替换,根据选择的不同地址混淆模式生成不同的基础替换字节码;/n步骤4、重构基础替换字节码和原始字节码中所有的跳转目的地址和跳转指令,恢复智能合约字节码正常的控制流图;/n步骤5、在基础替换字节码中插入混淆后的跳转地址,并将插入后的基础替换字节码插入到重构后的原始字节码中,生成新的智能合约字节码,增强智能合约的安全性。/n

【技术特征摘要】
1.一种智能合约安全增强方法,其特征在于:包括以下步骤:
步骤1、获取一份智能合约的原始字节码,并恢复智能合约原始字节码的控制流图,标记所有JUMP/JUMPI指令跳转的目的地址及其入栈指令、JUMP/JUMPI指令的位置以及跳转目的地址和跳转指令之间的前后位置关系;
步骤2、在智能合约原始字节码中寻找可插入替换字节码的位置并标记插入位置的地址;
步骤3、用户选择四种地址混淆模式中的任意一种进行字节码替换,根据选择的不同地址混淆模式生成不同的基础替换字节码;
步骤4、重构基础替换字节码和原始字节码中所有的跳转目的地址和跳转指令,恢复智能合约字节码正常的控制流图;
步骤5、在基础替换字节码中插入混淆后的跳转地址,并将插入后的基础替换字节码插入到重构后的原始字节码中,生成新的智能合约字节码,增强智能合约的安全性。


2.根据权利要求1所述的一种智能合约安全增强方法,其特征在于:所述步骤2的具体方法为:
在智能合约原始字节码对应的指令序列中,将匹配到的每一组{EQ-PUSH*-JUMPI}指令序列作为待替换的目标代码,用于对智能合约的字节码控制流图进行混淆。


3.根据权利要求1所述的一种智能合约安全增强方法,其特征在于:
所述四种地址混淆模式分别为:
地址混淆模式1:使用memory存取获得跳转地址;
地址混淆模式2:使用storage存取获得跳转地址;
地址混淆模式3:使用sha3()函数计算获得跳转地址;
地址混淆模式4:使用外部合约调用获得返回值作为跳转地址;
当用户选择地址混淆模式1时,其基础替换字节码为:“[**][**]604052604051”;
当用户选择地址混淆模式2时,其基础替换字节码为:“[**][**]604055604054”;
当用户选择地址混淆模式3时,其基础替换字节码为:
“60ff6050526001606f20600f1660099004[**...

【专利技术属性】
技术研发人员:闫文添高健博吴振豪张家硕任立峰王昭李青山陈钟
申请(专利权)人:博雅正链北京科技有限公司北京大学
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1