一种基于编译中间结果的软件保护方法技术

技术编号:10509423 阅读:156 留言:0更新日期:2014-10-08 12:14
本发明专利技术公开了一种针对编译中间结果的软件保护方法,包括以下步骤:S1:将软件源代码进行编译得到原始的目标OBJ文件;S2:分析原始OBJ文件,得到针对原始OBJ文件的分拆数据;S3:对S2的分析结果进行预处理;S4:进行系统函数调用的隐藏和冗余函数插入,以及对系统使用的全局字符串进行的加密;S5:进行针对普通指令的变形;S6:将上述过程处理后得到的分散数据进行重组成OBJ文件,然后通过链接器链接成可执行文件。本发明专利技术实现了针对OBJ文件的指令级的混淆和保护,同时能够避免错误的产生,提高混淆效果和混淆质量,防止软件遭到非法破解以及分析。

【技术实现步骤摘要】
一种基于编译中间结果的软件保护方法
本专利技术属于软件保护领域,具体涉及一种基于编译中间结果的软件保护方法。
技术介绍
应用程序的开发包括:源代码的编写,编译器的编译的OBJ文件,以及链接器对OBJ文件的链接这一系列组成。每一个源文件对应一个OBJ文件,OBJ文件是由系统编译器对高级语言进行汇编、符号处理、字符串处理之后的产物,OBJ文件符合相应平台的文档标准,如微软COFF文件标准等。OBJ文件相较于链接后的可执行文件来说,具有更加简单的结构,以及更加灵活的数据索引以及代码调用方式,因此处理起来更加灵活,可以进行多种方式的混淆,包括混淆函数导入导出表,字符串引用,增加冗余性等等。这种操作并不影响程序原有的功能。目前,针对软件保护的措施中,有针对源代码级的软件混淆,代码混淆(Obfuscatedcode)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。其中一种方式是将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。这样带来了一系列的问题,如被混淆的代码难于理解,因此调试出错也变得困难起来。还有一些针对可执行文件的代码保护,主要表现为对软件加壳。加壳技术是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作,这一部分的工作可以用来对原来的指令进行预处理,将原有的程序执行流程打乱,以做到防止软件被分析和破解。以上两种方式各有优劣,源代码级别的保护很局限,对于较为底层的语言的处理能力有限,而基于可执行文件的加壳种类不多,容易被脱壳,进而将原有程序暴露给分析者。
技术实现思路
本专利技术所要解决的技术问题是提供一种针对编译结果的软件保护方法,实现针对OBJ文件的指令级的混淆和保护,同时能够避免错误的产生,以及提高混淆效果和混淆质量,防止软件遭到非法破解以及分析。本专利技术的技术方案为:一种针对编译中间结果的软件保护方法,包括以下步骤:S1:将软件源代码进行编译得到原始的目标OBJ文件;S2:分析原始OBJ文件,得到针对原始OBJ文件的分拆数据;S3:对S2的分析结果进行预处理;S4:进行系统函数调用的隐藏和冗余函数插入,以及对系统使用的全局字符串进行的加密;S5:进行针对普通指令的变形;S6:将上述过程处理后得到的分散数据进行重组成OBJ文件,然后通过链接器链接成可执行文件。S2步骤中分拆数据的结构依据微软编译器或者GCC编译器的OBJ规范文档COFF标准来进行,并结合混淆功能需要进行设计,分拆数据存放在内存中,分拆数据与S1步骤中OBJ文件一一对应,且能够按照拆分的逆过程进行重组,生成原始OBJ文件。S3步骤的预处理主要进行以下方面分析:S31:该分拆数据是否满足进行混淆的基本条件,对不达标的执行跳过混淆步骤;S32:针对S31得到的结果,搜集混淆操作需要的数据集合,存放到固定的内存位置,提供给混淆模块访问;S33:针对S32得到的分拆数据结果,根据混淆功能需要,调整分拆数据内容,使得其既不影响后期S6步骤重组OBJ文件功能,又辅助完成S4和S5的功能。S3具体所做的工作包括:1>根据模块工作内容的可行性,对其中的各种信息进行筛选,进行一些行为的预处理,包括筛选OBJ中包含的函数节、数据节、重定位节,根据混淆的类型,筛选出OBJ文件中能够进行的混淆,不能够进行的混淆,并保存下来;2>对函数节中包含的指令进行分析和处理,分析处理相对转移指令,对这部分指令进行预处理,同时还记录和处理OBJ中包含的编译器对一些高级语言中的特殊语句进行的优化,跳过或者用特殊的处理方式处理这部分数据;3>分析高级语言源代码中包含的全局变量定义位置和大小,以及相关联的数据,对这部分数据进行存储,为后续的混淆做铺垫。S4步骤具体为:S41:根据S33提供的分拆数据,提取其中系统函数调用;S42:根据配置对提取的调用进行筛选,对能够进行隐藏的系统调用则进行下一步操作;S43:将S42得到的系统调用的命令进行解析,提取其中API名称和模块名称;S44:根据两部分数据,在相应的地方将原始系统调用指令替换成动态调用指令;S45:利用随机函数,在指令序列中随机添加冗余的系统调用;S45:根据S33提供的分拆数据,找到其中代码引用的字符串存储位置以及引用位置,并且在S33得到的分拆数据中插入解密函数节;S46:对字符串加密,相应的在引用位置插入解密函数调用。S4步骤中系统调用混淆包含两个方面:S411:针对传统系统调用的隐藏,将对系统API的直接静态调用变换为动态调用;S422:人为添加冗余的函数调用,使得在最后生成的PE文件的导入表中能够看到这些冗余的系统API,并且这些API随机的分布在很多函数中;S4步骤中字符串加密功能,主要针对源代码中的全局字符串进行加密,全局字符串主要包括已经初始化的字符串。S5步骤中进行针对普通指令的变形的具体步骤如下:S51:将S33得到的分拆数据作为输入,对其中每一条指令进行判断,并且作为下一步的输入;S52:如果S51输出结果是常规指令,则根据配置对该常规指令进行替换,替换依据为一个包含常规指令和替换指令的模板,替换类型选择根据随机算法生成;S53:如果S51输出结果是控制转移指令,根据能否处理,进行下一步操作:如果能够处理,则根据控制转移指令的类型,对S33得到的分拆数据进行修改,用能完成相同功能的指令替换原来的指令;如果不能处理,则直接跳过执行。S6步骤具体为:按照COFF文件标准以及拆分时的步骤进行重组,重组成OBJ文件,交给同一平台的编译器配套使用的链接器,根据原始的链接参数进行链接,链接成可执行文件。S1步骤中采用微软编译器或者GCC编译器进行针对源代码的编译到原始的目标OBJ文件。本专利技术与现有技术相比具有如下优点:本专利技术实现了针对OBJ文件的指令级的混淆和保护,同时能够避免错误的产生,提高混淆效果和混淆质量,防止软件遭到非法破解以及分析。附图说明图1为本专利技术方法的流程图。具体实施方式根据图1的流程图,以下进行针对本专利技术工作流程的具体描述,但是不作为本专利技术的限定。S1:使用微软提供的或者GCC等源代码编译器将软件源代码编译成中间结果,得到原始的目标OBJ文件。原始的OBJ文件能够经过同一平台链接器的链接生成原始的PE文件。S2:分析原始OBJ文件,得到针对原始OBJ文件的分拆数据。分拆数据的结构依据微软编译器或者GCC编译器的OBJ规范文档,并结合混淆功能需要进行设计,分拆数据存放在内存中。分拆数据与上一步骤的OBJ文件一一对应,且能够按照拆分的逆过程进行重组,生成原始OBJ文件。S3:对S2的分析结果进行预处理,为后续代码混淆做准备工作,确保混淆处理不会出现无法处理的异常。进行预处理,对S2得到的分拆数据进行预处理,获取后期混淆操作的更多确切信息,并且能够减少无法预知错误的发生。作为该步骤的预处理分析功能,主要进行以下几方面分析:S31:该分拆数据是否满足进行混淆的基本条件,对不达标的执行跳过混淆步骤。S32:针对S31得到的结果,搜集混淆操作需要的数据集合,存放到固定的内存位置,提供给混淆模块访问,这部分数据是后期S5步骤必需的要素。S33:针对S32得到的分拆数据结果,根据混淆功能需要,调整分拆数据内容本文档来自技高网...
一种基于编译中间结果的软件保护方法

