CN107292131A - 软件保护方法和装置 - Google Patents

软件保护方法和装置 Download PDF

Info

Publication number
CN107292131A
CN107292131A CN201710473369.8A CN201710473369A CN107292131A CN 107292131 A CN107292131 A CN 107292131A CN 201710473369 A CN201710473369 A CN 201710473369A CN 107292131 A CN107292131 A CN 107292131A
Authority
CN
China
Prior art keywords
code
net
virtual machine
data structure
virtualization
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
CN201710473369.8A
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.)
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 CN201710473369.8A priority Critical patent/CN107292131A/zh
Publication of CN107292131A publication Critical patent/CN107292131A/zh
Pending legal-status Critical Current

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)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了一种软件保护方法和装置,其中方法包括:根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;将所述待保护的方法代码转换为虚拟化代码;在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。采用本发明,可以提高软件的安全性。

Description

软件保护方法和装置
技术领域
本发明涉及计算机应用技术,特别是涉及一种软件保护方法和装置。
背景技术
.NET代码即IL代码,由.NET运行时进行解释执行,由.NET编译器将源代码编译为IL代码。通过现有工具可自动反编译IL代码并还原为源代码形式。基于上述原因,破解者通常能够还原软件的核心算法,或通过修改代码等达到破解软件的目的。
目前,对.NET软件进行保护的方法有以下几种:
第一种是通过对.NET符号名称进行混淆,到达反编译后难以阅读的目的。由于这种方法不能对代码逻辑进行处理,因此,可以通过对算法的分析来破解软件。
第二种是对代码逻辑进行混淆。由于目前混淆的程度还比较低,算法逻辑依然可以阅读,无法抵御破解者攻击。
第三种是对.NET软件进行压缩、加密,软件执行前将其解压、解密再执行.NET代码。在这种保护方式下,可以通过转存得到原始.NET代码。
由此可见,上述现有的.NET软件保护方法,无法有效确保软件的安全性。
发明内容
有鉴于此,本发明的主要目的在于提供一种软件保护方法和装置,可以提高软件的安全性。
为了达到上述目的,本发明提出的技术方案为:
一种软件保护方法,包括:
a、根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;
b、将所述待保护的方法代码转换为虚拟化代码;
c、在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。
一种软件保护装置,包括:
抽取单元,用于根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;
转换单元,用于将所述待保护的方法代码转换为虚拟化代码;
替换单元,用于在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。
综上所述,本发明提出的软件保护方法和装置,通过对.NET代码中需要保护方法的代码进行处理,将需要保护方法的.NET代码转换为虚拟化代码,然后将需要保护方法的.NET代码替换为调用x86/x64虚拟机的指令代码。这样,经过上述处理的.NET代码运行后,当执行到要保护方法时,就会在x86/x64虚拟机中执行相应的虚拟化代码,在此期间被保护的方法代码将无法被反编译和调试,因此可以提高.NET程序的安全性,防止恶意篡改,对软件版权起到了保护作用。
附图说明
图1为本发明实施例的方法流程示意图;
图2为经过本发明实施例处理后的软件程序运行过程示意图;
图3为本发明实施例的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
本发明的核心思想是:将x86/x64本地代码的虚拟机保护技术移植到.NET保护,即通过将.NET代码转换为x86/x64虚拟机能够执行的代码,且.NET运行时调用x86/x64虚拟机执行算法逻辑,以达到无法有效还原.NET代码的目的,从而可以提高软件的安全性。
图1为本发明实施例的方法流程示意图,如图1所示,该实施例实现的软件保护方法主要包括:
步骤101、根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码。
较佳地,所述根据所述.NET代码,生成相应的.NET数据结构包括:
获取所述.NET代码的.NET元数据;
解析所述.NET元数据,根据所包含的方法函数体,生成相应的.NET数据结构。
较佳地,所述生成相应的.NET数据结构之后还包括:
将所述x86/x64虚拟机添加至所述.NET数据结构的全局数组中;
将内存加载方法增加到所述.NET数据结构中,所述内存加载方法用于获取虚拟机入口地址并加载所述x86/x64虚拟机;
如果所述.NET数据结构中不存在.cctor方法,则将.cctor方法添加至所述.NET数据结构中,其中,所述.cctor方法中包括第二call代码和Marshal库;
所述第二call代码用于调用所述内存加载方法;
所述Marshal库用于将虚拟机入口地址作为参数生成调用虚拟机的方法,并将虚拟机方法保存到全局变量中。
上述.cctor方法用于对x86/x64虚拟机进行初始化,是.NET的全局构造方法,该方法是.NET程序运行时第一个运行的方法。如已存在.cctor方法则不需要添加,否则添加至所述.NET数据结构中。
步骤102、将所述待保护的方法代码转换为虚拟化代码。
这里,所述虚拟化代码指的是x86/x64虚拟机能够执行的代码。
较佳地,本步骤具体包括:
步骤1021、根据分块标准,将所述待保护的方法代码分成若干子代码块。
本步骤,用于对待保护的方法代码进行分块,以便在后续步骤中,针对每块代码分别执行虚拟化操作。
较佳地,所述分块标准包括:
将跳转指令的目标地址作为块首,或者,将Call指令的下一条指令作为块首。
步骤1022、将每个所述子代码块转换为虚拟化代码。
较佳地,可以采用下述方法将每个所述子代码块转换为虚拟化代码:
步骤x1、将所述子代码块转换成IR指令;
步骤x2、将所述IR指令转换为虚拟化代码,其中,所述虚拟化代码被封装成数组并且保存在全局变量中。
步骤103、在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。
较佳地,所述调用x86/x64虚拟机的指令代码包括虚拟化代码参数、装箱代码、用于调用虚拟机方法的第一call代码和拆箱代码。
这里,虚拟化代码参数是所述x86/x64虚拟机执行所书虚拟化代码过程中所需的参数。
所述装箱代码指用于封装虚拟化代码参数、变量的box指令代码,形成参数表;
所述第一call代码是指调用虚拟机方法,以便利用x86/x64虚拟机执行虚拟化代码。
所述拆箱代码与所述装箱代码对应,用于将虚拟化代码执行后保存到参数表中的结果通过unbox指令进行拆箱,还原参数、变量,以便于继续执行其它IL代码。
较佳地,步骤103之后还包括,重新编译所述.NET数据结构,利用编译后的.NET数据结构生成.NET元数据,作为所述.NET代码新的.NET元数据。
通过上述实施例可以看出,本发明中通过将需要保护的方法的.NET代码转换为x86/x64虚拟机能够执行的代码,使得当.NET代码执行到需要保护的方法时将通过x86/x64虚拟机执行相应的虚拟化代码,这样,由于在此期间被保护的方法代码将无法被反编译和调试,因此可以有效提高.NET程序的安全性,防止对待保护方法代码的恶意篡改。
下面通过本发明的一具体实现过程对上述方案的具体实现做进一步的阐述:
1、分析需要保护软件的PE文件格式,获取.NET元数据等信息。
2、利用.NET解析器,进一步解析.NET元数据,生成方法等.NET数据结构。
3、利用.NET编译器,基于上述.NET数据结构执行下述操作:
a)添加.cctor方法,如存在原始.cctor方法则不需要添加。
b)将x86、x64虚拟机代码放到全局数组中。
c)合并IL内存加载方法到上述.NET数据结构中。
d)在.cctor方法中添加call代码,该call代码用于调用步骤c中的内存加载方法。
e)在.cctor方法中添加用于生成调用虚拟机方法的Marshal库,Marshal库将虚拟机入口地址作为参数,生成调用虚拟机对的方法,,并保存于全局变量中。
f)遍历每个需要保护的方法,对每个需要保护的方法实施下述步骤:
i.将需要保护的方法代码进行分块,分块标准为:
1)将跳转指令的目标地址作为块首;或者,
2)将Call指令的下一条指令作为块首。
ii.针对每个代码块实施虚拟化操作,其中,所述虚拟化操作包括:
1)将所述子代码块转换成IR指令。
如:il指令ldc.i4.1转换到ir指令为ir_push 1。
2)将所述IR指令转换为虚拟化代码。
如:ir指令ir_push 1转换到vm_code为vm_push_imm8参数为1。
3)将虚拟化代码封装成数组保存到全局变量中。
4)移除被虚拟化的子代码块。
5)添加参数、变量装箱代码。
6)添加call代码,该call代码用于调用虚拟机方法。
7)添加参数、变量拆箱代码。
4、利用.NET连接器,基于经过编译后的上述.NET数据结构,重新生成.NET元数据,作为新的.NET元数据。
图2为经过上述实施例处理后所得到的软件程序运行过程示意图。从图2中可以看出,利用本发明生成的.NET元数据构建.NET运行环境后,在执行上述经过处理的.NET代码时,当执行到需要保护的方法时,即执行到用于调用x86/x64虚拟机的指令代码时,会根据该指令代码所包括的虚拟化代码参数、装箱代码、用于调用虚拟机方法的第一call代码和拆箱代码,在x86/x64虚拟机中执行相应的虚拟化代码,完成后再退出x86/x64虚拟机,继续执行后续的.NET代码,由于在x86/x64虚拟机中执行虚拟化代码期间,被保护的方法代码无法被反编译和调试,因此可以提高.NET程序的安全性,防止恶意篡改,对软件版权起到了保护作用。
图3为与上述方法对应的一种软件保护装置结构示意图,如图3所示,该装置包括:
抽取单元301,用于根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;
转换单元302,用于将所述待保护的方法代码转换为虚拟化代码;
替换单元303,用于在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。
较佳地,所述调用x86/x64虚拟机的指令代码包括虚拟化代码参数、装箱代码、用于调用虚拟机方法的第一call代码和拆箱代码。
较佳地,所述抽取单元301,进一步用于在所述生成相应的.NET数据结构之后,将所述x86/x64虚拟机添加至所述.NET数据结构的全局数组中;将内存加载方法增加到所述.NET数据结构中,所述内存加载方法用于获取虚拟机入口地址并加载所述x86/x64虚拟机;如果所述.NET数据结构中不存在.cctor方法,则将.cctor方法添加至所述.NET数据结构中,其中,所述.cctor方法中包括第二call代码和Marshal库;所述第二call代码用于调用所述内存加载方法;所述Marshal库用于将虚拟机入口地址作为参数生成调用虚拟机的方法,并将虚拟机方法保存到全局变量中。
较佳地,所述抽取单元301,用于获取所述.NET代码的.NET元数据;解析所述.NET元数据,根据所包含的方法函数体,生成相应的.NET数据结构。
较佳地,所述转换单元302,用于根据分块标准,将所述待保护的方法代码分成若干子代码块;将每个所述子代码块转换为虚拟化代码。
较佳地,所述分块标准包括:跳转指令的目标地址作为块首,Call指令的下一条指令作为块首。
较佳地,所述转换单元302,用于将所述子代码块转换成IR指令;将所述IR指令转换为虚拟化代码,其中,所述虚拟化代码被封装成数组并且保存在全局变量中。
较佳地,所述替换单元303,进一步用于在所述添加用于调用x86/x64虚拟机的指令代码之后,重新编译所述.NET数据结构,利用编译后的.NET数据结构生成.NET元数据,作为所述.NET代码新的.NET元数据。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (16)

