CN117633734A - 代码编译的方法、装置及电子设备 - Google Patents

代码编译的方法、装置及电子设备 Download PDF

Info

Publication number
CN117633734A
CN117633734A CN202311705469.0A CN202311705469A CN117633734A CN 117633734 A CN117633734 A CN 117633734A CN 202311705469 A CN202311705469 A CN 202311705469A CN 117633734 A CN117633734 A CN 117633734A
Authority
CN
China
Prior art keywords
code
key
processed
codes
compiling
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311705469.0A
Other languages
English (en)
Inventor
孔祥锐
袁聪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Kunyi Software Technology Co ltd
Original Assignee
Shanghai Kunyi Software Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Kunyi Software Technology Co ltd filed Critical Shanghai Kunyi Software Technology Co ltd
Priority to CN202311705469.0A priority Critical patent/CN117633734A/zh
Publication of CN117633734A publication Critical patent/CN117633734A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本申请涉及一种代码编译的方法、装置及电子设备,包括获取待编译代码,根据预设规则,提取待处理关键代码,生成与所述待处理代码功能相同的替代关键代码,将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译。通过本申请,能在编译过程中自动生成替代微内核关键代码,并将替代微内核关键代码进行混淆和嵌入到代码工程中,达到了隐藏原始微内核关键代码及其所处的代码工程的位置的目的。

Description