【技术保护点】
一种针对编译中间结果的软件保护方法,其特征在于,包括以下步骤:S1:将软件源代码进行编译得到原始目标OBJ文件;S2:分析原始OBJ文件,得到针对原始目标OBJ文件的分拆数据;S3:对S2的分析结果进行预处理;S4:进行系统函数调用的隐藏和冗余函数插入,以及对系统使用的全局字符串进行的加密;S5:进行针对普通指令的变形;S6:将上述过程处理后得到的分散数据进行重组成OBJ文件,然后通过链接器链接成可执行文件。

【技术特征摘要】
1.一种针对编译中间结果的软件保护方法,其特征在于,包括以下步骤:S1:将软件源代码进行编译得到原始目标OBJ文件;S2:分析原始目标OBJ文件,得到针对原始目标OBJ文件的分拆数据;S3:对S2的分析结果进行预处理;S4:进行系统函数调用的隐藏和冗余函数插入,以及对系统使用的全局字符串进行的加密;S5:进行针对普通指令的变形;S6:将上述过程处理后得到的分拆数据进行重组成OBJ文件,然后通过链接器链接成可执行文件;其中,S2步骤中分拆数据的结构依据微软编译器或者GCC编译器的OBJ规范文档COFF标准来进行,并结合混淆功能需要进行设计,分拆数据存放在内存中,分拆数据与S1步骤中原始目标OBJ文件一一对应,且能够按照分拆的逆过程进行重组,生成原始目标OBJ文件,S3步骤的预处理主要进行以下方面分析:S31:该分拆数据是否满足进行混淆的基本条件,对不达标的执行跳过混淆步骤;判断标准来源于后续变形操作是否能够处理;S32:针对S31得到的结果,搜集混淆操作需要的数据集合,存放到固定的内存位置,提供给混淆模块访问;S33:针对S32得到的分拆数据结果,根据混淆功能需要,调整分拆数据内容;其中,S32和S33步骤的具体所做的工作包括:1>根据模块工作内容的可行性,对其中的各种信息进行筛选,筛选的信息包括原始目标OBJ文件中包含的函数节、数据节、重定位节,同时,根据混淆的类型,筛选出原始目标OBJ文件中能够进行混淆的部分,不能够进行混淆的部分,并保存下来;2>对函数节中包含的指令进行分析和处理,解析相对转移指令,对这部分指令进行预处理,记录其相对跳转位置,同时,还处理和记录原始目标OBJ中包含的编译器对一些高级语言中的特殊语句进行的优化,跳过或者用特殊的处理方式处理这部分数据;3>分析高级语言源代码中包含的全局变量定义位置和大小,以及相关联的数据,对这部分数据进行存储,作为后续字符串加密的初始化数据。2.根据权利要求1所述的一种针对编译中间结果的软件保护方法,其特征在于,S4步骤具体为:S41:根据S33处...

【专利技术属性】
技术研发人员:张小松张艺峰牛伟纳陈瑞东王东杨高明于洲白金漆艳梅樊添
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川;51

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

1