发明内容
本公开提供一种面向微控制器的压缩整合式源代码混淆方法及系统,为了解决上述的现有技术的不足,通过提出一种面向微控制器的压缩整合式源代码混淆的方法,从而针对微控制器程序源代码进行更有效地压缩和混淆。
为了实现上述目的,根据本公开的一方面,提供一种面向微控制器的压缩整合式源代码混淆方法,所述方法包括以下步骤:
步骤1,启动源代码混淆系统,唤起并运行代码整合模块;
步骤2,代码整合模块扫描目标微控制器项目中的所有的有效代码文件;
步骤3,代码整合模块将有效代码文件中的代码都分别整合成一个源文件和头文件;
步骤4,代码整合模块将源文件和头文件的源代码中所有的注释删除,并将缩进空格调整成1格;
步骤5,唤起并运行代码混淆模块;
步骤6,代码混淆模块在源文件和头文件的源代码中标记出标识符中的不带有特殊标记的第一标识符;
步骤7,代码混淆模块调用作用域分析器将源文件中的所有的作用域划分出来;
步骤8,代码混淆模块对于每个作用域中的第一标识符按照其出现频率从高到低进行排序后得到第一标识符序列;
步骤9,代码混淆模块通过哈夫曼编码依次对第一标识符序列中的第一标识符按照标识符长度进行压缩编码。
进一步地,在步骤1中,所述源代码混淆系统包括:代码整合模块和代码混淆模块;
所述代码整合模块的用于将多个源文件整合成一个单独的源文件并压缩代码空间。如果一个微控制器开放项目中最终需要n个.c源文件,该整合模块会将这自动些.c源文件中的代码都整合成一个.c源文件;相似地,如果一个微控制器开放项目中最终需要m个.h头文件,该整合模块会将这自动些.h头文件中的代码都整合成一个.h头文件,该整合模块会将所有的注释删除,并将缩进空格调整成1格,n和m为大于0的整数。
所述代码混淆模块的主要功能是将上述所整合的.c和.h文件进行混淆,从而进一步压缩文件并且加大逆向工程的难度。该模块首先调用作用域(scope)分析器将.c文件中的源代码按照作用域划分,划分方法包括但不限于语义分割算法、括号匹配算法。之后,该模块对于每个作用域中所有的标识符按照其出现频率从高到低进行排序。之后,该模块利用哈夫曼编码(Huffman Coding)的方式对这些标识符按照其标识符长度进行压缩编码,这样可以最大程度地压缩源文件,但又能同时保证语法的正确性。
为了可以让开发人员更好地追踪代码错误和调用外部接口,代码混淆模块允许开发人员在代码中做包括但不限于宏定义、特殊注释格式等的特殊标记表明该符号不参与混淆,这有利于调试打印日志等。同样地,该模块亦允许开发人员在某些外部导出符号上做特殊标记,这些被标记的外部符号也不会参加混淆。
进一步地,在步骤2中,所述有效代码文件为源文件和头文件,源文件和头文件分别为.c格式的源文件和.h格式的头文件。
进一步地,在步骤3中,代码整合模块将有效代码文件中的代码都分别整合成一个源文件和头文件的方法为,将一个编译单元或一组编译单元中的代码整合成一个源文件和头文件,所述编译单元为一个或多个源文件和头文件,其中,多个源文件和头文件的情况是完全同性质的编译单元,例如,生成的源文件包括source1.c,source2.c和include.h,其中,生成一组编译单元的功能在某些编译器对源码长度有限制的时候可以使用,这时候可以把整合成的一个源文件和头文件分成多份,然后再交给编译器。
进一步地,在步骤6中,所述特殊标记包括但不限于在标识符上的宏定义、特殊注释标记、外部导出符号。
进一步地,在步骤7中,所述作用域划分方法包括但不限于语义分割算法、括号匹配算法。
本发明还提供了一种面向微控制器的压缩整合式源代码混淆系统,所述系统包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在源代码混淆系统的代码整合模块和代码混淆模块的各自单元中,
其中,代码整合模块,包括以下单元:
代码文件扫描单元,用于扫描目标微控制器项目中的所有的有效代码文件;
代码整合单元,用于将有效代码文件中的代码都分别整合成一个源文件和头文件;
格式调整单元,用于代码整合模块将源文件和头文件的源代码中所有的注释删除,并将缩进空格调整成1格;
代码混淆模块,包括以下单元:
特殊标记单元,用于在源文件和头文件的源代码中标记出标识符中的不带有特殊标记的第一标识符;
作用域划分单元,用于调用作用域分析器将源文件中的所有的作用域划分出来;
频率排序单元,用于对于每个作用域中的第一标识符按照其出现频率从高到低进行排序后得到第一标识符序列;
压缩编码单元,用于代码混淆模块通过哈夫曼编码依次对第一标识符序列中的第一标识符按照标识符长度进行压缩编码。
本公开的有益效果为:本发明提供一种面向微控制器的压缩整合式源代码混淆方法及系统,针对微控制器平台的代码整合、压缩及混淆,有效的保障了高效物联网程序和物联网设备的安全;可以更灵活地让开发人员选择混淆的选项,有效避免混淆后调试的不便利和外部调用的不确定性。
具体实施方式
以下将结合实施例和附图对本公开的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本公开的目的、方案和效果。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图1所示为根据本公开的一种面向微控制器的压缩整合式源代码混淆方法的流程图,下面结合图1来阐述根据本公开的实施方式的一种面向微控制器的压缩整合式源代码混淆方法。
本公开提出一种面向微控制器的压缩整合式源代码混淆方法,具体包括以下步骤:
步骤1,启动源代码混淆系统,唤起并运行代码整合模块;
步骤2,代码整合模块扫描目标微控制器项目中的所有的有效代码文件;
步骤3,代码整合模块将有效代码文件中的代码都分别整合成一个源文件和头文件;
步骤4,代码整合模块将源文件和头文件的源代码中所有的注释删除,并将缩进空格调整成1格;
步骤5,唤起并运行代码混淆模块;
步骤6,代码混淆模块在源文件和头文件的源代码中标记出标识符中的不带有特殊标记的第一标识符;
步骤7,代码混淆模块调用作用域分析器将源文件中的所有的作用域划分出来;
步骤8,代码混淆模块对于每个作用域中的第一标识符按照其出现频率从高到低进行排序后得到第一标识符序列;
步骤9,代码混淆模块通过哈夫曼编码依次对第一标识符序列中的第一标识符按照标识符长度进行压缩编码。
进一步地,在步骤1中,所述源代码混淆系统包括:代码整合模块和代码混淆模块;
所述代码整合模块的用于将多个源文件整合成一个单独的源文件并压缩代码空间。如果一个微控制器开放项目中最终需要n个.c源文件,该整合模块会将这自动些.c源文件中的代码都整合成一个.c源文件;相似地,如果一个微控制器开放项目中最终需要m个.h头文件,该整合模块会将这自动些.h头文件中的代码都整合成一个.h头文件,该整合模块会将所有的注释删除,并将缩进空格调整成1格,n和m为大于0的整数。
所述代码混淆模块的主要功能是将上述所整合的.c和.h文件进行混淆,从而进一步压缩文件并且加大逆向工程的难度。该模块首先调用作用域(scope)分析器将.c文件中的源代码按照作用域划分,划分方法包括但不限于语义分割算法、括号匹配算法。之后,该模块对于每个作用域中所有的标识符按照其出现频率从高到低进行排序。之后,该模块利用哈夫曼编码(Huffman Coding)的方式对这些标识符按照其标识符长度进行压缩编码,这样可以最大程度地压缩源文件,但又能同时保证语法的正确性。
为了可以让开发人员更好地追踪代码错误和调用外部接口,代码混淆模块允许开发人员在代码中做包括但不限于宏定义、特殊注释格式等的特殊标记表明该符号不参与混淆,这有利于调试打印日志等。同样地,该模块亦允许开发人员在某些外部导出符号上做特殊标记,这些被标记的外部符号也不会参加混淆。
进一步地,在步骤2中,所述有效代码文件为源文件和头文件,源文件和头文件分别为.c格式的源文件和.h格式的头文件。
进一步地,在步骤3中,代码整合模块将有效代码文件中的代码都分别整合成一个源文件和头文件的方法为,将一个编译单元或一组编译单元中的代码整合成一个源文件和头文件,所述编译单元为一个或多个源文件和头文件,其中,多个源文件和头文件的情况是完全同性质的编译单元,例如,生成的源文件包括source1.c,source2.c和include.h,其中,生成一组编译单元的功能在某些编译器对源码长度有限制的时候可以使用,这时候可以把整合成的一个源文件和头文件分成多份,然后再交给编译器。
进一步地,在步骤6中,所述特殊标记包括但不限于在标识符上的宏定义、特殊注释标记、外部导出符号。
进一步地,在步骤7中,所述作用域划分方法包括但不限于语义分割算法、括号匹配算法。
本实施给出一个具体实施例,阐述源代码混淆系统如何完成一个整合式源代码的混淆。
某开发人员选择三个软件包A、B、C,并将其源代码合成一个大型代码段,其中含有三类全局标识符,第一类是调试符号,第二类是外部接口符号,第三类是内部的符号。
第一步,工具先整合三个软件包,并扫描整合后的源代码,确定第一类标识符和第二类标识符的位置。
第二步,工具删去代码中所有的注释,仅保留源代码本身。
第三步,工具扫描源代码中的全局标识符,建立全局标识符列表,并且从该列表中去掉第一步中确定的第一类标识符和第二类标识符。
第四步,工具使用Huffman压缩算法对该段源代码进行压缩,将第三类标识符替换成Huffman压缩过后的简短的标识符。
第五步,工具输出混淆过后的源代码,该源代码功能和ABC三个软件包的整合相同,并且能正常打印调试信息和导出外部接口供其他软件使用。
本公开的实施例提供的一种面向微控制器的压缩整合式源代码混淆系统,如图2所示为本公开的一种面向微控制器的压缩整合式源代码混淆系统图,该实施例的一种面向微控制器的压缩整合式源代码混淆系统包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述一种面向微控制器的压缩整合式源代码混淆系统实施例中的步骤。
所述系统包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在源代码混淆系统的代码整合模块和代码混淆模块的各自单元中,
其中,代码整合模块,包括以下单元:
代码文件扫描单元,用于扫描目标微控制器项目中的所有的有效代码文件;
代码整合单元,用于将有效代码文件中的代码都分别整合成一个源文件和头文件;
格式调整单元,用于代码整合模块将源文件和头文件的源代码中所有的注释删除,并将缩进空格调整成1格;
代码混淆模块,包括以下单元:
特殊标记单元,用于在源文件和头文件的源代码中标记出标识符中的不带有特殊标记的第一标识符;
作用域划分单元,用于调用作用域分析器将源文件中的所有的作用域划分出来;
频率排序单元,用于对于每个作用域中的第一标识符按照其出现频率从高到低进行排序后得到第一标识符序列;
压缩编码单元,用于代码混淆模块通过哈夫曼编码依次对第一标识符序列中的第一标识符按照标识符长度进行压缩编码。
所述一种面向微控制器的压缩整合式源代码混淆系统可以运行于桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备中。所述一种面向微控制器的压缩整合式源代码混淆系统,可运行的系统可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述例子仅仅是一种面向微控制器的压缩整合式源代码混淆系统的示例,并不构成对一种面向微控制器的压缩整合式源代码混淆系统的限定,可以包括比例子更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述一种面向微控制器的压缩整合式源代码混淆系统还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述一种面向微控制器的压缩整合式源代码混淆系统运行系统的控制中心,利用各种接口和线路连接整个一种面向微控制器的压缩整合式源代码混淆系统可运行系统的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述一种面向微控制器的压缩整合式源代码混淆系统的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
尽管本公开的描述已经相当详尽且特别对几个所述实施例进行了描述,但其并非旨在局限于任何这些细节或实施例或任何特殊实施例,而是应当将其视作是通过参考所附权利要求考虑到现有技术为这些权利要求提供广义的可能性解释,从而有效地涵盖本公开的预定范围。此外,上文以发明人可预见的实施例对本公开进行描述,其目的是为了提供有用的描述,而那些目前尚未预见的对本公开的非实质性改动仍可代表本公开的等效改动。