[发明专利]一种智能合约二进制函数的相似性分析方法有效
申请号: | 202110690580.1 | 申请日: | 2021-06-22 |
公开(公告)号: | CN113312058B | 公开(公告)日: | 2022-09-02 |
发明(设计)人: | 庄园;王宝宝;孙建国;武俊鹏;董宇欣;王小芳 | 申请(专利权)人: | 哈尔滨工程大学 |
主分类号: | G06F8/53 | 分类号: | G06F8/53;G06N3/04;G06N3/08 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 150001 黑龙江省哈尔滨市南岗区*** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 智能 合约 二进制 函数 相似性 分析 方法 | ||
1.一种智能合约二进制函数的相似性分析方法,其特征在于,包括以下步骤:
步骤1:获取智能合约的字节码文件;对字节码文件进行反编译,生成EVM指令及相应的参数;根据反编译后的EVM指令重建控制流图CFG;
步骤2:将智能合约的CFG划分为二进制函数,并且为CFG中的边确定时序关系;
步骤2.1:定义起始位置,将指令集中第一条指令所在的block作为扫描的起始点,并且将这个起始点所包含的其他block合起来作为入口函数,成为Dispatcher函数;
步骤2.2:遍历所有block内的指令集,判断是否出现PUSH4这个指令,之后需要判断PUSH4后面的三条指令是否分别是EQ,PUSH1或PUSH2,和JUMPI,只有PUSH4后面的三条指令也满足条件才能确定PUSH4后面的内容是一个二进制函数,使用PUSH4后面的内容作为二进制函数的名称;
步骤2.3:确定边的时序关系,将所有block按照入口地址大小进行从小到大排序,从第一个block分出的边开始标注,将所有与第一个block相连的边按照block入口地址大小进行标号,之后对与第二个block相连的边进行排序;
步骤3:定义关键指令作为特征值,提取各二进制函数的特征值和图结构;
所述的关键指令包括存储指令、比较操作指令、算数操作指令、获取交易中的转账金额指令、获取当前环境的gas价格指令、调用智能合约指令、调用智能合约并重新设置调用方信息指令、调用智能合约并允许被叫方更改自己的存储区指令;
步骤4:采用基于时序聚合图结构的图神经网络模型,比较聚合后的图结构,得出两个二进制函数的相似性;
图神经网络模型输入为两个二进制函数,通过图神经网络模型对这两个二进制函数进行处理,得到二进制函数的向量表示;计算这两个二进制函数的相似度,若这两个二进制函数的相似度大于既定阈值,则认定这两个二进制函数相似;
图神经网络模型对输入数据进行处理,包括边传递阶段,读出阶段和匹配阶段三个阶段;
在边传递阶段,图神经网络模型按照时间顺序沿着边依次传递信息,消息每一时间步传递给一个边;当时间为0时,需要对每个结点的隐藏层状态根据输入的每个节点的特征值进行初始化;当时间为k时,消息会经过第k时序的边并且更新这条边所指向的节点的状态;
在读出阶段,计算整个图G的向量,用于聚合G中所有节点的最终形态;图神经网络模型包含特征值和由核心节点构成的图G={V,E};V包含所有核心节点;E包含所有的边,E={e1,e2,…,eN},ek表示第k时序边,E中还包含当前边的类型,这是由源码转换成二进制函数过程中生成的;时间为k时,要传递的消息mk是基于ek边的起始节点的隐藏状态hsk和边类型tk计算的:
mk=Wkxk+bk
其中,表示拼接操作,矩阵Wk和偏置向量bk为网络参数;初始消息xk包含从ek的起始节点和ek节点的信息,然后通过Wk和bk转换成一个向量;收到消息后,ek的终止节点根据传来的消息和之前的状态进行更新,hek根据以下更新:
其中,U、Z、R是矩阵;b1和b2是偏差向量;
在连续遍历G中的所有边之后,通过读出所有节点的最终隐藏状态来计算G的向量;若第i个节点的最终隐藏层状态为最终的图向量为
其中,f是一个映射函数;|V|代表核心节点的数量;
将两个二进制函数分别进行边传递阶段和读出阶段后,得到了两个二进制函数的图向量,在匹配阶段通过余弦距离计算这两个图向量的相似度。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工程大学,未经哈尔滨工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110690580.1/1.html,转载请声明来源钻瓜专利网。