CN109145533B - 一种使用随机密码保护代码的方法及装置 - Google Patents
一种使用随机密码保护代码的方法及装置 Download PDFInfo
- Publication number
- CN109145533B CN109145533B CN201811157565.5A CN201811157565A CN109145533B CN 109145533 B CN109145533 B CN 109145533B CN 201811157565 A CN201811157565 A CN 201811157565A CN 109145533 B CN109145533 B CN 109145533B
- Authority
- CN
- China
- Prior art keywords
- code
- encryption
- random
- core
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 139
- 230000006870 function Effects 0.000 claims description 107
- 238000012545 processing Methods 0.000 claims description 24
- 230000001960 triggered effect Effects 0.000 claims description 15
- 230000001737 promoting effect Effects 0.000 claims description 5
- 238000004590 computer program Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 14
- 241000270295 Serpentes Species 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000004075 alteration Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种使用随机密码保护代码的方法及装置,用于加密核心代码,提高核心代码的安全性。本发明方法包括:提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码。
Description
技术领域
本发明涉及终端领域,尤其涉及一种使用随机密码保护代码的方法及装置。
背景技术
随着计算机领域的快速发展,工程师们针对人们的需求开发了许多软件,软件中包括了许多代码,为了防止代码被破坏,或者是被竞争对手窃取,代码开发人员需要对重要的代码进行保护。
现有技术中,通常采用的保护方法是将其进行加密保护,而传统加密算法使用固定密码来对重要代码(核心代码)进行加密,并且解密方需要得知密码,才能够正确的进行解密。此种方法对于代码加密后的结果是固定的。
现有方案中加密方法所加密的重要代码对应一个解密的密码,解密方需要保存解密的密码,当被黑客攻击时,黑客很容易通过逆向调试与跟踪获取解密的密码,一旦黑客获取密码则很容易破解被加密的重要代码,重要代码的安全性不高。
发明内容
本发明实施例提供了一种使用随机密码保护代码的方法及装置,用于加密核心代码,对核心代码进行保护,提高核心代码的安全性。
本发明实施例的第一方面提供了一种使用随机密码保护代码的方法,包括:提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括所述随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码。
在一种可能的实施例中,所述提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码包括:调用函数GetCurrentProcess获取当前程序的句柄;调用函数OpenProcessToken打开进程相关联的访问令牌;调用函数LookupPrivilegeValue获取调试权限的值;调用函数AdjustTokenPrivileges将所述进程的当前权限调整为调试权限,得到具有调试权限的进程,所述具有调试权限的进程用于访问所述目标代码,所述目标代码包括核心代码和非核心代码。
在一种可能的实施例中,在所述生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密之后,在所述调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码之前,所述方法还包括:生成异常处理函数,所述异常处理函数用于捕获解密时产生的异常。
在一种可能的实施例中,所述方法还包括:执行所述二级加密代码;通过所述异常处理函数捕获解密时产生的当前异常;对所述当前异常进行处理。
在一种可能的实施例中,所述对所述当前异常进行处理包括:确定所述当前异常的类型;根据所述当前异常的类型判断是否触发了内存访问的异常;若触发了内存访问的异常,则从所述当前异常的上下文中获取当前指令的访问地址;根据所述当前指令的访问地址判断所述当前异常是否为执行了非法的指令;若是,则对所述二级加密代码进行解密并执行,并消除所述当前异常。
在一种可能的实施例中,所述方法还包括:生成新的随机密码;根据所述新的随机密码对解密后的核心代码重新进行随机加密。
在一种可能的实施例中,在所述提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码之后,所述方法还包括:设置调试寄存器,所述调试寄存器用于获取内存的访问地址。
本发明实施例的第二方面提供了一种使用随机密码保护代码的装置,包括:提升单元,用于提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;第一生成单元,用于生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;第一加密单元,用于调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;第二加密单元,用于调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括所述随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码。
本发明第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述第一方面任意一项所述的使用随机密码保护代码的方法的步骤。
本申请的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
本申请的第五方面提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
附图说明
图1为本发明实施例提供的一种使用随机密码保护代码的方法的流程图;
图2为本发明实施例提供的一种使用随机密码保护代码的装置的结构示意图;
图3为本发明实施例提供的一种可能的电子设备的硬件结构示意图;
图4为本发明实施例提供的一种可能的计算机可读存储介质的硬件结构示意图。
具体实施方式
本发明实施例提供了一种链接弹幕的方法及移动终端,用于当移动终端的网络不稳定断开了弹幕时,移动终端也可以使用自动重连技术重连弹幕,提高了链接弹幕的效率。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,为本发明实施例提供的使用随机密码保护代码的方法的流程图,具体包括:
101、提升进程的权限得到具有调试权限的进程,该具有调试权限的进程用于访问程序的目标代码,该目标代码包括核心代码和非核心代码。
提升进程的权限得到具有调试权限的进程,该具有调试权限的进程用于访问程序的目标代码,该目标代码包括核心代码和非核心代码。具体的,由于设置调试寄存器来获取内存访问的地址,则首先需要对进程的权限进行提升,提升权限的功能调用需要放到设置调试寄存器之前执行。通过调用一些列的应用程序界面(application programinterface,API函数则可以对进程的权限进行提升。例如,首先通过调用API函数GetCurrentProcess来获取当前程序的句柄,其次调用API函数OpenProcessToken来打开进程相关联的访问令牌,然后调用API函数LookupPrivilegeValue来获取调试(DEBUG)权限的值,最后调用API函数AdjustTokenPrivileges来调整进程的权限为DEBUG权限。
102、生成随机加密函数,该随机加密函数用于使用随机密码对核心代码进行加密。
生成随机加密函数,该随机加密函数用于使用随机密码对核心代码进行加密。具体的,本实施例中生成随机加密函数,即设计代码的加密算法,本实施例中会生成的随机加密的密钥并使用加密算法来对核心代码进行加密。同时考虑到会不断的进行加密和解密,所以从效率上只能使用加解密速度比较快的加解密算法,例如,本实施例可以采用TEA加密算法来对核心代码加密。
加密算法使用的随机密码(密钥)是使用随机算法来生成一个随机数据,本实施例中,随机数据的范围在0到100之间,如果这个100太大,则可能导致不断重试的时间比较长,而如果时间太短则比较容易被黑客所破解,所以本实施例选择101个数作为随机算法的随机范围。可以理解的,具体数值可以依据实际情况来选择,同时使用随机密码并不会将加密的密钥存储起来而是具有随机性。具体实现过程如下:
步骤1、依据时间设置随机种子。
首先获取当前系统时间,如Time time=Time();
其次调用系统函数srand来设置随机种子,如srand(time);
然后生成一个随机数nRand,如Int nRand=Rand();
步骤2、取得随机数nRand后,对100进行求余数,如Int nSecret=nRand%100;其中,nSecret是加密的随机密钥,随机密钥是一个整数,Int nSecret表示对nSecret取整。对加密算法来说需要的是一个32位的字符串,所以本实施例对得到的随机密钥进行计算,得到MD5值,具体过程如下所示:
首先创建一个MD5对象MD5objMd5;
然后调用MD5objMd5的接口Create来生成MD5值,如Secretdata=objMd5.Create(nSecret);
得到生成的结果数据Secretdata,将Secretdata的值则作为核心代码加密算法的实际的密钥值。
103、调用随机加密函数对目标代码进行随机加密,得到一级加密代码,一级加密代码包括随机加密后的核心代码和未加密的非核心代码。
调用随机加密函数对目标代码进行随机加密,得到一级加密代码,一级加密代码包括随机加密后的核心代码和未加密的非核心代码。接着开始对核心代码进行加密。
假设本实施例需要加密的核心代码地址为StartAddr,且需要加密的长度为Len,则首先创建一个TEA对象TEA ojbTea,然后调用TEA的加密算法接口和实际的密钥值来对核心代码代码进行加密,如objTea.Encrypt(StartAddr,Len);调用完上述核心代码后,则完成了对整个核心代码进行了随机加密的功能,得到了加密后的核心代码和和未加密的非核心代码,组成一级加密代码。
104、调用预置系统加密函数对一级加密代码进行普通加密,得到二级加密代码,二级加密代码包括随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码。
调用预置系统加密函数对一级加密代码进行普通加密,得到二级加密代码,二级加密代码包括随机加密后的核心代码和普通加密后的非核心代码。
具体的,首先本实施例可以对非核心代码执行普通加密方案来进行普通加密,从而进一步的提高了目标代码的安全性。例如,本实施例中使用Serpent加密算法来对代码进行普通加密。其中加密时需要使用到一个KEY数据,那么此KEY数据则可以通过服务器下发的方式下发到客户端。从而使得只有连接上服务器才能得到KEY数据,才能对加密后的代码进行解密。普通加密的过程具体实现如下:
步骤1、创建Serpent实例对象Serpent objSerpent;
步骤2、调用Serpent objSerpent的加密接口来对非核心代码进行加密,如objSerpent.Encrypt(CodeStart,CodeLen,KEY);其中,objSerpent.Encrypt表示的是是该Serpent算法的加密接口,CodeStart表示的是非核心代码的起始位置,CodeLen表示的是非核心代码的长度,KEY表示的是加密的KEY,是从服务器下发的加密时需要使用的KEY。
需要说明的是,本发明实施例的步骤103和步骤104之间没有特定的先后顺序,可以先执行步骤103,后执行步骤104,也可以先执行步骤104,后执行步骤103。例如,本发明可以设置2次加密过程,即2次解密成功后方可解密代码,第1次加密执行步骤103,通过在加密前生成随机数据,利用随机数据对核心代码进行随机加密,然后,第2次加密执行步骤104,按照传统的普通加密方式,即通过固定密码的方式对非核心代码进行普通加密。在解密时,需要以不断生成随机数据最后直到随机数据可以正确的解密核心代码,然后再对非核心代码进行第2次解密,第2次解密成功后才可以得到最终解密成功的目标代码。又或者变化下解密顺序,比如先执行步骤104的普通加密过程,解密成功后再执行第步骤103的随机加密过程,具体此处不做限定。
可以理解的是,本发明实施例中,步骤104除了可以对非核心代码进行加密,还可以对一级加密代码整体进行普通加密;或者,在先执行步骤104后执行步骤103时,先对目标代码整体进行普通加密,然后再进行随机加密,具体过程与上述实施例过程类似,此处不再赘述。
本发明实施例,通过对重要的核心代码进行第一次随机加密,然后在第一随机加密的基础上对非核心代码进行普通加密,增加了黑客进行反向解密程序代码的难度,提高核心代码的安全性。
需要进一步说明的是,本发明还可以根据代码的重要程度,将随机加密和普通加密进行结合,例如,对非核心代码(优先级1)可以使用普通加密,对次核心代码(优先级2)使用随机加密方案,对非常关键核心代码(优先级3)则使用普通加密与随机加密的结合方案。可以理解的是,对应的解密过程也类似,需要预先判断待解密代码的优先级;对于最不重要的(优先级1),则切换普通解密方式,对于中等重要的(优先级2),采用本发明的随机解密方式,对于最重要的(优先级3),才采用上述普通解密和随机解密的方式进行解密,具体此处不再赘述。
可选的,在上述图1对应的实施例的基础上,本发明实施例提供的使用随机密码保护代码的方法的可选实施例中,所述提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码包括:调用函数GetCurrentProcess获取当前程序的句柄;调用函数OpenProcessToken打开进程相关联的访问令牌;调用函数LookupPrivilegeValue获取调试权限的值;调用函数AdjustTokenPrivileges将所述进程的当前权限调整为调试权限,得到具有调试权限的进程,所述具有调试权限的进程用于访问所述目标代码,所述目标代码包括核心代码和非核心代码。
可选的,在上述图1对应的实施例的基础上,本发明实施例提供的使用随机密码保护代码的方法的可选实施例中,在所述生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密之后,在所述调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码之前,所述方法还包括:生成异常处理函数,所述异常处理函数用于捕获解密时产生的异常。
具体的,本发明实施例可以通过注册一个Windows提供的向量化异常处理函数,该异常处理函数可以捕获相应的异常事件,即获取解密过程中的异常。对于加密的代码解密后如果不正确,如果继续执行时,则会跑出代码执行一次,通过注册的这个异常处理则可以捕获到抛出的异常,并且在异常处理函数中可以获取到异常的类型,依据异常的类型来判断是不是触发了内存访问的异常,如果是则可以从异常的上下文中获取当前指令的执行地址,即可以获取到内存所对应的代码有对这个地址有访问。具体实现是通过调用API函数AddVectoredExceptionHandler来注册一个异常。具体过程如下:
函数PVOID WINAPI AddVectoredExceptionHandler(
ULONG FirstHandler,
PVECTORED_EXCEPTION_HANDLER VectoredHandler);
其中FirstHandler填入0,表示这个注册的异常处理函数是最后一个接管异常的。
本实施例可以通过类型处理函数来确定异常的类型,例如,硬件断点的处理函数是用于注册到系统中,当硬件断点触发时,此函数可以捕获到,从而可以得到执行权。本实施例中涉及的函数如下:
硬件断点的处理函数如下,LONG CALLBACK EsHandler(PEXCEPTION_POINTERSExceptionInfo){
然后硬件断点的处理函数判断当前的异常是不是代码执行时执行了非法的指令,如果是则本实施例会调用解密代码来对代码进行解密,具体代码为:
if(ExceptionInfo->ExceptionRecord->ExceptionCode==
EXCEPTION_PRIV_INSTRUCTION)
{
若异常已处理,则程序可以继续执行,代码为:
return EXCEPTION_CONTINUE_EXECUTION;
}
若异常不是硬件断点的异常,则继续查找其他异常处理函数,代码为:
return EXCEPTION_CONTINUE_SEARCH;
}
其中EsHandler表示函数接口。
可选的,在上述图1对应的实施例的基础上,本发明实施例提供的使用随机密码保护代码的方法的可选实施例中,所述方法还包括:执行所述二级加密代码;通过所述异常处理函数捕获解密时产生的当前异常;对所述当前异常进行处理。
可选的,若在解密过程中添加解密失败进行报警的功能,例如,当初次解密失败后,响应有黑客入侵的报警提示,提醒用户采取措施,例如断网等,防止黑客破译密码,进而获取到代码。
可选的,在上述图1对应的实施例的基础上,本发明实施例提供的使用随机密码保护代码的方法的可选实施例中,所述对所述当前异常进行处理包括:确定所述当前异常的类型;根据所述当前异常的类型判断是否触发了内存访问的异常;若触发了内存访问的异常,则从所述当前异常的上下文中获取当前指令的访问地址;根据所述当前指令的访问地址判断所述当前异常是否为执行了非法的指令;若是,则对所述二级加密代码进行解密并执行,并消除所述当前异常。
解密的具体过程如下:
假设本实施例需要解密的原始代码地址为StartAddr,需要解密代码的长度为Len,则首先创建一个TEA对象TEA ojbTea,然后调用TEA的解密算法接口来对代码进行解密,如objTea.Decrypt(StartAddr,Len);解密完成后则恢复异常,继续执行之前产生异常的加密代码,这次则是再次使用了新的随机数据解密后的代码。如果这次解密后,生成的随机密钥不对,则执行代码时会再次抛出异常,然后其逻辑还会回到之前异常接管,然后再次的执行本步骤的代码来生成新的随机数据,直到生成的随机数据是解密时的密钥,则解密后的代码可以正常的执行,并且不会再产生异常,从而代码可以正确的执行完成。
可选的,在上述图1对应的实施例的基础上,本发明实施例提供的使用随机密码保护代码的方法的可选实施例中,所述方法还包括:生成新的随机密码;根据所述新的随机密码对解密后的核心代码重新进行随机加密。
需要说明的是,只有正确的随机数据才可能解密出正确的代码,在解密代码执行完成后,为了进一步的对核心代码进行加密,则本实施例会再次的生成一个随机数据,并再次的对刚刚执行完成的代码进行加密,从而使得核心代码总处于加密状态,并且每一次加密都是使用不同的密钥,而只有执行时会产生异常,去不断的重试解密算法的密钥。
可选的,在上述图1对应的实施例的基础上,本发明实施例提供的使用随机密码保护代码的方法的可选实施例中,在所述提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码之后,所述方法还包括:设置调试寄存器,所述调试寄存器用于获取内存的访问地址。
上面从使用随机密码保护代码的方法的角度对本发明实施例进行了描述,下面从使用随机密码保护代码的装置的角度对本发明实施例进行描述。
请参阅图2,图2为本发明实施例提供的一种可能的使用随机密码保护代码的装置的实施例示意图,包括:
提升单元201,用于提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;
第一生成单元202,用于生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;
第一加密单元203,用于调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;
第二加密单元204,用于调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括所述随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码。
可选的,在一些可能的实现方式中,提升单元201具体用于:调用函数GetCurrentProcess获取当前程序的句柄;调用函数OpenProcessToken打开进程相关联的访问令牌;调用函数LookupPrivilegeValue获取调试权限的值;调用函数AdjustTokenPrivileges将所述进程的当前权限调整为调试权限,得到具有调试权限的进程,所述具有调试权限的进程用于访问所述目标代码,所述目标代码包括核心代码和非核心代码。
可选的,在一些可能的实现方式中,使用随机密码保护代码的装置还包括:
第二生成单元205,用于生成异常处理函数,所述异常处理函数用于捕获解密时产生的异常。
可选的,在一些可能的实现方式中,使用随机密码保护代码的装置还包括:
执行单元206,用于执行所述二级加密代码;
捕获单元207,用于通过所述异常处理函数捕获解密时产生的当前异常;
处理单元208,用于对所述当前异常进行处理。
可选的,在一些可能的实现方式中,处理单元208具体用于:确定所述当前异常的类型;根据所述当前异常的类型判断是否触发了内存访问的异常;若触发了内存访问的异常,则从所述当前异常的上下文中获取当前指令的访问地址;根据所述当前指令的访问地址判断所述当前异常是否为执行了非法的指令;若是,则对所述二级加密代码进行解密并执行,并消除所述当前异常。
可选的,在一些可能的实现方式中,使用随机密码保护代码的装置还包括:
第三生成单元209,用于生成新的随机密码;
第三加密单元210,用于根据所述新的随机密码对解密后的核心代码重新进行随机加密。
可选的,在一些可能的实现方式中,使用随机密码保护代码的装置还包括:
设置单元211,用于设置调试寄存器,所述调试寄存器用于获取内存的访问地址。
请参阅图3,图3为本发明实施例提供的电子设备的实施例示意图。
如图3所示,本发明实施例提供了一种电子设备,包括存储器310、处理器320及存储在存储器320上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括所述随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码。
可选的,在一种可能的实施例中,所述处理器具体用于:调用函数GetCurrentProcess获取当前程序的句柄;调用函数OpenProcessToken打开进程相关联的访问令牌;调用函数LookupPrivilegeValue获取调试权限的值;调用函数AdjustTokenPrivileges将所述进程的当前权限调整为调试权限,得到具有调试权限的进程,所述具有调试权限的进程用于访问所述目标代码,所述目标代码包括核心代码和非核心代码。
可选的,在一种可能的实施例中,所述处理器具体用于:生成异常处理函数,所述异常处理函数用于捕获解密时产生的异常。
可选的,在一种可能的实施例中,所述处理器具体用于:执行所述二级加密代码;通过所述异常处理函数捕获解密时产生的当前异常;对所述当前异常进行处理。
可选的,在一种可能的实施例中,所述处理器具体用于:确定所述当前异常的类型;根据所述当前异常的类型判断是否触发了内存访问的异常;若触发了内存访问的异常,则从所述当前异常的上下文中获取当前指令的访问地址;根据所述当前指令的访问地址判断所述当前异常是否为执行了非法的指令;若是,则对所述二级加密代码进行解密并执行,并消除所述当前异常。
可选的,在一种可能的实施例中,所述处理器具体用于:生成新的随机密码;根据所述新的随机密码对解密后的核心代码重新进行随机加密。
可选的,在一种可能的实施例中,所述处理器具体用于:设置调试寄存器,所述调试寄存器用于获取内存的访问地址。
在具体实施过程中,处理器320执行计算机程序311时,可以实现图1对应的实施例中任一实施方式。
本发明实施例,通过对重要的核心代码进行第一次随机加密,然后在第一随机加密的基础上对非核心代码进行普通加密,增加了黑客进行反向解密程序代码的难度,提高核心代码的安全性。
请参阅图4,图4为本发明实施例提供的一种计算机可读存储介质的实施例示意图。
如图4所示,本实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,该计算机程序411被处理器执行时实现如下步骤:提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括所述随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:调用函数GetCurrentProcess获取当前程序的句柄;调用函数OpenProcessToken打开进程相关联的访问令牌;调用函数LookupPrivilegeValue获取调试权限的值;调用函数AdjustTokenPrivileges将所述进程的当前权限调整为调试权限,得到具有调试权限的进程,所述具有调试权限的进程用于访问所述目标代码,所述目标代码包括核心代码和非核心代码。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:生成异常处理函数,所述异常处理函数用于捕获解密时产生的异常。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:执行所述二级加密代码;通过所述异常处理函数捕获解密时产生的当前异常;对所述当前异常进行处理。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:确定所述当前异常的类型;根据所述当前异常的类型判断是否触发了内存访问的异常;若触发了内存访问的异常,则从所述当前异常的上下文中获取当前指令的访问地址;根据所述当前指令的访问地址判断所述当前异常是否为执行了非法的指令;若是,则对所述二级加密代码进行解密并执行,并消除所述当前异常。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:生成新的随机密码;根据所述新的随机密码对解密后的核心代码重新进行随机加密。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:设置调试寄存器,所述调试寄存器用于获取内存的访问地址。
本发明实施例,通过对重要的核心代码进行第一次随机加密,然后在第一随机加密的基础上对非核心代码进行普通加密,增加了黑客进行反向解密程序代码的难度,提高核心代码的安全性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (5)
1.一种使用随机密码保护代码的方法,其特征在于,包括:
提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;
生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;
调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;
调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括所述随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码;
其中,调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码之前,所述方法还包括:
生成异常处理函数,所述异常处理函数用于捕获解密时产生的异常;
执行所述二级加密代码;通过所述异常处理函数捕获解密时产生的当前异常;对所述当前异常进行处理,其中,对所述当前异常进行处理包括:确定所述当前异常的类型;根据所述当前异常的类型判断是否触发了内存访问的异常;若触发了内存访问的异常,则从所述当前异常的上下文中获取当前指令的访问地址;根据所述当前指令的访问地址判断所述当前异常是否为执行了非法的指令;若是,则对所述二级加密代码进行解密并执行,并消除所述当前异常;
生成新的随机密码;根据所述新的随机密码对解密后的核心代码重新进行随机加密。
2.根据权利要求1所述的方法,其特征在于,所述提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码包括:
调用函数GetCurrentProcess获取当前程序的句柄;
调用函数OpenProcessToken打开进程相关联的访问令牌;
调用函数LookupPrivilegeValue获取调试权限的值;
调用函数AdjustTokenPrivileges将所述进程的当前权限调整为调试权限,得到具有调试权限的进程,所述具有调试权限的进程用于访问所述目标代码,所述目标代码包括核心代码和非核心代码。
3.根据权利要求1-2任一所述的方法,其特征在于,在所述提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码之后,所述方法还包括:
设置调试寄存器,所述调试寄存器用于获取内存的访问地址。
4.一种使用随机密码保护代码的装置,其特征在于,包括:
提升单元,用于提升进程的权限得到具有调试权限的进程,所述具有调试权限的进程用于访问程序的目标代码,所述目标代码包括核心代码和非核心代码;
第一生成单元,用于生成随机加密函数,所述随机加密函数用于使用随机密码对所述核心代码进行加密;
第一加密单元,用于调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码,所述一级加密代码包括随机加密后的核心代码和未加密的非核心代码;
第二加密单元,用于调用预置系统加密函数对所述一级加密代码进行普通加密,得到二级加密代码,所述二级加密代码包括所述随机加密后的核心代码和普通加密后的非核心代码,或者包括普通加密后的一级加密代码;
其中,在所述第一加密单元调用所述随机加密函数对所述目标代码进行随机加密,得到一级加密代码之前,还包括:
生成异常处理函数,所述异常处理函数用于捕获解密时产生的异常;
执行所述二级加密代码;通过所述异常处理函数捕获解密时产生的当前异常;对所述当前异常进行处理,其中,对所述当前异常进行处理包括:确定所述当前异常的类型;根据所述当前异常的类型判断是否触发了内存访问的异常;若触发了内存访问的异常,则从所述当前异常的上下文中获取当前指令的访问地址;根据所述当前指令的访问地址判断所述当前异常是否为执行了非法的指令;若是,则对所述二级加密代码进行解密并执行,并消除所述当前异常;
生成新的随机密码;根据所述新的随机密码对解密后的核心代码重新进行随机加密。
5.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-3任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811157565.5A CN109145533B (zh) | 2018-09-30 | 2018-09-30 | 一种使用随机密码保护代码的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811157565.5A CN109145533B (zh) | 2018-09-30 | 2018-09-30 | 一种使用随机密码保护代码的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109145533A CN109145533A (zh) | 2019-01-04 |
CN109145533B true CN109145533B (zh) | 2021-11-26 |
Family
ID=64814206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811157565.5A Active CN109145533B (zh) | 2018-09-30 | 2018-09-30 | 一种使用随机密码保护代码的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109145533B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110135129B (zh) * | 2019-04-12 | 2023-04-07 | 平安科技(深圳)有限公司 | 代码段保护方法、装置、计算机设备和存储介质 |
CN113642021B (zh) * | 2021-08-20 | 2024-05-28 | 深信服科技股份有限公司 | 一种业务代码提交方法、处理方法、装置及电子设备 |
CN114553491A (zh) * | 2022-01-24 | 2022-05-27 | 大唐互联科技(武汉)有限公司 | 一种数据分级加密方法、系统及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101008972A (zh) * | 2006-01-27 | 2007-08-01 | 北京飞天诚信科技有限公司 | 软件保护装置数据传输过程的安全控制方法及其设备 |
CN106250771A (zh) * | 2016-07-27 | 2016-12-21 | 北京邮电大学 | 一种针对安卓程序代码的加密方法 |
CN107066843A (zh) * | 2017-03-31 | 2017-08-18 | 武汉斗鱼网络科技有限公司 | 一种对应用程序进行保护的方法及装置 |
CN108259171A (zh) * | 2018-01-12 | 2018-07-06 | 武汉斗鱼网络科技有限公司 | Shader文件的保护方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101227275A (zh) * | 2008-02-13 | 2008-07-23 | 刘海云 | 随机加密和穷举法解密相结合的加密方法 |
CN104102507B (zh) * | 2014-06-24 | 2017-05-10 | 飞天诚信科技股份有限公司 | 一种JavaCard应用功能扩展的实现方法 |
CN108307246B (zh) * | 2018-01-09 | 2020-02-07 | 武汉斗鱼网络科技有限公司 | 一种计算直播间人气的方法、存储介质、设备及系统 |
CN108184146B (zh) * | 2018-01-12 | 2020-01-03 | 武汉斗鱼网络科技有限公司 | 一种计算直播平台人气的方法及相关设备 |
-
2018
- 2018-09-30 CN CN201811157565.5A patent/CN109145533B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101008972A (zh) * | 2006-01-27 | 2007-08-01 | 北京飞天诚信科技有限公司 | 软件保护装置数据传输过程的安全控制方法及其设备 |
CN106250771A (zh) * | 2016-07-27 | 2016-12-21 | 北京邮电大学 | 一种针对安卓程序代码的加密方法 |
CN107066843A (zh) * | 2017-03-31 | 2017-08-18 | 武汉斗鱼网络科技有限公司 | 一种对应用程序进行保护的方法及装置 |
CN108259171A (zh) * | 2018-01-12 | 2018-07-06 | 武汉斗鱼网络科技有限公司 | Shader文件的保护方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109145533A (zh) | 2019-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2017032263A1 (zh) | 身份认证方法及装置 | |
US10445487B2 (en) | Methods and apparatus for authentication of joint account login | |
KR101700731B1 (ko) | 애플리케이션에 접근하기 위한 방법 및 장치 | |
JP5775738B2 (ja) | 情報処理装置、セキュアモジュール、情報処理方法、および情報処理プログラム | |
US20170034189A1 (en) | Remediating ransomware | |
KR102048756B1 (ko) | 무선단말기에서 정보를 관리하기 위한 방법 및 장치 | |
KR101900841B1 (ko) | 이동 단말기의 애플리케이션 프로그램 패스워드를 보호하는 방법 및 장치 | |
CN109145533B (zh) | 一种使用随机密码保护代码的方法及装置 | |
CN107454048B (zh) | 信息的处理方法及装置、信息的认证方法、装置及系统 | |
CN109284585B (zh) | 一种脚本加密方法、脚本解密运行方法和相关装置 | |
EP3270318B1 (en) | Dynamic security module terminal device and method for operating same | |
JP2016540282A (ja) | 動的ライブラリを保護する方法及び装置 | |
US20180204004A1 (en) | Authentication method and apparatus for reinforced software | |
WO2017107896A1 (zh) | 一种文档防护方法及装置 | |
CN107563176A (zh) | 基于u盘的登录认证方法、系统、可读存储介质和计算机 | |
US20170201528A1 (en) | Method for providing trusted service based on secure area and apparatus using the same | |
US20150047019A1 (en) | Information processing method and electronic device | |
CN110765470A (zh) | 安全键盘实现方法、装置、计算机设备及存储介质 | |
CN108259183B (zh) | 一种关注方法、装置、电子设备及介质 | |
CN115982761A (zh) | 敏感信息处理方法、装置、电子设备和存储介质 | |
US9210134B2 (en) | Cryptographic processing method and system using a sensitive data item | |
CN108206961B (zh) | 一种计算直播平台人气的方法及相关设备 | |
CN106789051B (zh) | 一种保护文件的方法、装置和计算设备 | |
CN110932853B (zh) | 一种基于可信模块的密钥管理装置和密钥管理方法 | |
CN110445774B (zh) | IoT设备的安全防护方法、装置及设备 |
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 |