CN108509773A - 一种源代码加固方法及装置 - Google Patents

一种源代码加固方法及装置 Download PDF

Info

Publication number
CN108509773A
CN108509773A CN201810147047.9A CN201810147047A CN108509773A CN 108509773 A CN108509773 A CN 108509773A CN 201810147047 A CN201810147047 A CN 201810147047A CN 108509773 A CN108509773 A CN 108509773A
Authority
CN
China
Prior art keywords
reinforcing
algorithm
source code
target
function
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.)
Granted
Application number
CN201810147047.9A
Other languages
English (en)
Other versions
CN108509773B (zh
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.)
Beijing Bang Bang Safety Technology Co Ltd
Original Assignee
Beijing Bang Bang Safety 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 Beijing Bang Bang Safety Technology Co Ltd filed Critical Beijing Bang Bang Safety Technology Co Ltd
Priority to CN201810147047.9A priority Critical patent/CN108509773B/zh
Publication of CN108509773A publication Critical patent/CN108509773A/zh
Application granted granted Critical
Publication of CN108509773B publication Critical patent/CN108509773B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了一种源代码加固方法及装置,可以获取待加固的目标源代码;确定所述目标源代码中的函数的加固权重;根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。由于该方法及装置可以依据待加固的源代码中的函数的加固权重,从预设的加固算法集合中自动选取合适的加固算法对所述源代码进行加固,因此,可以提高源代码的加固效率。

Description

