[发明专利]一种基于母体融合的代码混淆方法有效
申请号: | 202110311243.7 | 申请日: | 2021-03-24 |
公开(公告)号: | CN113158147B | 公开(公告)日: | 2022-12-09 |
发明(设计)人: | 舒辉;熊小兵;于璞;康绯;杨巨;赵耘田 | 申请(专利权)人: | 中国人民解放军战略支援部队信息工程大学 |
主分类号: | G06F21/14 | 分类号: | G06F21/14;G06F8/74;G06F8/41 |
代理公司: | 郑州明华专利代理事务所(普通合伙) 41162 | 代理人: | 高丽华 |
地址: | 450000 河*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 母体 融合 代码 混淆 方法 | ||
1.一种基于母体融合的代码混淆方法,其特征在于:包括以下步骤:
步骤一、选取无害但功能复杂的程序作为母体程序,所述母体程序需要与目标代码属于同种编程语言、具有相同语言规则且不会与目标代码产生冲突;
步骤二、采用抽象语法树结构对母体程序进行遍历,以语法树各节点类型和关系为基础抽象出母体程序的控制流结构,提取出母体程序的抽象控制流图,并对母体程序控制流的关键节点或必经节点进行记录;具体是:对顶层语法树节点的子节点进行遍历,获取母体程序的控制流图,按照遍历顺序对每一个语法树结构类型进行判别,根据结构类型确定插入执行探针的节点位置;
若结构类型为一般变量操作,设置执行探针,直接插入执行探针;
若为特殊语法结构类型,需要根据语法结构的各种操作类型结构进行整合提取,整合提取分为:
(1)若为条件分支结构,设置执行探针,在每一条分支结构内部的开始位置插入执行探针以获取执行当前分支所需要的触发条件;
(2)若为函数调用结构,对函数内部语法结构进行分析,将函数作为一个整体,在整体后插入执行探针以获取函数的参数个数、参数类型以及返回值类型;
步骤三、根据执行流所得到的运行点记录数量对目标代码进行分片,根据获取的母体程序的控制流图和节点信息,选取可融合的代码位置,然后将目标代码分片按照母体程序执行点记录位置顺序与母体程序对应位置进行融合,形成新的控制流图进而形成新的程序;其中目标代码分片与母体程序对应位置融合按照目标代码分片中不同的代码结构采用不同的融合方式,分别为:
(1)对于目标代码分片中的简单语句操作,直接将目标代码分片以原形式填充到母体程序的对应融合位置,所述简单语句操作包括普通表达式和循环体;
(2)将部分代码进行控制流扁平化处理,更改代码结构但不更改程序语义,然后将更改后的代码结构填充到母体程序的对应融合位置;
(3)对于目标代码中存在的分支结构,将母体的分支条件与目标代码分片的分支条件取并集形成新的分支条件,在分支内容上则通过直接以原形式填充的方式,融合到母体代码的对应融合位置;将分片的其他部分插入到条件动作中,设置变量共用,将目标代码分片构建为不透明谓词,并根据记录将母体程序中的变量作为不透明谓词的一个元素构建出与原表达式具有相同语义的融合表达式。
2.根据权利要求1所述的基于母体融合的代码混淆方法,其特征在于:若函数调用结构为递归调用函数,将其视为循环结构,不进行执行探针插入。
3.根据权利要求1所述的基于母体融合的代码混淆方法,其特征在于:若函数调用结构为内部多层次调用函数,则设置深度阈值,并采用深度优先算法,以避免程序陷入多重调用并导致融合失败。
4.根据权利要求1所述的基于母体融合的代码混淆方法,其特征在于:步骤三中对目标代码按照语法树进行完整分片,分片数量不大于运行点记录数量。
5.根据权利要求1所述的基于母体融合的代码混淆方法,其特征在于:步骤三中目标代码分片的融合点优先选择和分片结构类型相同或相似的结构进行融合。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军战略支援部队信息工程大学,未经中国人民解放军战略支援部队信息工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110311243.7/1.html,转载请声明来源钻瓜专利网。