本发明涉及计算机,尤其涉及一种基于llvm框架的软件代码保护方法、设备、存储介质及装置。
背景技术:
1、随着移动终端设备的普及、移动应用的发展,移动终端的安全问题越来越重要。而现有技术中攻击者可以通过对应用程序进行逆向分析了解程序函数运行逻辑,基于程序函数运行逻辑对应用程序进行攻击,从而导致移动终端存在严重安全隐患。
2、上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
技术实现思路
1、本发明的主要目的在于提供一种基于llvm框架的软件代码保护方法、设备、存储介质及装置,旨在解决现有技术中攻击者可以通过对应用程序进行逆向分析了解程序函数运行逻辑,基于程序函数运行逻辑对应用程序进行攻击,从而导致移动终端存在严重安全隐患的技术问题。
2、为实现上述目的,本发明提供一种基于llvm框架的软件代码保护方法,所述基于llvm框架的软件代码保护方法包括以下步骤:
3、基于llvm框架将待保护软件的源代码转换为中间代码;
4、将所述中间代码中的内存释放标记转换为兼容函数;
5、从转换后中间代码中抽取中间数据指令,并基于所述中间数据指令创建解释器函数代码;
6、在所述待保护软件的源代码中插入所述解释器函数代码生成所述待保护软件的混淆调用代码。
7、可选地,所述从转换后中间代码中抽取中间数据指令,并基于所述中间数据指令创建解释器函数代码的步骤,包括:
8、获取所述待保护软件中的待保护函数;
9、根据所述待保护函数从转换后中间代码中抽取中间数据指令;
10、基于所述中间数据指令创建解释器函数代码。
11、可选地,所述基于所述中间数据指令创建解释器函数代码的步骤,包括:
12、将所述中间数据指令存放在数组中,以供解释器函数调用;
13、基于存放在数组中的中间数据指令创建解释器函数代码。
14、可选地,所述将所述中间数据指令存放在数组中,以供解释器函数调用的步骤,包括:
15、获取所述中间数据指令中各表达式的全局变量、局部变量、类型、参数值以及返回值;
16、将所述全局变量、所述局部变量、所述类型、所述参数值以及所述返回值存放在数组中,以供解释器函数调用。
17、可选地,所述在所述待保护软件的源代码中插入所述解释器函数代码生成所述待保护软件的混淆调用代码的步骤,包括:
18、确定所述待保护函数在所述待保护软件的源代码中的位置;
19、在所述位置插入所述解释器函数代码生成所述待保护软件的混淆调用代码。
20、可选地,所述在所述待保护软件的源代码中插入所述解释器函数代码生成所述待保护软件的混淆调用代码的步骤之后,还包括:
21、在运行所述待保护软件时,执行平台相关指令,以解释执行所述混淆调用代码;
22、所述平台相关指令基于所述llvm框架生成,所述平台相关指令与所述待保护软件预先关联。
23、可选地,所述基于llvm框架将待保护软件的源代码转换为中间代码的步骤之前,还包括:
24、基于llvm框架对待保护软件的源代码进行分析;
25、根据分析结果生成所述源代码的抽象语法树。
26、可选地,所述基于llvm框架对待保护软件的源代码进行分析的步骤,包括:
27、基于llvm框架对待保护软件的源代码进行词法分析;
28、基于llvm框架对待保护软件的源代码进行语法分析;
29、基于llvm框架对待保护软件的源代码进行语义分析。
30、可选地,所述llvm框架的编译器前端为clang。
31、可选地,所述内存释放标记包括retain、release以及autorelease中的至少一种。
32、可选地,所述待保护软件为基于objective-c语言开发的软件。
33、此外,为实现上述目的,本发明还提出一种基于llvm框架的软件代码保护设备,所述基于llvm框架的软件代码保护设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于llvm框架的软件代码保护程序,所述基于llvm框架的软件代码保护程序配置为实现如上文所述的基于llvm框架的软件代码保护方法。
34、此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有基于llvm框架的软件代码保护程序,所述基于llvm框架的软件代码保护程序被处理器执行时实现如上文所述的基于llvm框架的软件代码保护方法。
35、此外,为实现上述目的,本发明还提出一种基于llvm框架的软件代码保护装置,其特征在于,所述基于llvm框架的软件代码保护装置包括:源码转换模块、标记转换模块、代码创建模块以及代码混淆模块;
36、所述源码转换模块,用于基于llvm框架将待保护软件的源代码转换为中间代码;
37、所述标记转换模块,用于将所述中间代码中的内存释放标记转换为兼容函数;
38、所述代码创建模块,用于从转换后中间代码中抽取中间数据指令,并基于所述中间数据指令创建解释器函数代码;
39、所述代码混淆模块,用于在所述待保护软件的源代码中插入所述解释器函数代码生成所述待保护软件的混淆调用代码。
40、可选地,所述代码创建模块,还用于获取所述待保护软件中的待保护函数;
41、所述代码创建模块,还用于根据所述待保护函数从转换后中间代码中抽取中间数据指令;
42、所述代码创建模块,还用于基于所述中间数据指令创建解释器函数代码。
43、可选地,所述代码创建模块,还用于将所述中间数据指令存放在数组中,以供解释器函数调用;
44、所述代码创建模块,还用于基于存放在数组中的中间数据指令创建解释器函数代码。
45、可选地,所述代码创建模块,还用于获取所述中间数据指令中各表达式的全局变量、局部变量、类型、参数值以及返回值;
46、所述代码创建模块,还用于将所述全局变量、所述局部变量、所述类型、所述参数值以及所述返回值存放在数组中,以供解释器函数调用。
47、可选地,所述代码创建模块,还用于确定所述待保护函数在所述待保护软件的源代码中的位置;
48、所述代码创建模块,还用于在所述位置插入所述解释器函数代码生成所述待保护软件的混淆调用代码。
49、可选地,所述基于llvm框架的软件代码保护装置还包括:代码保护模块;
50、所述代码保护模块,用于在运行所述待保护软件时,执行平台相关指令,以解释执行所述混淆调用代码;
51、所述平台相关指令基于所述llvm框架生成,所述平台相关指令与所述待保护软件预先关联。
52、可选地,所述基于llvm框架的软件代码保护装置还包括:源代码分析模块;
53、所述源代码分析模块,用于基于llvm框架对待保护软件的源代码进行分析;
54、所述源代码分析模块,还用于根据分析结果生成所述源代码的抽象语法树。
55、在本发明中,公开了基于llvm框架将待保护软件的源代码转换为中间代码,将中间代码中的内存释放标记转换为兼容函数,从转换后中间代码中抽取中间数据指令,并基于中间数据指令创建解释器函数代码,在待保护软件的源代码中插入解释器函数代码生成待保护软件的混淆调用代码;由于本发明通过llvm框架的代码虚拟化对待保护软件的源代码进行代码混淆,从而能够增加代码语言的复杂度,提高代码的破解难度,进而能够实现软件代码保护。
1.一种基于llvm框架的软件代码保护方法,其特征在于,所述基于llvm框架的软件代码保护方法包括以下步骤:
2.如权利要求1所述的基于llvm框架的软件代码保护方法,其特征在于,所述从转换后中间代码中抽取中间数据指令,并基于所述中间数据指令创建解释器函数代码的步骤,包括:
3.如权利要求2所述的基于llvm框架的软件代码保护方法,其特征在于,所述基于所述中间数据指令创建解释器函数代码的步骤,包括:
4.如权利要求3所述的基于llvm框架的软件代码保护方法,其特征在于,所述将所述中间数据指令存放在数组中,以供解释器函数调用的步骤,包括:
5.如权利要求2所述的基于llvm框架的软件代码保护方法,其特征在于,所述在所述待保护软件的源代码中插入所述解释器函数代码生成所述待保护软件的混淆调用代码的步骤,包括:
6.如权利要求1至5中任一项所述的基于llvm框架的软件代码保护方法,其特征在于,所述在所述待保护软件的源代码中插入所述解释器函数代码生成所述待保护软件的混淆调用代码的步骤之后,还包括:
7.如权利要求1至5中任一项所述的基于llvm框架的软件代码保护方法,其特征在于,所述基于llvm框架将待保护软件的源代码转换为中间代码的步骤之前,还包括:
8.一种基于llvm框架的软件代码保护设备,其特征在于,所述基于llvm框架的软件代码保护设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于llvm框架的软件代码保护程序,所述基于llvm框架的软件代码保护程序被所述处理器执行时实现如权利要求1至7中任一项所述的基于llvm框架的软件代码保护方法。
9.一种存储介质,其特征在于,所述存储介质上存储有基于llvm框架的软件代码保护程序,所述基于llvm框架的软件代码保护程序被处理器执行时实现如权利要求1至7中任一项所述的基于llvm框架的软件代码保护方法。
10.一种基于llvm框架的软件代码保护装置,其特征在于,所述基于llvm框架的软件代码保护装置包括:源码转换模块、标记转换模块、代码创建模块以及代码混淆模块;