一种源代码加固方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种源代码加固方法及装置。
背景技术
现如今,移动互联网、物联网、车联网等技术高速发展,终端的数量越来越多,终端中安装的应用程序也越来越多,这给人们的工作和生活带来了极大的便利。应用程序运行过程中会产生一些重要的信息,这引起了攻击者的极大兴趣,使得这些重要信息存在被泄露的风险。
目前,攻击者常使用反汇编、反编译和动态调试等工具,对应用程序的可执行文件进行逆向分析破解,获得应用程序的执行逻辑,从而非法窃取、非法篡改应用程序运行过程中产生的重要信息。
针对上述风险,现有技术常通过对应用程序的源代码进行加固,提高源代码经过编译生成的可执行文件的防逆向分析能力,降低应用程序运行过程中产生的重要信息被泄露的风险。但是,现有的源代码加固方法常常需要人工参与,例如,需要人工分析源代码的特点,并由人工选择合适的加固算法进行加固,导致加固效率低下。
发明内容
本申请实施例提供一种源代码加固方法及装置,以解决现有的源代码加固方法效率低的问题。
第一方面,本申请实施例提供一种源代码加固方法,所述方法包括:
获取待加固的目标源代码;
确定所述目标源代码中的函数的加固权重;
根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;
采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
第二方面,本申请实施例还提供一种源代码加固装置,包括:
获取模块,用于获取待加固的目标源代码;
加固权重确定模块,用于确定所述目标源代码中的函数的加固权重;
加固算法选取模块,用于根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;
加固模块,用于采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
第三方面,本申请实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的方法的步骤。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法的步骤。
本申请实施例采用的上述至少一个技术方案,由于可以依据待加固的源代码中的函数的加固权重,从预设的加固算法集合中自动选取合适的加固算法对所述源代码进行加固,因此,可以提高源代码的加固效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的一种源代码加固方法的一种具体实现方式的流程示意图;
图2为本申请实施例提供的一种源代码加固方法的另一种具体实现方式的流程示意图;
图3为本申请实施例提供的一种源代码加固装置的一种具体实现方式的结构示意图;
图4为本申请实施例提供的一种源代码加固装置的另一种具体实现方式的结构示意图;
图5为本申请实施例提供的一种源代码加固系统的结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决现有技术中的源代码加固方法加固效率低下的技术问题,本申请实施例提供了一种源代码加固方法及装置,下面分别进行说明。
需要说明的是,实施本申请实施例提供的一种源代码加固方法及装置的执行主体,可以是客户端,也可以是客户端对应的服务器,本申请实施例对实施上述方法及装置的具体实施主体不做限定。
下面先对本申请实施例提供的一种源代码加固方法进行说明。
如图1所示,本申请实施例提供的一种源代码加固方法,可以包括如下步骤:
步骤101、获取待加固的目标源代码。
待加固的目标源代码可以是需要加固的应用程序的源代码。这些应用程序例如可以是安装在用户终端中的APP(Application)。
步骤102、确定所述目标源代码中的函数的加固权重。
函数是源代码的基本组成部分,函数也是程序设计人员编写代码时最常用的语法结构。并且,由于函数能够反映源代码所要实现的业务的逻辑,因此,源代码中的函数常常成为攻击者逆向分析的主要对象,进而需要对源代码中的函数进行加固,以提高源代码和/或对源代码编译生成的可执行文件的防逆向分析能力。
在实际应用过程中,既可以确定目标源代码中的所有函数的加固权重,也可以仅确定目标源代码中的部分函数的加固权重,本申请实施例对此不做限定。
可以理解,虽然源代码中的函数数量众多,但是并非每一函数都是需要着重保护的重要函数,因此需要确定目标源代码中各函数的加固权重,以在后续加固过程中对各函数进行针对性的加固,而不是对所有的函数都采用相同的加固算法进行加固,从而达到兼顾目标源代码的加固效率和加固强度的目的。
在一种具体实施方式中,上述步骤102具体可以包括:根据预设指标确定所述目标源代码中的函数的加固权重。
其中,预设指标可以包括下列指标中的一种或多种:函数在所述目标源代码中被调用的次数、函数本身的复杂度和函数在所述目标源代码所要实现的业务逻辑中的重要程度,等等。
目标源代码中的某一函数的加固权重可以通过下式表示:
其中,η表示函数的加固权重,ai表示第i个预设指标,i=1,2,…,n,n表示预设指标的数量,ωai表示预设指标ai所反映的加固权重。
如果一个函数在目标源代码中被多次调用,说明该函数是一个较为重要的公共函数,可以设置相对较高的加固权重,如果一个函数被调用的次数为零,说明该函数是非公共函数,可以设置相对较低的加固权重。其中,函数被调用的次数可以通过对源代码进行统计获得。
如果一个函数本身较为复杂,则可以设置相对较高的加固权重,如果一个函数本身较为简单,则可以设置相对较低的加固权重。其中,一个函数本身是否复杂,通常可以通过下述两种方式来确定:一是,根据函数的控制流的复杂度确定函数的复杂度,例如,如果一个函数的嵌套层次较多则可以确定这个函数的控制流较为复杂;二是,根据函数的数据流的复杂度确定函数的复杂度,例如,如果一个函数中的变量被多次引用,且该变量的值被修改后,会引起该函数中的其他变量的值的改变,说明该函数的数据流较为复杂。
此外,如果一个函数在目标源代码所要实现的业务逻辑中相对来说较为重要,则可以对该函数设置相对较高的加固权重。例如,通常情况下,目标源代码中用于实现登录、用户身份认证或许可证(licence)鉴别的函数,以及重要的算法函数是相对比较重要的函数,因此可以设置相对较高的加固权重。
步骤103、根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法。
预设的加固算法集合中可以包括下列加固算法中的一种或多种:控制流扁平化、不透明谓词和冗余代码插入,等等。
其中,控制流扁平化,主要是将函数中的for语句、if-else语句、while语句等这些控制逻辑清晰的语句转换为相对模糊的switch-case语句,以增加攻击者重构函数的控制流的难度,从而提高源代码或可执行文件的防逆向分析能力。不透明谓词,主要是在将源代码中的分支跳转节点中的条件常量变换为数学运算,使逆向分析工具不能获得跳转逻辑。冗余代码插入可以使核心代码变得更为隐蔽。
当然,预设的加固算法集合中还可以包括现有的其他源代码加固算法,本申请实施例对此不做限定。
具体而言,上述步骤103可以包括:根据所述目标源代码中各函数的加固权重的大小,从预设的加固算法集合中选取至少一种目标加固算法。
通常情况下,函数的加固权重越大,针对该函数选择的加固算法的数量越多,和/或,针对该函数选择的加固算法也越复杂。
步骤104、采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
具体而言,步骤104可以包括:采用选取的所述至少一种目标加固算法对所述目标源代码中的相应函数进行加固。
本申请实施例提供的一种源代码加固方法,由于可以自动确定待加固的目标代码中的函数的加固权重,并根据确定出的加固权重自动从预设的加固算法集合中选取合适的目标加固算法,最后采用所选取的目标加固算法对所述目标源代码自动进行加固。整个过程中不需要人工参与,因此,可以提高源代码的加固效率,提升了用户体验。
在本申请的另一实施例中,如图2所示,在上述步骤103之前,本申请实施例提供的一种源代码加固方法还可以包括下述步骤:
步骤105、确定所述加固算法集合中的加固算法的加固效率。
可以通过事先统计获得预设的加固算法集合中的加固算法的加固效率,具体可以通过统计各加固算法加固同一源代码时的运行时间来确定各加固算法的加固效率。
相应的,上述步骤103可以包括:根据所述加固权重和所述加固效率,从所述预设的加固算法集合中选取至少一种目标加固算法。
在图1所示的实施例中,主要根据所述目标源代码中各函数的加固权重的大小,从预设的加固算法集合中选取至少一种目标加固算法。并且,函数的加固权重越大,针对该函数选择的加固算法的数量越多,和/或,针对该函数选择的加固算法也越复杂。
在本实施例中,除了考虑所述目标源代码中各函数的加固权重的大小外,还兼顾了加固算法的加固效率,当用户对加固效率有较高要求时,可以优先选择加固效率高的加固算法,如果用户对加固效率要求不高时,可以主要依据加固权重选取加固算法。
可以理解,根据加固权重和加固效率两者选取的加固算法,能够兼顾加固效果和加固效率,用户体验更佳。
相应于上述方法实施例,本申请实施例还提供了一种源代码加固装置,下面进行说明。
如图3所示,本申请实施例提供的一种源代码加固装置,可以包括:获取模块301、加固权重确定模块302、加固算法选取模块303和加固模块304。
获取模块301,用于获取待加固的目标源代码。
待加固的目标源代码可以是需要加固的应用程序的源代码。这些应用程序例如可以是安装在用户终端中的APP。
加固权重确定模块302,用于确定所述目标源代码中的函数的加固权重。
函数是源代码的基本组成部分,函数也是程序设计人员编写代码时最常用的语法结构。并且,由于函数能够反映源代码所要实现的业务的逻辑,因此,源代码中的函数常常成为攻击者逆向分析的主要对象,进而需要对源代码中的函数进行加固,以提高源代码和/或对源代码编译生成的可执行文件的防逆向分析能力。
在实际应用过程中,既可以确定目标源代码中的所有函数的加固权重,也可以仅确定目标源代码中的部分函数的加固权重,本申请实施例对此不做限定。
可以理解,虽然源代码中的函数数量众多,但是并非每一函数都是需要着重保护的重要函数,因此需要确定目标源代码中各函数的加固权重,以在后续加固过程中对各函数进行针对性的加固,而不是对所有的函数都采用相同的加固算法进行加固,从而达到兼顾目标源代码的加固效率和加固强度的目的。
在一种具体实施方式中,所述加固权重确定模块302,具体用于:根据预设指标确定所述目标源代码中的函数的加固权重。
其中,预设指标可以包括下列指标中的一种或多种:函数在所述目标源代码中被调用的次数、函数本身的复杂度和函数在所述目标源代码所要实现的业务逻辑中的重要程度,等等。
目标源代码中的某一函数的加固权重可以通过下式表示:
其中,η表示函数的加固权重,ai表示第i个预设指标,i=1,2,…,n,n表示预设指标的数量,ωai表示预设指标ai所反映的加固权重。
如果一个函数在目标源代码中被多次调用,说明该函数是一个较为重要的公共函数,可以设置相对较高的加固权重,如果一个函数被调用的次数为零,说明该函数是非公共函数,可以设置相对较低的加固权重。其中,函数被调用的次数可以通过对源代码进行统计获得。
如果一个函数本身较为复杂,则可以设置相对较高的加固权重,如果一个函数本身较为简单,则可以设置相对较低的加固权重。其中,一个函数本身是否复杂,通常可以通过下述两种方式来确定:一是,根据函数的控制流的复杂度确定函数的复杂度,例如,如果一个函数的嵌套层次较多则可以确定这个函数的控制流较为复杂;二是,根据函数的数据流的复杂度确定函数的复杂度,例如,如果一个函数中的变量被多次引用,且该变量的值被修改后,会引起该函数中的其他变量的值的改变,说明该函数的数据流较为复杂。
此外,如果一个函数在目标源代码所要实现的业务逻辑中相对来说较为重要,则可以对该函数设置相对较高的加固权重。例如,通常情况下,目标源代码中用于实现登录、用户身份认证或许可证(licence)鉴别的函数,以及重要的算法函数是相对比较重要的函数,因此可以设置相对较高的加固权重。
加固算法选取模块303,用于根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法。
预设的加固算法集合中可以包括下列加固算法中的一种或多种:控制流扁平化、不透明谓词和冗余代码插入,等等。
其中,控制流扁平化,主要是将函数中的for语句、if-else语句、while语句等这些控制逻辑清晰的语句转换为相对模糊的switch-case语句,以增加攻击者重构函数的控制流的难度,从而提高源代码或可执行文件的防逆向分析能力。不透明谓词,主要是在将源代码中的分支跳转节点中的条件常量变换为数学运算,使逆向分析工具不能获得跳转逻辑。冗余代码插入可以使核心代码变得更为隐蔽。
当然,预设的加固算法集合中还可以包括现有的其他源代码加固算法,本申请实施例对此不做限定。
具体而言,加固算法选取模块303,可以用于:根据所述目标源代码中各函数的加固权重的大小,从预设的加固算法集合中选取至少一种目标加固算法。
通常情况下,函数的加固权重越大,针对该函数选择的加固算法的数量越多,和/或,针对该函数选择的加固算法也越复杂。
加固模块304,用于采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
具体而言,加固模块304可以用于:采用选取的所述至少一种目标加固算法对所述目标源代码中的相应函数进行加固。
本申请实施例提供的一种源代码加固装置,由于可以自动确定待加固的目标代码中的函数的加固权重,并根据确定出的加固权重自动从预设的加固算法集合中选取合适的目标加固算法,最后采用所选取的目标加固算法对所述目标源代码自动进行加固。整个过程中不需要人工参与,因此,可以提高源代码的加固效率,提升了用户体验。
在本申请的另一实施例中,如图4所示,在图3所示的实施例的基础上,本申请实施例提供的一种源代码加固装置还可以包括:加固效率确定模块305,用于在所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法之前,确定所述加固算法集合中的加固算法的加固效率。
可以通过事先统计获得预设的加固算法集合中的加固算法的加固效率,具体可以通过统计各加固算法加固同一源代码时的运行时间来确定各加固算法的加固效率。
相应的,加固算法选取模块303,具体用于:根据所述加固权重和所述加固效率,从所述预设的加固算法集合中选取至少一种目标加固算法。
在图3所示的实施例中,主要根据所述目标源代码中各函数的加固权重的大小,从预设的加固算法集合中选取至少一种目标加固算法。并且,函数的加固权重越大,针对该函数选择的加固算法的数量越多,和/或,针对该函数选择的加固算法也越复杂。
在本实施例中,除了考虑所述目标源代码中各函数的加固权重的大小外,还兼顾了加固算法的加固效率,当用户对加固效率有较高要求时,可以优先选择加固效率高的加固算法,如果用户对加固效率要求不高时,可以主要依据加固权重选取加固算法。
在本申请的又一实施例中,如图5所示,本申请实施例还提供了一种源代码加固系统,该系统主要包括:客户端300、服务器400和代码库600。
其中,客户端300主要包括:获取模块301、加固权重确定模块302、加固算法选取模块303、加固模块304和第二通讯模块306;服务器400主要包括:第一通讯模块401和加固算法库402。
客户端300与服务器400通过第二通讯模块306和第一通讯模块401相互通信,并且服务器400中的加固算法库402中存储有预设的加固算法集合。
客户端300在进行目标源代码的加固时:利用获取模块301,从代码库600(也称用户代码管理服务器)中获取待加固的源代码501;利用加固权重确定模块302,确定待加固的源代码中的函数的加固权重;利用加固算法选取模块303,根据所述加固权重从加固算法库402中存储的预设的加固算法集合中选取至少一种目标加固算法;利用加固模块304,采用选取的所述至少一种目标加固算法对待加固的源代码进行加固,最终得到加固后的源代码502。
在该源代码加固系统中,加固模块304还可以将加固后的源代码502发送至代码库600进行保存。
本申请实施例提供的一种源代码加固系统,由于客户端300可以自动确定待加固的目标代码中的函数的加固权重,并根据确定出的加固权重自动从预设的加固算法集合中选取合适的目标加固算法,最后采用所选取的目标加固算法对所述目标源代码进行加固。整个过程中不需要人工参与,因此,可以提高源代码的加固效率,提升了用户体验。
图6示出了是本申请实施例提供的一种电子设备的结构示意图。请参考图6,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成源代码加固装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
获取待加固的目标源代码;
确定所述目标源代码中的函数的加固权重;
根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;
采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
上述如本申请图6所示实施例揭示的源代码加固装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行图6所示实施例中源代码加固装置执行的方法,并具体用于执行:
获取待加固的目标源代码;
确定所述目标源代码中的函数的加固权重;
根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;
采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
需要说明的是,本申请中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (12)

