CN112434265B - 一种程序代码的保护方法、装置及存储介质 - Google Patents

一种程序代码的保护方法、装置及存储介质 Download PDF

Info

Publication number
CN112434265B
CN112434265B CN202011366628.5A CN202011366628A CN112434265B CN 112434265 B CN112434265 B CN 112434265B CN 202011366628 A CN202011366628 A CN 202011366628A CN 112434265 B CN112434265 B CN 112434265B
Authority
CN
China
Prior art keywords
code
intermediate language
target program
language code
decryption
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.)
Active
Application number
CN202011366628.5A
Other languages
English (en)
Other versions
CN112434265A (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 Senseshield Technology Co Ltd
Original Assignee
Beijing Senseshield 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 Senseshield Technology Co Ltd filed Critical Beijing Senseshield Technology Co Ltd
Priority to CN202011366628.5A priority Critical patent/CN112434265B/zh
Publication of CN112434265A publication Critical patent/CN112434265A/zh
Application granted granted Critical
Publication of CN112434265B publication Critical patent/CN112434265B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

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

Abstract

本申请公开了一种程序代码的保护方法、装置及存储介质。所述方法包括:接收对目标程序进行保护的触发事件;获取所述目标程序的中间语言代码;对所述中间语言代码进行加密;在加密完成后,为所述目标程序附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。采用本申请所提供的方案,可以对目标程序的中间语言代码进行加密,从而避免非法用户对中间语言代码的获取,另外,通过一段纯代码即可实现对程序的解密和保护,而无需额外部署完整的保护程序,减小了目标程序的发行体积。

Description

一种程序代码的保护方法、装置及存储介质
技术领域
本申请涉及程序开发领域,特别涉及一种程序代码的保护方法、装置及存储介质。
背景技术
.NET程序开发具有便捷跨平台的优点,但是其安全性并不高,反编译以及破解门槛很低。例如,非法用户可以获取程序的中间语言代码,通过对中间语言代码的解读以实现对.NET程序的反编译,对程序开发者的利益造成极大的损失。
为了防止.NET程序被非法利用,亟需提供一种程序代码的保护方法,以对.NET程序进行保护,从而加大反编译的难度。
发明内容
本申请实施例的目的在于提供一种程序代码的保护方法,包括:
接收对目标程序进行保护的触发事件;
获取所述目标程序的中间语言代码;
对所述中间语言代码进行加密;
在加密完成后,为所述目标程序附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。
本申请的有益效果在于:可以对目标程序的中间语言代码进行加密,从而避免非法用户对中间语言代码的获取,另外,通过一段纯代码即可实现对程序的解密和保护,而无需额外部署完整的保护程序,减小了目标程序的发行体积。
在一个实施例中,所述方法还包括:
获取目标程序的类型;
根据所述目标程序的类型判断所述中间语言代码是否为可加密代码。
在一个实施例中,所述对所述中间语言代码进行加密,包括:
获取对所述中间语言进行加密的密钥;
根据所述密钥对所述中间语言代码进行加密。
在一个实施例中,所述方法还包括:
在根据所述密钥对所述中间语言代码进行加密之后,根据所述密钥生成解密代码。
本申请还提供一种程序代码的保护方法,包括:
在检测到目标程序运行时,对所述目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;
对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码;
根据所述机器码运行所述目标程序。
在一个实施例中,所述对所述目标程序对应的中间语言代码进行解密,包括:
获取解密代码;
执行所述解密代码,以通过所述解密代码对所述目标程序对应的中间语言代码进行解密。
在一个实施例中,所述解密代码通过以下方式对所述目标程序对应的中间语言代码进行解密:
在所述解密代码执行时,基于对所述中间语言代码进行解密的密钥修改JIT编译器中的函数,以使所述JIT编译器具备对所述目标程序对应的中间语言代码解密的功能;
运行所述JIT编译器,以对所述中间语言代码进行解密。
在一个实施例中,所述对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码,包括:
当所述JIT编译器对所述中间语言代码进行解密之后,以用户不可见的方式将所述解密后的中间语言代码输入至所述JIT编译器;
继续运行所述JIT编译器,以使所述JIT编译器通过对所述解密后的中间语言代码进行编译得到所述目标程序对应的机器码。
本申请还提供一种程序代码的保护装置,包括:
接收模块,用于接收对目标程序进行保护的触发事件;
获取模块,用于获取所述目标程序的中间语言代码;
加密模块,用于对所述中间语言代码进行加密;
附加模块,用于在加密完成后,为所述目标程序的入口点附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。
在一个实施例中,所述装置还包括:
类型获取模块,用于获取目标程序的类型;
判断模块,用于根据所述目标程序的类型判断所述中间语言代码是否为可加密代码。
在一个实施例中,加密模块,包括:
获取子模块,用于获取对所述中间语言进行加密的密钥;
加密子模块,用于根据所述密钥对所述中间语言代码进行加密。
在一个实施例中,所述装置还包括:
生成模块,用于在根据所述密钥对所述中间语言代码进行加密之后,根据所述密钥生成解密代码。
本申请还提供一种程序代码的保护装置,包括:
解密模块,用于在检测到目标程序运行时,对所述目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;
编译模块,用于对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码;
运行模块,用于根据所述机器码运行所述目标程序。
本申请还提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由加密装置的处理器执行时,使得加密装置能够执行一种程序代码的保护方法,包括:
接收对目标程序进行保护的触发事件;
获取所述目标程序的中间语言代码;
对所述中间语言代码进行加密;
在加密完成后,为所述目标程序附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。
所述存储介质中的指令还包括:
获取目标程序的类型;
根据所述目标程序的类型判断所述中间语言代码是否为可加密代码。
所述存储介质中的指令还包括:
所述对所述中间语言代码进行加密,包括:
获取对所述中间语言进行加密的密钥;
根据所述密钥对所述中间语言代码进行加密。
所述存储介质中的指令还包括:
在根据所述密钥对所述中间语言代码进行加密之后,根据所述密钥生成解密代码。
本申请还提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由解密装置的处理器执行时,使得解密装置能够执行一种程序代码的保护方法,包括:
在检测到目标程序运行时,对所述目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;
对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码;
根据所述机器码运行所述目标程序。
所述存储介质中的指令还包括:
所述对所述目标程序对应的中间语言代码进行解密,包括:
获取解密代码;
执行所述解密代码,以通过所述解密代码对所述目标程序对应的中间语言代码进行解密。
所述存储介质中的指令还包括:
所述解密代码通过以下方式对所述目标程序对应的中间语言代码进行解密:
在所述解密代码执行时,基于对所述中间语言代码进行解密的密钥修改JIT编译器中的函数,以使所述JIT编译器具备对所述目标程序对应的中间语言代码解密的功能;
运行所述JIT编译器,以对所述中间语言代码进行解密。
所述存储介质中的指令还包括:
所述对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码,包括:
当所述JIT编译器对所述中间语言代码进行解密之后,以用户不可见的方式将所述解密后的中间语言代码输入至所述JIT编译器;
继续运行所述JIT编译器,以使所述JIT编译器通过对所述解密后的中间语言代码进行编译得到所述目标程序对应的机器码。
附图说明
图1为本申请一实施例中一种程序代码的保护方法的流程图;
图2为本申请另一实施例中一种程序代码的保护方法的流程图;
图3为本申请又一实施例中一种程序代码的保护方法的流程图;
图4为本申请实施例的由解密装置执行的将.NET代码转换为机器码流程图;
图5为本申请一实施例中一种程序代码的保护装置的流程图;
图6为本申请另一实施例中一种程序代码的保护装置的流程图。
具体实施方式
此处参考附图描述本申请的各种方案以及特征。
应理解的是,可以对此处申请的实施例做出各种修改。因此,上述说明书不应该视为限制,而仅是作为实施例的范例。本领域的技术人员将想到在本申请的范围和精神内的其他修改。
包含在说明书中并构成说明书的一部分的附图示出了本申请的实施例,并且与上面给出的对本申请的大致描述以及下面给出的对实施例的详细描述一起用于解释本申请的原理。
通过下面参照附图对给定为非限制性实例的实施例的优选形式的描述,本申请的这些和其它特性将会变得显而易见。
还应当理解,尽管已经参照一些具体实例对本申请进行了描述,但本领域技术人员能够确定地实现本申请的很多其它等效形式。
当结合附图时,鉴于以下详细说明,本申请的上述和其他方面、特征和优势将变得更为显而易见。
此后参照附图描述本申请的具体实施例;然而,应当理解,所申请的实施例仅仅是本申请的实例,其可采用多种方式实施。熟知和/或重复的功能和结构并未详细描述以避免不必要或多余的细节使得本申请模糊不清。因此,本文所申请的具体的结构性和功能性细节并非意在限定,而是仅仅作为权利要求的基础和代表性基础用于教导本领域技术人员以实质上任意合适的详细结构多样地使用本申请。
本说明书可使用词组“在一种实施例中”、“在另一个实施例中”、“在又一实施例中”或“在其他实施例中”,其均可指代根据本申请的相同或不同实施例中的一个或多个。
图1为本申请实施例的一种程序代码的保护方法的流程图,该方法包括以下步骤S11-S14:
在步骤S11中,接收对目标程序进行保护的触发事件;
在步骤S12中,获取目标程序的中间语言代码;
在步骤S13中,对中间语言代码进行加密;
在步骤S14中,在加密完成后,为目标程序附加解密代码,解密代码用于对中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。
本实施例中,接收对目标程序进行保护的触发事件;该触发事件可以是指目标程序编写完毕的事件,例如,开发人员开发了一目标程序,在该目标程序开发完毕时,自动触发对目标程序进行保护的机制。该触发事件也可以是对预设按键的点击事件,例如,开发人员开发完一目标程序之后,通过点击触发程序保护功能的按钮启动对程序的保护机制。当然,可以理解的是,该触发事件旨在选择恰当的时机选择对目标程序进行保护,因此,该触发事件也可以是除上述示例之外的其他事件。
响应前述的触发事件,获取目标程序的中间语言代码。中间语言(中间代码)是一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码。.NET平台上的各种高级语言(如C#,VB,F#)的编译器会将各自的代码转化为中间语言代码,其中包含了.NET平台上的各种元素,如“范型”、“类”、“接口”、“模块”、“属性”等等。其可理解性及易于生成目标代码的程度介于源语言和目标语言之间。常用的中间语言有逆波兰表示、四元式、三元式和树表示等。
对中间语言代码进行加密;具体的,获取对中间语言进行加密的密钥;根据密钥对中间语言代码进行加密。本申请实施例中的密钥,可以是对称密钥,可以是非对称密钥,本申请对此不作限定。
另外,对中间语言代码加密之前,还需要获取目标程序的类型;根据目标程序的类型判断中间语言代码是否为可加密代码。例如,当目标程序为系统自带的程序,该目标程序的中间语言代码则为系统自带程序对应的代码,那么,就不需要对该中间语言程序代码进行加密,因此,该程序的中间语言代码不是可加密代码,反之,如果目标程序是开发人员自行开发的程序,那么,该目标程序的中间语言代码则为可以加密代码。
在加密完成后,为目标程序附加解密代码,解密代码用于对中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。
具体的,在代码执行过程中,需要先将代码转换为中间语言代码,然后再将中间语言代码通过JIT编译转换为机器码,才能供处理器进行识别,而本申请中,在解密代码对中间语言代码解密之后,将中间语言代码以用户不可见的形式进行JIT编译,通过此方式,使第三方用户在使用该目标程序的过程中,无法看到中间语言代码,避免了非法用户通过中间语言代码实现对目标程序的反编译。该解密代码可以是Shellcode,该Shellcode可以附加在目标程序的入口点,从而通过一段纯代码即可实现对程序的解密和保护,而无需额外部署完整的保护程序,减小了目标程序的发行体积。
本申请的有益效果在于:可以对目标程序的中间语言代码进行加密,从而避免非法用户对中间语言代码的获取,进而使得被保护程序无法被反编译和修改。另外,通过一段纯代码即可实现对程序的解密和保护,而无需额外部署完整的保护程序,减小了目标程序的发行体积。
在一个实施例中,方法还可被实施为如下步骤A1-A2:
在步骤A1中,获取目标程序的类型;
在步骤A2中,根据目标程序的类型判断中间语言代码是否为可加密代码。
例如,当目标程序为系统自带的程序,那么,该目标程序的中间语言代码则为系统自带程序对应的代码,那么,就不需要对该中间语言程序代码进行加密,因此,该程序的中间语言代码不是可加密代码,反之,如果目标程序是开发人员自行开发的程序,那么,该目标程序的中间语言代码则为可以加密代码。本实施例可以在上述步骤S12之后以及上述步骤S13之前执行。
在一个实施例中,上述步骤S13可被实施为如下步骤B1-B2:
在步骤B1中,获取对中间语言进行加密的密钥;
在步骤B2中,根据密钥对中间语言代码进行加密。
本实施例中,获取对中间语言进行加密的密钥,该密钥可以是本实施例的执行主体根据某种预先设定的或与其他设备约定的规则生成的。根据该密钥对中间语言代码进行加密。
在一个实施例中,方法还可被实施为如下步骤:
在根据密钥对中间语言代码进行加密之后,根据密钥生成解密代码。
采用上述实现方式,从而在对目标程序进行编译时,使得解密代码能够根据该密钥进行解密。
需要说明的是,本申请中,对中间语言代码进行加密的目的旨在于防止非法用户对程序进行反编译,可以理解的是,也可以对目标程序对应的所有类型的代码进行加密,例如,对源代码、中间语言代码以及机器码都进行加密。
图2为本申请实施例的一种程序代码的保护方法的流程图,该方法包括以下步骤S21-S23:
在步骤S21中,在检测到目标程序运行时,对目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;
在步骤S22中,对解密后的中间语言代码进行编译,以得到目标程序对应的机器码;
在步骤S23中,根据机器码运行目标程序。
该实施例的执行主体可以是一解密装置,具体的,可以是购买了开发人员所开发的目标程序的用户所使用的装置。应理解,该解密装置可以由软件和/或硬件来实现,可以被配置在电子计算设备上。
在该实施例中,在检测到目标程序运行时,对目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见。
具体的,在被保护程序运行时,会先执行解密代码,在解密代码运行时首先会修改JIT编译函数。具体的,可以对具备编译功能的JIT编译器中的编译函数进行修改,使JIT编译器具备待编译的代码是否属于被加密的代码的功能、对被加密的代码进行解密的功能以及编译的功能。也就是说,使原本只具备编译功能的编译器具备了判断、解密和编译的功能。
在JIT执行编译时判断被编译的代码是否属于被加密的代码,如果是被加密的代码则使用加密时的密钥进行解密,解密完成后再执行JIT编译。
在一个实施例中,上述步骤S21中对目标程序对应的中间语言代码进行解密可被实施为如下步骤A1-A2:
在步骤A1中,获取解密代码;
在步骤A2中,执行解密代码,以通过解密代码对目标程序对应的中间语言代码进行解密。
在一个实施例中,解密代码通过以下方式对目标程序对应的中间语言代码进行解密:
在解密代码执行时,基于对中间语言代码进行解密的密钥修改JIT编译器中的函数,以使JIT编译器具备对目标程序对应的中间语言代码解密的功能;
运行JIT编译器,以对中间语言代码进行解密。
具体的,在该实施例中,在被保护程序运行时,会先执行解密代码,在解密代码运行时首先会修改JIT编译函数,具体的,可以对具备编译功能的JIT编译器中的编译函数进行修改,使JIT编译器具备待编译的代码是否属于被加密的代码的功能、对被加密的代码进行解密的功能以及编译的功能。也就是说,使原本只具备编译功能的编译器具备了判断、解密和编译的功能。应理解,上述解密所使用的密钥,与加密所使用的密钥相同或者相对应。
在一个实施例中,如图3所示,上述步骤S22可被实施为如下步骤S31-S32:
在步骤S31中,当JIT编译器对中间语言代码进行解密之后,以用户不可见的方式将解密后的中间语言代码输入至JIT编译器;
在步骤S32中,继续运行JIT编译器,以使JIT编译器通过对解密后的中间语言代码进行编译得到目标程序对应的机器码。
本实施例中,当JIT编译器对中间语言代码进行解密之后,以用户不可见的方式将解密后的中间语言代码输入至JIT编译器;例如,可以通过阻断或屏蔽中间语言代码显示界面的方式来使中间语言代码无法显示于用户可见的显示装置,使得中间语言代码直接放入JIT编译器中。然后继续运行JIT编译器,使JIT编译器通过对解密后的中间语言代码进行编译得到目标程序对应的机器码。在本实施例中,整体的执行过程如图4所示:先将.NET代码编译成MSIL(Microsoft Intermediate Language,微软中间语言),即中间语言代码,然后对中间语言代码进行解密,解密之后进行JIT编译,将中间语言代码转换为Native(计算机术语)代码,即CPU可以进行识别的机器码。
可选地,由于整个程序中被加密的中间语言代码可能有很多,在编译的时候,还可以一边解密,一边编译,在被解密的一段代码被编译完成之后,就将其从内存中删除。也就是说,对所述目标程序对应的中间语言代码中的部分代码(即将要被编译的代码,以下称为第一待编译代码)的密文进行解密,得到第一待编译代码明文;对第一待编译代码明文进行编译;删除第一待编译代码明文。通过多次解密和编译,最终得到整个目标程序对应的机器码。通过这样的方式,在中间语言代码对用户不可见的基础上,还使得内存中不会存在整个目标程序的中间语言代码明文,而总只有一小部分,从而进一步增加了目标程序被反编译的难度。
图5为本申请实施例的一种程序代码的保护装置的流程图,包括以下模块:
接收模块51,用于接收对目标程序进行保护的触发事件;
获取模块52,用于获取所述目标程序的中间语言代码;
加密模块53,用于对所述中间语言代码进行加密;
附加模块54,用于在加密完成后,为所述目标程序的入口点附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。
在一个实施例中,所述装置还包括:
类型获取模块,用于获取目标程序的类型;
判断模块,用于根据所述目标程序的类型判断所述中间语言代码是否为可加密代码。
在一个实施例中,加密模块,包括:
获取子模块,用于获取对所述中间语言进行加密的密钥;
加密子模块,用于根据所述密钥对所述中间语言代码进行加密。
在一个实施例中,所述装置还包括:
生成模块,用于在根据所述密钥对所述中间语言代码进行加密之后,根据所述密钥生成解密代码。
图6为本申请实施例的一种程序代码的保护装置的流程图,包括以下模块:
解密模块61,用于在检测到目标程序运行时,对所述目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;
编译模块62,用于对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码;
运行模块63,用于根据所述机器码运行所述目标程序。
本实施例中,解密模块61可以是指运行解密代码的模块,而编译模块62可对应于通过解密代码修改编译函数之后的编译器。而运行模块可以是指处理器,通过识别机器码来实现对目标程序的运行。
在一个实施例中,所述解密模块,包括:
获取子模块,用于获取解密代码;
执行子模块,用于执行所述解密代码,以通过所述解密代码对所述目标程序对应的中间语言代码进行解密。
在一个实施例中,所述解密代码通过以下方式对所述目标程序对应的中间语言代码进行解密:
在所述解密代码执行时,基于对所述中间语言代码进行解密的密钥修改JIT编译器中的函数,以使所述JIT编译器具备对所述目标程序对应的中间语言代码解密的功能;
运行所述JIT编译器,以对所述中间语言代码进行解密。
在一个实施例中,所述编译模块,包括:
输入子模块,用于当所述JIT编译器对所述中间语言代码进行解密之后,以用户不可见的方式将所述解密后的中间语言代码输入至所述JIT编译器;
编译子模块,用于继续运行所述JIT编译器,以使所述JIT编译器通过对所述解密后的中间语言代码进行编译得到所述目标程序对应的机器码。
本申请还提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由加密装置的处理器执行时,使得加密装置能够执行一种程序代码的保护方法,包括:
接收对目标程序进行保护的触发事件;
获取所述目标程序的中间语言代码;
对所述中间语言代码进行加密;
在加密完成后,为所述目标程序附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见。
所述存储介质中的指令还包括:
获取目标程序的类型;
根据所述目标程序的类型判断所述中间语言代码是否为可加密代码。
所述存储介质中的指令还包括:
所述对所述中间语言代码进行加密,包括:
获取对所述中间语言进行加密的密钥;
根据所述密钥对所述中间语言代码进行加密。
所述存储介质中的指令还包括:
在根据所述密钥对所述中间语言代码进行加密之后,根据所述密钥生成解密代码。
本申请还提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由解密装置的处理器执行时,使得解密装置能够执行一种程序代码的保护方法,包括:
在检测到目标程序运行时,对所述目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;
对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码;
根据所述机器码运行所述目标程序。
所述存储介质中的指令还包括:
所述对所述目标程序对应的中间语言代码进行解密,包括:
获取解密代码;
执行所述解密代码,以通过所述解密代码对所述目标程序对应的中间语言代码进行解密。
所述存储介质中的指令还包括:
所述解密代码通过以下方式对所述目标程序对应的中间语言代码进行解密:
在所述解密代码执行时,基于对所述中间语言代码进行解密的密钥修改JIT编译器中的函数,以使所述JIT编译器具备对所述目标程序对应的中间语言代码解密的功能;
运行所述JIT编译器,以对所述中间语言代码进行解密。
所述存储介质中的指令还包括:
所述对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码,包括:
当所述JIT编译器对所述中间语言代码进行解密之后,以用户不可见的方式将所述解密后的中间语言代码输入至所述JIT编译器;
继续运行所述JIT编译器,以使所述JIT编译器通过对所述解密后的中间语言代码进行编译得到所述目标程序对应的机器码。
应理解,前述加密装置、解密装置可以由软件和/或硬件来实现。本发明各实施例可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现。例如,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机电子设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上实施例仅为本申请的示例性实施例,不用于限制本申请,本申请的保护范围由权利要求书限定。本领域技术人员可以在本申请的实质和保护范围内,对本申请做出各种修改或等同替换,这种修改或等同替换也应视为落在本申请的保护范围内。

Claims (10)

1.一种程序代码的保护方法,其特征在于,包括:
接收对目标程序进行保护的触发事件;
响应于所述触发事件,获取所述目标程序的中间语言代码;
对所述中间语言代码进行加密;
在加密完成后,为所述目标程序附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见;
其中,所述为所述目标程序附加解密代码,包括:
在所述目标程序的入口点处附加Shellcode,以形成所述解密代码;其中,所述解密代码配置为在其被执行时,修改JIT编译器中的函数,以使JIT编译器能够对所述目标程序对应的中间语言代码中的部分代码进行解密,得到第一待编译代码明文,对所述第一待编译代码明文进行编译,删除第一待编译代码明文,通过多次解密和编译,以获得整个所述目标程序对应的机器码。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
获取目标程序的类型;
根据所述目标程序的类型判断所述中间语言代码是否为可加密代码。
3.如权利要求1所述的方法,其特征在于,所述对所述中间语言代码进行加密,包括:
获取对所述中间语言进行加密的密钥;
根据所述密钥对所述中间语言代码进行加密。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
在根据所述密钥对所述中间语言代码进行加密之后,根据所述密钥生成解密代码。
5.一种程序代码的保护方法,其特征在于,包括:
在检测到目标程序运行时,对所述目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;
对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码;
根据所述机器码运行所述目标程序;
所述对所述目标程序对应的中间语言代码进行解密,包括:
获取附加在所述目标程序的入口点处的解密代码;
执行所述解密代码,修改JIT编译器中的函数,以使所述JIT编译器具备对所述目标程序对应的中间语言代码解密的功能;
运行所述JIT编译器,对所述目标程序对应的中间语言代码进行解密,得到第一待编译代码明文,对所述第一待编译代码明文进行编译,删除第一待编译代码明文,通过多次解密和编译,以获得整个所述目标程序对应的机器码。
6.如权利要求5所述的方法,其特征在于,所述解密代码通过以下方式对所述目标程序对应的中间语言代码进行解密:
在所述解密代码执行时,基于对所述中间语言代码进行解密的密钥修改JIT编译器中的函数,以使所述JIT编译器具备对所述目标程序对应的中间语言代码解密的功能;
运行所述JIT编译器,以对所述中间语言代码进行解密。
7.如权利要求5所述的方法,其特征在于,所述对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码,包括:
当所述JIT编译器对所述中间语言代码进行解密之后,以用户不可见的方式将所述解密后的中间语言代码输入至所述JIT编译器;
继续运行所述JIT编译器,以使所述JIT编译器通过对所述解密后的中间语言代码进行编译得到所述目标程序对应的机器码。
8.一种程序代码的保护装置,其特征在于,包括:
接收模块,用于接收对目标程序进行保护的触发事件;
获取模块,用于获取所述目标程序的中间语言代码;
加密模块,用于对所述中间语言代码进行加密;
附加模块,用于在加密完成后,为所述目标程序附加解密代码,所述解密代码用于对所述中间语言代码进行解密,并使得解密后的中间语言代码对用户不可见;
其中,所述附加模块具体用于:
在所述目标程序的入口点处附加Shellcode,以形成所述解密代码;其中,所述解密代码配置为在其被执行时,修改JIT编译器中的函数,以使JIT编译器能够对所述目标程序对应的中间语言代码中的部分代码进行解密,得到第一待编译代码明文,对所述第一待编译代码明文进行编译,删除第一待编译代码明文,通过多次解密和编译,以获得整个所述目标程序对应的机器码。
9.一种程序代码的保护装置,其特征在于,包括:
解密模块,用于在检测到目标程序运行时,对所述目标程序对应的中间语言代码进行解密,其中,解密后的中间语言代码对用户不可见;所述目标程序包括作为解密代码的附加在其入口点的Shellcode;
编译模块,用于对所述解密后的中间语言代码进行编译,以得到所述目标程序对应的机器码;
运行模块,用于根据所述机器码运行所述目标程序;
所述解密模块具体用于:
获取解密代码;
执行所述解密代码,修改JIT编译器中的函数,以使所述JIT编译器具备对所述目标程序对应的中间语言代码解密的功能;
运行所述JIT编译器,对所述目标程序对应的中间语言代码中的部分代码进行解密,得到第一待编译代码明文,对所述第一待编译代码明文进行编译,删除第一待编译代码明文,通过多次解密和编译,以获得整个所述目标程序对应的机器码。
10.一种非临时性计算机可读存储介质,其特征在于,当所述存储介质中的指令由加密装置的处理器执行时,使得加密装置能够执行如权利要求1-4任意一项所述的程序代码的保护方法;或者,
当所述存储介质中的指令由解密装置的处理器执行时,使得解密装置能够执行如权利要求5-7任意一项所述的程序代码的保护方法。
CN202011366628.5A 2020-11-27 2020-11-27 一种程序代码的保护方法、装置及存储介质 Active CN112434265B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011366628.5A CN112434265B (zh) 2020-11-27 2020-11-27 一种程序代码的保护方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011366628.5A CN112434265B (zh) 2020-11-27 2020-11-27 一种程序代码的保护方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN112434265A CN112434265A (zh) 2021-03-02
CN112434265B true CN112434265B (zh) 2021-09-24

Family

ID=74698068

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011366628.5A Active CN112434265B (zh) 2020-11-27 2020-11-27 一种程序代码的保护方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN112434265B (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101980160B (zh) * 2010-10-28 2013-02-13 飞天诚信科技股份有限公司 一种.net程序加密后的执行方法
CN107341372B (zh) * 2017-07-25 2018-12-07 北京深思数盾科技股份有限公司 一种软件保护方法和装置
CN107657154B (zh) * 2017-09-18 2018-08-17 北京深思数盾科技股份有限公司 一种目标程序的保护方法、装置、设备及存储介质
CN107908933B (zh) * 2017-11-08 2020-08-28 北京顶象技术有限公司 一种基于中间语言的字符串加密方法

Also Published As

Publication number Publication date
CN112434265A (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
CN110069905B (zh) 一种Springboot程序加密和解密的装置及方法
JP6257754B2 (ja) データの保護
EP3038004A1 (en) Method for providing security for common intermediate language-based program
CN104463002B (zh) 一种加固apk的方法和装置以及apk加固客户端和服务器
US20160364707A1 (en) Potentate: A Cryptography-Obfuscating, Self-Policing, Pervasive Distribution System For Digital Content
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
US7320075B2 (en) Software protection method utilizing hidden application code in a protection dynamic link library object
CN106599628A (zh) 一种基于模块钩子的Python字节码文件保护方法
JP2004038966A (ja) セキュアな変数データ保護を提供するセキュアで不明瞭なタイプライブラリ
CN107908933A (zh) 一种基于中间语言的字符串加密方法
CN104091100A (zh) 一种基于编译中间结果的软件保护方法
US20110271350A1 (en) method for protecting software
CN101957903A (zh) 一种保护类文件的方法和装置
JP2012118956A (ja) インデックステーブル基盤のコード暗号化及び復号化装置及びその方法
US8249249B2 (en) System and method for text-based encryption
CN107430650A (zh) 保护计算机程序以抵御逆向工程
US20060106801A1 (en) Securing location of an installed middleware application and securing location of containers contained within installed middleware application
EP3844647A1 (en) System and method for providing protected data storage in data memory
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN112434265B (zh) 一种程序代码的保护方法、装置及存储介质
CN113626773B (zh) 一种基于中间语言的代码保护方法
CN112115430A (zh) 一种apk的加固方法、电子设备及存储介质
CN109995526A (zh) 一种密钥的存储方法和装置、密钥的调用方法和装置
CN107403103B (zh) 文件解密方法和装置
US20090235088A1 (en) Program conversion device, execution support device, and method and computer program for the same

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
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee after: Beijing Shendun Technology Co.,Ltd.

Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.