一种防止源代码反编译的方法

文档序号:6599855阅读:621来源:国知局
专利名称:一种防止源代码反编译的方法
技术领域
本发明涉及计算机软件源代码保护技术,具体来说涉及一种防止源代码反编译的方法,通过此方法有效的保护软件被反编译的难度。
背景技术
随着经济技术的飞速发展,软件作为辅助工具已经深入到各行各业当中。软件程 序是人家设计者和软件编程人员的智慧的结晶,是公司的知识产权的体现。也是企业核心 竞争力的一部分。因此,保护软件程序的版权,防止软件程序被盗版、被非法授权使用,具有 很重要的现实意义。传统的软件程序保护措施有序列号保护、使用时间限制、软件加壳等;其具体实 现就是在软件程序中设置相应的功能模块,实现相应的保护功能,例如防拷贝功能、限 制使用时间功能等。破解者要达到破解软件的目的,通常采用以下这种方式这种方式也称为静态分析技术,就是利用反编译或反汇编技术得到源程序清单, 进而分析软件程序的流程,了解各个模块所完成的功能,从而通过修改软件来达到盗取软 件技术的目的。下面简要介绍反编译和反汇编技术使用高级语言编写的软件程序需要按照运行该软件程序的计算机的主机系统指 令集(也可称为机器语言指令集),转换为由一条一条的主机系统指令(也可称为机器语言 指令)构成的机器语言代码才能被计算机识别并执行。通常将转换前的程序称为源程序, 转换后的程序为目标程序。汇编语言是一种介于高级语言与计算机语言之间的低级语言,它与计算机语言相 比有便于记忆、符合人类语言表达习惯的特性,机器语言与汇编语言之间存在几乎一一对 应的映射关系。由机器语言目标代码得到的汇编程序的过程称为反汇编;由机器语言目标 代码得到高级语言源程序的过程称为反编译。因此,只要获取到软件程序的机器语言目标 代码,就能通过反汇编技术或者反编译技术将其转化成便于破解者理解的汇编语言程序或 高级语言源程序。目前通用的计算机体系中,不存在对静态分析技术的防范技术;另一方面,现有 技术中存在众多功能强大的、对应于目前通用的主机系统指令集的调试器及相应的使用手 册,使得破解者能够非常容易的进行反编译分析,导致现有的软件保护措施无法对软件程 序的源代码进行有效的保护。

发明内容
本发明的目的是提供一种防止源代码反编译的方法,通过此方法有效的保护软件 被反编译的难度。本发明的目的是按以下方式实现的,在计算机系统中设置防止源代码反编译模 块,包括代码读取子模块、代码解析子模块、虚拟混淆子模块、数据存取子模块、混淆代码 生成模块,其中
代码读取子模块将一个文件集的代码全部读取到一个一维的字符串数组中,然后再对其进行分析,得到命名空间和类的信息;代码解析子模块对于文件中的代码,进行如下处理去除空行和前后空格和Tab 符号、回车换行,去除调试信息,去除注释,合并跨行语句,通过代码读取子模块的预处理, 让代码更易于被虚拟混淆子模块处理;虚拟混淆子模块收集数据的程序集名称、属性、方法,程序集名称、属性、方法作为 独立的混淆单元,将混淆后的程序集名称、属性、方法合成类,将类合成命名空间,最后将命 名空间合成文件;虚拟混淆子模块是由混淆模块接口模块、程序集混淆子模块、类混淆子模块、方法 和属性混淆子模块组成,用于收集数据的程序集名称、属性、方法,然后将程序集名称、属 性、方法作为独立的混淆单元,再将混淆后的程序集名称、属性、方法合成类,将类合成命名 空间,最后将命名空间合成文件;数据存取子模块根据数据程序集名称、方法、属性的定义,从预定义的数据混淆模 块中读取混淆的格式方法,从而达到代码混淆的目的;混淆代码生成模块根据虚拟混淆子模块和数据存取子模块将代码重新组成一个 新的源代码文件,此源代码文件是经过混淆的,即使二进制文件被反汇编,看到的代码也是 混淆过的非常难以理解逻辑比较复杂代码,代码比较多,基本上是没有可读性,从而达到代 码保护的目的;文件集中的代码经过预处理后,存放到一个一维字符串数组中,该数组的容量为 所有代码的行数总和,一行代码放在数组中的一行,按代码的顺序存放;为每一个文件定义 文件序列、Hash序列和字节序列。本发明的优异效果是,采用本发明技术方案使得破解者很难对被保护的软件程序 实施方向工程,即使反向成功了,也很难读懂代码。因此,可以较好的防备破解软件的反编 译,从而可以在很大程度上保护软件程序的安全性。