1.一种源代码加固方法,其特征在于,所述方法包括:
获取待加固的目标源代码;
确定所述目标源代码中的函数的加固权重;
根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;
采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
2.根据权利要求1所述的方法,其特征在于,所述确定所述目标源代码中的函数的加固权重,包括:
根据预设指标确定所述目标源代码中的函数的加固权重;
其中,所述预设指标包括下列指标中的一种或多种:函数在所述目标源代码中被调用的次数、函数本身的复杂度和函数在所述目标源代码所要实现的业务逻辑中的重要程度。
3.根据权利要求1所述的方法,其特征在于,所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法,包括:
根据所述目标源代码中各函数的加固权重的大小,从预设的加固算法集合中选取至少一种目标加固算法。
4.根据权利要求1所述的方法,其特征在于,在所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法之前,所述方法还包括:
确定所述加固算法集合中的加固算法的加固效率;则,
所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法,包括:
根据所述加固权重和所述加固效率,从所述预设的加固算法集合中选取至少一种目标加固算法。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述加固算法集合包括下列加固算法中的一种或多种:控制流扁平化、不透明谓词和冗余代码插入。
6.一种源代码加固装置,其特征在于,包括:
获取模块,用于获取待加固的目标源代码;
加固权重确定模块,用于确定所述目标源代码中的函数的加固权重;
加固算法选取模块,用于根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法;
加固模块,用于采用选取的所述至少一种目标加固算法对所述目标源代码进行加固。
7.根据权利要求6所述的装置,其特征在于,
所述加固权重确定模块,具体用于:根据预设指标确定所述目标源代码中的函数的加固权重;
其中,所述预设指标包括下列指标中的一种或多种:函数在所述目标源代码中被调用的次数、函数本身的复杂度和函数在所述目标源代码所要实现的业务逻辑中的重要程度。
8.根据权利要求6所述的装置,其特征在于,
所述加固算法选取模块,具体用于:根据所述目标源代码中各函数的加固权重的大小,从预设的加固算法集合中选取至少一种目标加固算法。
9.根据权利要求6所述的装置,其特征在于,
所述装置还包括:加固效率确定模块,用于在所述根据所述加固权重从预设的加固算法集合中选取至少一种目标加固算法之前,确定所述加固算法集合中的加固算法的加固效率;则
所述加固算法选取模块,具体用于:根据所述加固权重和所述加固效率,从所述预设的加固算法集合中选取至少一种目标加固算法。
10.根据权利要求6-9任一项所述的装置,其特征在于,
所述加固算法集合包括下列加固算法中的一种或多种:控制流扁平化、不透明谓词和冗余代码插入。
11.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的方法的步骤。
CN201810147047.9A 2018-02-12 2018-02-12 一种源代码加固方法及装置 Active CN108509773B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810147047.9A CN108509773B (zh) 2018-02-12 2018-02-12 一种源代码加固方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810147047.9A CN108509773B (zh) 2018-02-12 2018-02-12 一种源代码加固方法及装置