代码编译的方法、装置及电子设备
技术领域
本申请涉及计算机领域,尤其涉及一种代码编译的方法、装置及电子设备。
背景技术
在当前的软件开发过程中,关键代码的保护和安全性变得越来越重要。关键代码是指实现软件核心功能的代码,包含了软件的核心算法和逻辑。然而,由于关键代码的重要性,它们也成为了黑客和逆向工程师攻击的目标。为了保护关键代码的安全性和保护知识产权,需要采取一些措施来隐藏关键代码的真实结构和形式。
已有技术中存在一些方法来隐藏关键代码,例如使用加密算法对关键代码进行加密,或者将关键代码拆分成多个模块并分散在不同的文件中。然而,这些方法存在一些问题。加密算法需要在运行时解密关键代码,这会增加软件的运行开销。
发明内容
有鉴于此,本申请提出了一种代码编译的方法,以解决上述背景技术所体现的问题。
根据本申请的一方面,提供了一种代码编译的方法,包括:
获取待编译代码;
根据预设规则,提取待处理关键代码;
生成与所述待处理代码功能相同的替代关键代码;
将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译。
作为本申请的一种可选实施方案,可选地,生成与所述待处理代码功能相同的替代关键代码,包括:
根据预设脚本对所述待处理关键代码进行组合拼接处理,生成替代关键代码;
所述替代关键代码的形式和结构与所述待处理关键代码不同。
作为本申请的一种可选实施方案,可选地,所述预设脚本,还包括:
根据预设的组合拼接规则编写所述预设脚本;
所述组合拼接规则用于对所述待处理关键代码的片段进行识别,能对识别的所述待处理关键代码的片段进行组合拼接处理。
作为本申请的一种可选实施方案,可选地,还包括:
对所述替代关键代码进行混淆处理,所述混淆处理包括重命名变量、删除无用代码、添加冗余代码、替换常量中的至少一种。
作为本申请的一种可选实施方案,可选地,将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译,包括:
将所述替代关键代码替代所述待处理关键代码后,修改Makefile编译框架;
根据已修改的所述Makefile编译框架对待编译代码进行编译,解析所述待编译代码,生成微内核镜像文件。
作为本申请的一种可选实施方案,可选地,还包括:
生成所述微内核镜像文件后,删除所述替代关键代码。
作为本申请的一种可选实施方案,可选地,还包括:
若没有生成所述微内核镜像文件,删除所述替代关键代码。
根据本申请的二方面,提供了一种代码编译的装置,包括:
获取待编译代码模块,用于获取待编译代码;
提取关键代码模块,用于根据预设规则,提取待处理关键代码;
生成替代关键代码模块,用于生成与所述待处理代码功能相同的替代关键代码;
编译模块,用于将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译。
作为本申请的一种可选实施方案,可选地,所述编译模块,包括:
修改框架模块,用于将所述替代关键代码替代所述待处理关键代码后,修改Makefile编译框架;
生成微内核镜像文件模块,用于根据已修改的所述Makefile编译框架对待编译代码进行编译,解析所述待编译代码,生成微内核镜像文件。
根据本申请的三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令时实现上述所述的一种代码编译的方法。
本申请的有益效果:
通过本发明,在编译过程中自动生成替代微内核关键代码,并将替代微内核关键代码进行混淆和嵌入到代码工程中,达到了隐藏原始微内核关键代码的目的,当全套微内核代码工程被获取时,也会因替代微内核关键代码所处的工程位置和理解难度,无法轻易读懂和理解进而获得原始微内核关键代码。
根据下面参考附图对示例性实施例的详细说明,本申请的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本申请的示例性实施例、特征和方面,并且用于解释本申请的原理。
图1示出本申请实施例的一种代码编译的方法的流程图;
图2示出本申请实施例的一种代码编译的方法的架构流程图;
图3示出本申请实施例的一种代码编译的装置的框图;
具体实施方式
以下将参考附图详细说明本申请的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
其中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请或简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本申请,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本申请同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本申请的主旨。
实施例1
图1示出根据本申请一实施例的一种代码编译的方法的流程图。当需要对关键代码进行隐藏时,可以通过如下方法,避免关键代码的泄露和盗用。如图1所示,该流程图包括:
S100、获取待编译代码;
待编译代码可以通过代码工程中的代码源文件获取。
S200、根据预设规则,提取待处理关键代码;
待编译代码中有着实现软件核心功能的代码,包含了软件的核心算法和逻辑,为了保护这一部分实现软件核心功能的代码,需要进行提取处理。
S300、生成与所述待处理代码功能相同的替代关键代码;
一个功能可以由多种不同的代码来实现,因此对于需要进行保护的实现软件核心功能的代码,可以用另一种不同的代码来代替实现核心功能的代码。
S400、将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译。
编译完成后,即使代码源文件被获取,得到的只是替代关键代码,而不是原始的待处理关键代码。
作为本申请的一种可选实施方案,可选地,生成与所述待处理代码功能相同的替代关键代码,包括:
根据预设脚本对所述待处理关键代码进行组合拼接处理,生成替代关键代码;
在本实施例中,使用python脚本生成替代关键代码,例如需要通过python脚本生成一个简单的C代码时,先根据python语言的算法特点,编写生成C代码的规则的脚本,编写完成后,调用该脚本,即可生成所需的C代码。
示例性地,如下代码所示,该代码编写了生成一个C代码对应的C代码规则;
其中注释表明为此脚本用于生成C代码函数的C代码规则,在编写C代码规则时,通过定义了一个python函数generate_c_code_rule,用于生成C代码规则。
根据前述脚本中的规则生成的C代码如下:
通过该脚本,函数接受变量名和值作为参数,然后使用f-string格式化字符串的方式生成C代码。最后,调用这个函数并打印生成的C代码规则。通过这种方式,可以在python中动态生成C代码,以满足特定需求。还可以使用shell、doc等生成替代关键代码,用户根据需求而定,此处不进行限制。
所述替代关键代码的形式和结构与所述待处理关键代码不同。
生成的替代关键代码具有与原始关键代码相似的功能,但具有不同的结构和形式,例如结构的不同体现在把核心代码架构从简单变得复杂,形式的不同体现在向代码流程加入一些干扰分支或者加入一些干扰的代码,实际不会进入的分支或者不会执行的代码,增加理解难度,使得其难以被逆向工程师解析和破解。
生成的替代关键代码,是微内核框架中最重要的算法核心,当微内核代码因泄露或者开源后,防止盗用者能够轻易看到微内核中最核心的算法和思想,对微内核核心架构的流出起了一定防止作用。
作为本申请的一种可选实施方案,可选地,所述预设脚本,还包括:
根据预设的组合拼接规则编写所述预设脚本;
根据脚本实现的作用而编写脚本,组合拼接规则的具体内容由用户需求而定,此处不进行限定。
所述组合拼接规则用于对所述待处理关键代码的片段进行识别,能对识别的所述待处理关键代码的片段进行组合拼接处理。
在本实施例中,提取的待处理关键代码为多个片段,对于多个片段的代码,希望能通过脚本来自动识别并且将片段组合拼接,则需要根据组合拼接规则编写脚本。
作为本申请的一种可选实施方案,可选地,还包括:
对所述替代关键代码进行混淆处理,所述混淆处理包括重命名变量、删除无用代码、添加冗余代码、替换常量中的至少一种。
在本实施例中,替代关键代码属于C代码,对于C代码的混淆,可以使用一些专门的工具来进行处理。这些工具通常会对C代码进行重命名、添加无用代码、修改控制流、加密字符串等操作,以增加代码的复杂性,使得代码难以被理解和分析。以下是一些常用的C代码混淆工具的举例:
Obfuscator-LLVM:这是基于LLVM编译器框架的一个C/C++代码混淆工具,可以对C/C++代码进行混淆处理。
Stunnix C/C++Obfuscator:这是一个商业的C/C++代码混淆工具,可以对C/C++代码进行混淆处理,并提供了丰富的混淆选项。
C-Obfuscator:这是一个简单的C代码混淆工具,可以对C代码进行重命名、添加无用代码等处理。
在本实施例中,选择Obfuscator-LLVM作为C代码混淆工具的例子。Obfuscator-LLVM是一个开源的工具,基于LLVM编译器框架,具有良好的稳定性和丰富的混淆选项,适用于大多数C/C++项目。
示例性地,使用Obfuscator-LLVM对以下原始代码进行了简单的混淆处理,假设该原始代码如下:
经过Obfuscator-LLVM混淆处理后的代码:
本次混淆处理包括函数名的修改、变量名的修改以及将原始的main函数改为调用新的函数。这些处理使得代码结构变得更加复杂,增加了代码的理解难度。Obfuscator-LLVM提供了丰富的混淆选项,可以根据具体需求对混淆处理进行定制,满足不同项目的需求。
通过代码混淆技术,使替代关键代码难以被理解和分析,增加攻击者的难度和成本,使得攻击者不得不花费更多的时间和资源来理解和分析代码,进而提高了关键代码的安全性。
作为本申请的一种可选实施方案,可选地,将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译,包括:
将所述替代关键代码替代所述待处理关键代码后,修改Makefile编译框架;
替代关键代码的结构和形式与所述待处理关键代码不同,当替代关键代码嵌入到整个代码工程的对应位置时,为了确保编译器正确编译,根据替代关键代码的结构和形式来修改Makefile编译框架。
修改Makefile编译框架是一个复杂的任务,需要考虑代码工程的结构、依赖关系和编译规则等多个方面。在本实施例中,可以通过以下方法自动化修改Makefile编译框架的过程。
使用构建工具,现代的构建工具如CMake、Autotools等可以自动管理工程的构建过程,包括自动发现新的源文件、自动生成Makefile等功能。可以使用这些工具来管理工程的构建过程,这些工具具有强大的自动化能力。
编写脚本,比如,可以编写一个python脚本来将临时生成的C代码自动复制到工程目录中,并根据需要修改Makefile。这个脚本可以根据具体的需求来实现自定义的逻辑。
根据已修改的所述Makefile编译框架对待编译代码进行编译,解析所述待编译代码,生成微内核镜像文件。
在编译过程中,编译器会将混淆过的替代关键代码与其他代码一起集成编译,要确保混淆过的替代关键代码能够被编译器正确的解析出来,从而生成微内核镜像文件。
作为本申请的一种可选实施方案,可选地,还包括:
生成所述微内核镜像文件后,删除所述替代关键代码。
生成微内核镜像文件后,执行删除替代关键代码的程序,至此编译流程结束。
作为本申请的一种可选实施方案,可选地,还包括:
若没有生成所述微内核镜像文件,删除所述替代关键代码。
若是因为Makefile编译框架与替代关键代码的不兼容导致无法生成微内核镜像文件,依旧执行删除替代关键代码的程序。
删除替代关键代码,进一步确保不会泄露关键代码的信息,从而再次保证了关键代码的安全性。
参见图2,对需要隐藏的实现核心功能的关键代码,可以调用脚本自动生成内核关键代码,对生成的内核关键代码进一步进行混淆处理,混淆处理完成后再调用脚本将内核关键代码嵌入到内核镜像编译的代码工程中,并自动更新对应的Makefile编译框架,其中在代码工程中加入删除内核关键代码的代码,在编译时,无论是否成功生成微内核镜像文件,皆删除内核关键代码。
通过本实施例的方法,能够隐藏核心代码,让篡改或者盗用者无法轻易获取完整的微内核代码工程,即使获取到了全套微内核代码工程,也无法轻易读懂和理解,进一步隐藏了核心代码在代码工程的位置。
实施例2
基于前述方法相同的原理,还提出一种代码编译的装置,参见图3,本公开实施例的一种代码编译的装置100包括:
110、获取待编译代码模块,用于获取待编译代码;
120、提取关键代码模块,用于根据预设规则,提取待处理关键代码;
130、生成替代关键代码模块,用于生成与所述待处理代码功能相同的替代关键代码;
140、编译模块,用于将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译。
作为本申请的一种可选实施方案,可选地,所述编译模块,包括:
141、修改框架模块,用于将所述替代关键代码替代所述待处理关键代码后,修改Makefile编译框架;
142、生成微内核镜像文件模块,用于根据已修改的所述Makefile编译框架对待编译代码进行编译,解析所述待编译代码,生成微内核镜像文件。
显然,本领域的技术人员应该明白,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各控制方法的实施例的流程。上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各控制方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)、随机存储记忆体(RandomAccessMemory,RAM)、快闪存储器(FlashMemory)、硬盘(HardDiskDrive,缩写:HDD)或固态硬盘(Solid-StateDrive,SSD)等;存储介质还可以包括上述种类的存储器的组合。
实施例3
更进一步的,提出一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令时实现实施例1所述的一种代码编译的方法。
本公开实施例的电子设备包括处理器以及用于存储处理器可执行指令的存储器。其中,处理器被配置为执行可执行指令时实现前面任一所述的一种代码编译的方法。
需要说明的是,处理器的个数可以为一个或多个。同时,在本公开实施例的电子设备中,还可以包括输入装置和输出装置。其中,处理器、存储器、输入装置和输出装置之间可以通过总线连接,也可以通过其他方式连接,此处不进行具体限定。
存储器作为一种代码编译的方法计算机可读存储介质,可用于存储软件程序、计算机可执行程序和各种模块,如:本公开实施例的一种代码编译的方法所对应的程序或模块。处理器通过运行存储在存储器中的软件程序或模块,从而执行电子设备的各种功能应用及数据处理。
输入装置可用于接收输入的数字或信号。其中,信号可以为产生与设备/终端/服务器的用户设置以及功能控制有关的键信号。输出装置可以包括显示屏等显示设备。
以上已经描述了本申请的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (10)