附图1是源代码混淆的流程图;附图2是源代码混淆架构图;附图3是源代码保护核心模块组成图。
具体实施例方式下面参照附图,对本发明的方法以一个具体实例来描述实现这一体系结构的过程。正如发明内容中所描述的,该系统体系结构包括代码读取子模块、代码解析子模 块、虚拟混淆子模块、数据存取子模块、混淆代码生成模块;在附图1中,描述的是一个源代码经过本方法之后,进行反编译保护的过程,软件 程序读取程序中的源代码,对代码是否进行混淆,如果需要进行混淆则调用、进行代码混淆 模块对源代码进行混淆,否则不进行代码混淆,混淆完成之后,结束混淆将混淆的函数、属 性组织成新的源代码文件。
至此,已经完整实现了整个基于源代码混淆的防止反编译的过程,这种技术与传 统的反编译方法不同的地方在于引入了源代码的混淆,而不是考虑防止代码被反编译,即 使代码被反编译了,也不会导致源代码被读取。因此采用这种技术,采用本发明技术方案使得破解者很难对被保护的软件程序实 施方向工程,即使反向成功了,也很难读懂代码。因此,可以较好的防备破解软件的反编译,从而可以在很大程度上保护软件程序的安全性。通过此方法有效的保护软件被反编译的难度。通过使用代码混淆可以有效的防止 抄袭,破解者反编译软件后,得到的是混淆后的代码,基本无复用的价值。并且增加破解难 度。通过混淆名称,我们将使源代码变得非常难以阅读,特别是规模较大且具有一定复杂性 的系统,即使开发人员也很难读懂。由上述技术方案可见,本发明提供的软件源代码保护方案的实现过程是,通过预 设值的混淆代码指令集并且读取源代码的之后,对代码的结构、属性、函数进行分析,从而分别进行代码的混淆,从而实现对代码的保护。
权利要求
一种防止源代码反编译的方法,其特征在于,在计算机系统中设置防止源代码反编译模块,包括代码读取子模块、代码解析子模块、虚拟混淆子模块、数据存取子模块、混淆代码生成模块,其中代码读取子模块将一个文件集的代码全部读取到一个一维的字符串数组中,然后再对其进行分析,得到命名空间和类的信息;代码解析子模块对于文件中的代码,进行如下处理去除空行和前后空格和Tab符号、回车换行,去除调试信息,去除注释,合并跨行语句,通过代码读取子模块的预处理,让代码更易于被虚拟混淆子模块处理;虚拟混淆子模块是由混淆模块接口模块、程序集混淆子模块、类混淆子模块、方法和属性混淆子模块组成,用于收集数据的程序集名称、属性、方法,然后将程序集名称、属性、方法作为独立的混淆单元,再将混淆后的程序集名称、属性、方法合成类,将类合成命名空间,最后将命名空间合成文件;数据存取子模块根据数据程序集名称、方法、属性的定义,从预定义的数据混淆模块中读取混淆的格式方法,从而达到代码混淆的目的;混淆代码生成模块根据虚拟混淆子模块和数据存取子模块将代码重新组成一个新的源代码文件,此源代码文件是经过混淆的,即使二进制文件被反汇编,看到的代码也是混淆过的非常难以理解逻辑比较复杂代码,代码比较多,基本上是没有可读性,从而达到代码保护的目的;文件集中的代码经过预处理后,存放到一个一维字符串数组中,该数组的容量为所有代码的行数总和,一行代码放在数组中的一行,按代码的顺序存放;为每一个文件定义文件序列、Hash序列和字节序列。
全文摘要
本发明提供一种防止源代码反编译的方法,该方法是在计算机系统中设置防止源代码反编译模块,包括代码读取子模块、代码解析子模块、虚拟混淆子模块、数据存取子模块、混淆代码生成模块,其中代码读取子模块将一个文件集的代码全部读取到一个一维的字符串数组中,然后再对其进行分析,得到命名空间和类的信息;代码解析子模块对于文件中的代码,进行如下处理去除空行和前后空格和Tab符号、回车换行,去除调试信息,去除注释,合并跨行语句,通过代码读取子模块的预处理,让代码更易于被虚拟混淆子模块处理;虚拟混淆子模块收集数据的程序集名称、属性、方法,程序集名称、属性、方法作为独立的混淆单元,将混淆后的程序集名称、属性、方法合成类,将类合成命名空间,最后将命名空间合成文件。
文档编号G06F21/24GK101807239SQ20101013427
公开日2010年8月18日 申请日期2010年3月29日 优先权日2010年3月29日
发明者刘正伟 申请人:山东高效能服务器和存储研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1