Publications (2)

Publication Number Publication Date
CN108509773A true CN108509773A (zh) 2018-09-07
CN108509773B CN108509773B (zh) 2022-08-02

Family

ID=63375647

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810147047.9A Active CN108509773B (zh) 2018-02-12 2018-02-12 一种源代码加固方法及装置

Country Status (1)

Country Link
CN (1) CN108509773B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110245848A (zh) * 2019-05-31 2019-09-17 口碑(上海)信息技术有限公司 程序代码的风险评估方法和装置
CN112668004A (zh) * 2019-10-16 2021-04-16 武汉斗鱼网络科技有限公司 一种基于llvm的函数校验方法及相关装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326694A (zh) * 2016-08-30 2017-01-11 北京鼎源科技有限公司 一种基于C源代码的混淆的Android应用加固方法
CN107122634A (zh) * 2017-04-26 2017-09-01 北京洋浦伟业科技发展有限公司 软件安装包的加固保护方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326694A (zh) * 2016-08-30 2017-01-11 北京鼎源科技有限公司 一种基于C源代码的混淆的Android应用加固方法
CN107122634A (zh) * 2017-04-26 2017-09-01 北京洋浦伟业科技发展有限公司 软件安装包的加固保护方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110245848A (zh) * 2019-05-31 2019-09-17 口碑(上海)信息技术有限公司 程序代码的风险评估方法和装置
CN112668004A (zh) * 2019-10-16 2021-04-16 武汉斗鱼网络科技有限公司 一种基于llvm的函数校验方法及相关装置
CN112668004B (zh) * 2019-10-16 2022-06-21 武汉斗鱼网络科技有限公司 一种基于llvm的函数校验方法及相关装置