1.一种代码编译的方法,其特征在于,包括:
获取待编译代码;
根据预设规则,提取待处理关键代码;
生成与所述待处理代码功能相同的替代关键代码;
将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译。
2.根据权利要求1所述的代码编译的方法,其特征在于,生成与所述待处理代码功能相同的替代关键代码,包括:
根据预设脚本对所述待处理关键代码进行组合拼接处理,生成替代关键代码;
所述替代关键代码的形式和结构与所述待处理关键代码不同。
3.根据权利要求2所述的代码编译的方法,其特征在于,所述预设脚本,还包括:
根据预设的组合拼接规则编写所述预设脚本;
所述组合拼接规则用于对所述待处理关键代码的片段进行识别,能对识别的所述待处理关键代码的片段进行组合拼接处理。
4.根据权利要求1所述的代码编译的方法,其特征在于,还包括:
对所述替代关键代码进行混淆处理,所述混淆处理包括重命名变量、删除无用代码、添加冗余代码、替换常量中的至少一种。
5.根据权利要求1所述的代码编译的方法,其特征在于,将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译,包括:
将所述替代关键代码替代所述待处理关键代码后,修改Makefile编译框架;
根据已修改的所述Makefile编译框架对待编译代码进行编译,解析所述待编译代码,生成微内核镜像文件。
6.根据权利要求5所述的代码编译的方法,其特征在于,还包括:
生成所述微内核镜像文件后,删除所述替代关键代码。
7.根据权利要求5所述的代码编译的方法,其特征在于,还包括:
若没有生成所述微内核镜像文件,删除所述替代关键代码。
8.一种代码编译的装置,其特征在于,包括:
获取待编译代码模块,用于获取待编译代码;
提取关键代码模块,用于根据预设规则,提取待处理关键代码;
生成替代关键代码模块,用于生成与所述待处理代码功能相同的替代关键代码;
编译模块,用于将所述替代关键代码替代所述待处理关键代码后,对所述待编译代码进行编译。
9.根据权利要求8所述的代码编译的装置,其特征在于,所述编译模块,包括:
修改框架模块,用于将所述替代关键代码替代所述待处理关键代码后,修改Makefile编译框架;
生成微内核镜像文件模块,用于根据已修改的所述Makefile编译框架对待编译代码进行编译,解析所述待编译代码,生成微内核镜像文件。
10.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述可执行指令时实现权利要求1至7中任意一项所述的一种代码编译的方法。
CN202311705469.0A 2023-12-12 2023-12-12 代码编译的方法、装置及电子设备 Pending CN117633734A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311705469.0A CN117633734A (zh) 2023-12-12 2023-12-12 代码编译的方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311705469.0A CN117633734A (zh) 2023-12-12 2023-12-12 代码编译的方法、装置及电子设备