1.一种软件保护方法,其特征在于,包括:
a、根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;
b、将所述待保护的方法代码转换为虚拟化代码;
c、在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。
2.根据权利要求1所述的方法,其特征在于,所述调用x86/x64虚拟机的指令代码包括虚拟化代码参数、装箱代码、用于调用虚拟机方法的第一call代码和拆箱代码。
3.根据权利要求1所述的方法,其特征在于,所述生成相应的.NET数据结构之后还包括:
将所述x86/x64虚拟机添加至所述.NET数据结构的全局数组中;
将内存加载方法增加到所述.NET数据结构中,所述内存加载方法用于获取虚拟机入口地址并加载所述x86/x64虚拟机;
如果所述.NET数据结构中不存在.cctor方法,则将.cctor方法添加至所述.NET数据结构中,其中,所述.cctor方法中包括第二call代码和Marshal库;
所述第二call代码用于调用所述内存加载方法;
所述Marshal库用于将虚拟机入口地址作为参数生成调用虚拟机的方法,并将虚拟机方法保存到全局变量中。
4.根据权利要求1所述的方法,其特征在于,所述根据.NET代码,生成相应的.NET数据结构包括:
获取所述.NET代码的.NET元数据;
解析所述.NET元数据,根据所包含的方法函数体,生成相应的.NET数据结构。
5.根据权利要求1所述的方法,其特征在于,所述步骤b具体包括:
根据分块标准,将所述待保护的方法代码分成若干子代码块;
将每个所述子代码块转换为虚拟化代码。
6.根据权利要求5所述的方法,其特征在于,所述分块标准包括:
跳转指令的目标地址作为块首,或者,Call指令的下一条指令作为块首。
7.根据权利要求5所述的方法,其特征在于,所述将每个所述子代码块转换为虚拟化代码包括:
将所述子代码块转换成IR指令;
将所述IR指令转换为虚拟化代码,其中,所述虚拟化代码被封装成数组并且保存在全局变量中。
8.根据权利要求1中所述的方法,其特征在于,步骤c之后还包括,重新编译所述.NET数据结构,利用编译后的.NET数据结构生成.NET元数据,作为所述.NET代码新的.NET元数据。
9.一种软件保护装置,其特征在于,包括:
抽取单元,用于根据.NET代码,生成相应的.NET数据结构,从所述.NET数据结构中抽取待保护方法代码;
转换单元,用于将所述待保护的方法代码转换为虚拟化代码;
替换单元,用于在抽取所述待保护方法代码的位置处添加用于调用x86/x64虚拟机的指令代码,所述x86/x64虚拟机用于执行所述虚拟化代码。
10.根据权利要求9所述的装置,其特征在于,所述调用x86/x64虚拟机的指令代码包括虚拟化代码参数、装箱代码、用于调用虚拟机方法的第一call代码和拆箱代码。
11.根据权利要求9所述的装置,其特征在于,所述抽取单元,进一步用于在所述生成相应的.NET数据结构之后,将所述x86/x64虚拟机添加至所述.NET数据结构的全局数组中;将内存加载方法增加到所述.NET数据结构中,所述内存加载方法用于获取虚拟机入口地址并加载所述x86/x64虚拟机;如果所述.NET数据结构中不存在.cctor方法,则将.cctor方法添加至所述.NET数据结构中,其中,所述.cctor方法中包括第二call代码和Marshal库;所述call代码用于调用所述内存加载方法;所述Marshal库用于将虚拟机入口地址作为参数生成调用虚拟机的方法,并将虚拟机方法保存到全局变量中。
12.根据权利要求9所述的装置,其特征在于,所述抽取单元,用于获取所述.NET代码的.NET元数据;解析所述.NET元数据,根据所包含的方法函数体,生成相应的.NET数据结构。
13.根据权利要求9所述的装置,其特征在于,所述转换单元,用于根据分块标准,将所述待保护的方法代码分成若干子代码块;将每个所述子代码块转换为虚拟化代码。
14.根据权利要求13所述的装置,其特征在于,所述分块标准包括:
跳转指令的目标地址作为块首,Call指令的下一条指令作为块首。
15.根据权利要求13所述的装置,其特征在于,所述转换单元,用于将所述子代码块转换成IR指令;将所述IR指令转换为虚拟化代码,其中,所述虚拟化代码被封装成数组并且保存在全局变量中。
16.根据权利要求13所述的装置,其特征在于,所述替换单元,进一步用于在所述添加用于调用x86/x64虚拟机的指令代码之后,重新编译所述.NET数据结构,利用编译后的.NET数据结构生成.NET元数据,作为所述.NET代码新的.NET元数据。
CN201710473369.8A 2017-06-21 2017-06-21 软件保护方法和装置 Pending CN107292131A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710473369.8A CN107292131A (zh) 2017-06-21 2017-06-21 软件保护方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710473369.8A CN107292131A (zh) 2017-06-21 2017-06-21 软件保护方法和装置

Publications (1)

Publication Number Publication Date
CN107292131A true CN107292131A (zh) 2017-10-24

Family

ID=60097799

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710473369.8A Pending CN107292131A (zh) 2017-06-21 2017-06-21 软件保护方法和装置

Country Status (1)

Country Link
CN (1) CN107292131A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114707124A (zh) * 2022-03-22 2022-07-05 广东技术师范大学 基于代码虚拟化的.net平台代码保护方法和系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1996336A (zh) * 2006-12-28 2007-07-11 北京飞天诚信科技有限公司 .Net程序保护的方法和系统
CN101300584A (zh) * 2005-08-06 2008-11-05 安全尺度有限公司 防止软件逆向工程、未经授权修改以及运行时数据截取的方法
CN102214281A (zh) * 2011-04-27 2011-10-12 北京深思洛克软件技术股份有限公司 一种软件保护方法和装置
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
EP2897072A1 (en) * 2013-08-14 2015-07-22 Soongsil University Research Consortium Techno-Park Device for obfuscating code and method for same
US9659156B1 (en) * 2014-03-20 2017-05-23 Symantec Corporation Systems and methods for protecting virtual machine program code

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101300584A (zh) * 2005-08-06 2008-11-05 安全尺度有限公司 防止软件逆向工程、未经授权修改以及运行时数据截取的方法
CN1996336A (zh) * 2006-12-28 2007-07-11 北京飞天诚信科技有限公司 .Net程序保护的方法和系统
CN102214281A (zh) * 2011-04-27 2011-10-12 北京深思洛克软件技术股份有限公司 一种软件保护方法和装置
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
EP2897072A1 (en) * 2013-08-14 2015-07-22 Soongsil University Research Consortium Techno-Park Device for obfuscating code and method for same
US9659156B1 (en) * 2014-03-20 2017-05-23 Symantec Corporation Systems and methods for protecting virtual machine program code

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114707124A (zh) * 2022-03-22 2022-07-05 广东技术师范大学 基于代码虚拟化的.net平台代码保护方法和系统
CN114707124B (zh) * 2022-03-22 2022-11-29 广东技术师范大学 基于代码虚拟化的.net平台代码保护方法和系统

Similar Documents

Publication Publication Date Title
CN108345773B (zh) 基于虚拟机的代码保护方法及装置、电子设备、存储介质
CN106096338B (zh) 一种具有数据流混淆的虚拟化软件保护方法
Rolles Unpacking Virtualization Obfuscators.
CN108733988B (zh) 安卓平台上可执行程序的保护方法
WO2017107706A1 (zh) 基于arm指令虚拟化的elf文件保护方法及系统
CN110929234B (zh) 一种基于代码虚拟化的Python程序加密保护系统与方法
CN108681457B (zh) 基于代码下沉与残码解释的Android应用程序保护方法
JP5996810B2 (ja) 自己書換え基盤のアプリケーションコード難読化装置及びその方法
CN106126981B (zh) 基于虚拟函数表替换的软件安全防护方法
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
CN109614772B (zh) 基于应用安装包文件的代码转换方法及装置
US20160203087A1 (en) Method for providing security for common intermediate language-based program
CN108733379B (zh) 基于dex字节码抽离映射混淆的安卓应用加固方法
Kalysch et al. VMAttack: Deobfuscating virtualization-based packed binaries
CN104573427B (zh) 一种可执行应用的混淆方法和装置
CN103413075A (zh) 一种通过虚拟机保护java可执行程序的方法及设备
CN106548046B (zh) 一种保护代码的装置和方法
CN107291485B (zh) 动态链接库的加固方法、运行方法、加固装置和安全系统
CN111723345B (zh) 基于回调函数的控制流混淆方法及系统
CN111240654A (zh) 一种Python代码加固保护的方法及其系统
WO2012146080A1 (zh) 一种软件保护方法和装置
WO2021022927A1 (zh) 网页脚本代码保护方法及装置
Padaryan et al. Automated exploit generation for stack buffer overflow vulnerabilities
Wang et al. Binary code retrofitting and hardening using SGX
Kuang et al. Exploiting dynamic scheduling for VM-based code obfuscation

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20171024

RJ01 Rejection of invention patent application after publication