Also Published As

Publication number Publication date
CN108509773B (zh) 2022-08-02

Similar Documents

Publication Publication Date Title
CN108595157B (zh) 区块链数据的处理方法、装置、设备和存储介质
US20210049715A1 (en) Blockchain-based data procesing method, apparatus, and electronic device
WO2017032265A1 (zh) 一种应用推送方法、装置及服务设备
TW201342110A (zh) 在狀態機晶格中之計數器操作
JP2009529720A5 (zh)
JP2018524713A (ja) 支払い閾値取得方法及び装置
CN108170656A (zh) 模板创建方法、文档创建方法、渲染方法和装置
CN108108260B (zh) 一种资源文件的校验方法及装置
CN111111176B (zh) 游戏中物体lod的管理方法、装置及电子设备
CN109542713A (zh) 一种验证方法及验证装置
CN108509772A (zh) 基于执行顺序和单点逻辑的源代码加固方法及装置
CN111679893A (zh) 运行系统构建方法、装置、电子设备及存储介质
CN105684027A (zh) 一种房产网的房源验证方法及系统
CN108509773A (zh) 一种源代码加固方法及装置
CN108009444A (zh) 全文搜索的权限控制方法、装置与计算机可读存储介质
CN103309676B (zh) 用于海洋数值模拟ROMS的Web服务封装方法以及系统
CN109542398B (zh) 一种业务系统生成方法、装置及计算机可读存储介质
CN110569038A (zh) 随机验证参数设计方法、装置、计算机设备及存储介质
CN109298941A (zh) 一种文件生成方法和装置
CN108446538A (zh) 基于状态、符号执行和单点逻辑的源代码加固方法及装置
CN113272785B (zh) 一种挂载文件系统的方法、终端设备及存储介质
CN108415709A (zh) 一种基于有限状态机加固源代码的方法及装置
CN106815221A (zh) 一种电信业务关系判定方法及装置
CN105677559B (zh) 一种检测方法及装置
US8352234B2 (en) Model generation based on a constraint and an initial model

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
GR01 Patent grant
GR01 Patent grant