Publications (1)

Publication Number Publication Date
CN117633734A true CN117633734A (zh) 2024-03-01

Family

ID=90036238

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311705469.0A Pending CN117633734A (zh) 2023-12-12 2023-12-12 代码编译的方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN117633734A (zh)

Similar Documents

Publication Publication Date Title
US11042645B2 (en) Auto-remediation workflow for computer security testing utilizing pre-existing security controls
US9195476B2 (en) System and method for aggressive self-modification in dynamic function call systems
CN102193810B (zh) 模块间内联候选标识
US8176473B2 (en) Transformations for software obfuscation and individualization
CN102341806B (zh) 软件保护
CN105631337B (zh) 控制机器代码的本机图像访问操作系统资源的系统及方法
US20110271350A1 (en) method for protecting software
JP7242675B2 (ja) コンパイル装置及び方法
US11868465B2 (en) Binary image stack cookie protection
JP2006318464A (ja) 実行可能コードのコピーについての固有の識別を生成する方法及びその管理
CN108733990B (zh) 一种基于区块链的文件保护方法及终端设备
CN108446538B (zh) 基于状态、符号执行和单点逻辑的源代码加固方法及装置
JP2006318465A (ja) 実行可能コードのコピーについての固有の識別を生成する方法及びその管理
US9417871B2 (en) Automatic generation of certificate of origin (COO) for software systems
CN117633734A (zh) 代码编译的方法、装置及电子设备
CN116249980A (zh) 通过异构加密的软件访问
CN112541188B (zh) 阻止应用程序代码被静态分析的方法及装置
CN108446541B (zh) 基于有限状态机和符号执行的源代码加固方法及装置
WO2023156571A1 (en) Protecting software
KR20240009510A (ko) 앤티프래절 소프트웨어 시스템들
EP3522006A1 (en) Method for protecting an executable code
CN114417266A (zh) 敏感代码的保护方法、装置、计算机设备及存储介质
CN116795371A (zh) 条件编译方法、装置、设备及介质
WO2018158909A1 (ja) 情報処理装置およびアクセス管理プログラム

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination