关键代码保护方法以及代码生成装置和代码运行装置的制造方法

文档序号:10535297阅读:199来源:国知局
关键代码保护方法以及代码生成装置和代码运行装置的制造方法
【专利摘要】本发明公开了关键代码保护方法以及代码生成装置和代码运行装置,所述方法包括:根据去除关键代码后的客户端应用程序代码生成客户端应用的可执行文件;根据关键代码生成可动态加载执行的二进制数据,以便当客户端应用启动之后,若需要运行关键代码,动态加载该二进制数据并执行。应用本发明所述方案,能够提高关键代码的安全性。
【专利说明】
关键代码保护方法以及代码生成装置和代码运行装置
【技术领域】
[0001]本发明涉及计算机应用技术,特别涉及关键代码保护方法以及代码生成装置和代码运行装置。
【【背景技术】】
[0002]现有技术中,对于客户端应用,可使用高级语言来编写程序代码,并通过编译链接等,得到二进制的可执行文件。
[0003]他人在获取到上述可执行文件后,进行反汇编,通过对汇编代码进行静态分析和动态调试等,可对可执行文件中的关键代码进行修改,从而降低了关键代码的安全性。

【发明内容】

[0004]本发明提供了关键代码保护方法以及代码生成装置和代码运行装置,能够提高关键代码的安全性。
[0005]具体技术方案如下:
[0006]—种关键代码保护方法,包括:
[0007]根据去除关键代码后的客户端应用程序代码生成所述客户端应用的可执行文件;
[0008]根据所述关键代码生成可动态加载执行的二进制数据,以便当所述客户端应用启动之后,若需要运行所述关键代码,动态加载所述二进制数据并执行。
[0009]根据本发明一优选实施例,该方法进一步包括:将所述二进制数据保存在服务器中。
[0010]根据本发明一优选实施例,该方法进一步包括:对保存在所述服务器中的所述二进制数据进行更新。
[0011]根据本发明一优选实施例,该方法进一步包括:将所述二进制数据进行编码或加密后,保存在所述服务器中。
[0012]一种关键代码保护方法,包括:
[0013]客户端应用启动之后,若需要运行自身的关键代码,则动态加载所述关键代码对应的、可动态加载执行的二进制数据,并执行所述二进制数据。
[0014]根据本发明一优选实施例,该方法进一步包括:所述客户端应用启动之后,若确定本地磁盘中未保存有所述二进制数据,则从服务器中拉取所述二进制数据并保存到本地磁盘中;
[0015]所述客户端应用动态加载所述二进制数据包括:所述客户端应用动态加载保存在本地磁盘中的所述二进制数据。
[0016]根据本发明一优选实施例,该方法进一步包括:所述客户端应用确定本地磁盘中保存有所述二进制数据,但为更新之前的所述二进制数据,则从所述服务器中拉取更新之后的所述二进制数据,并将本地磁盘中保存的更新之前的所述二进制数据替换为更新之后的所述二进制数据。
[0017]根据本发明一优选实施例,该方法进一步包括:所述客户端应用在加载执行所述二进制数据之前,若确定所述二进制数据进行了编码或加密,则对所述二进制数据进行解码或解密。
[0018]一种代码生成装置,包括:
[0019]代码生成模块,用于根据去除关键代码后的客户端应用程序代码生成所述客户端应用的可执行文件,根据所述关键代码生成可动态加载执行的二进制数据,以便当所述客户端应用启动之后,若需要运行所述关键代码,动态加载所述二进制数据并执行。
[0020]根据本发明一优选实施例,所述装置中进一步包括:保存模块;
[0021 ]保存模块,用于将所述二进制数据保存到服务器中。
[0022]根据本发明一优选实施例,所述保存模块进一步用于,将所述二进制数据进行编码或加密后,保存到所述服务器中。
[0023]根据本发明一优选实施例,所述代码生成模块进一步用于,对所述二进制数据进行更新;
[0024]所述保存模块将更新后的所述二进制数据保存到所述服务器中。
[0025]一种代码运行装置,包括:
[0026]运行模块,用于在启动之后,若需要运行自身的关键代码,则动态加载所述关键代码对应的、可动态加载执行的二进制数据,并执行所述二进制数据。
[0027]根据本发明一优选实施例,所述装置中进一步包括:拉取模块;
[0028]所述拉取模块,用于在所述运行模块启动之后,若确定本地磁盘中未保存有所述二进制数据,则从服务器中拉取所述二进制数据并保存到本地磁盘中;
[0029]所述运行模块对保存在本地磁盘中的所述二进制数据动态加载并执行。
[0030]根据本发明一优选实施例,所述拉取模块进一步用于,若确定本地磁盘中保存有所述二进制数据,但为更新之前的所述二进制数据,则从所述服务器中拉取更新之后的所述二进制数据,并将本地磁盘中保存的更新之前的所述二进制数据替换为更新之后的所述二进制数据。
[0031]根据本发明一优选实施例,所述运行模块进一步用于,在加载执行所述二进制数据之前,若确定所述二进制数据进行了编码或加密,则对所述二进制数据进行解码或解密。
[0032]通过以上介绍可以看出,本发明所述方案中,对关键代码单独进行处理,转化为可动态加载执行的二进制数据,后续,当客户端应用需要运行关键代码时,可动态加载执行,也就是说,关键代码在客户端应用中是不可见的,只有在运行时才能看到一段数据被加载执行,从而克服了现有技术中存在的问题,进而提高了关键代码的安全性。
【【附图说明】】
[0033]图1为本发明所述关键代码保护方法实施例的流程图。
[0034]图2为本发明所述代码生成装置实施例的组成结构示意图。
[0035]图3为本发明所述代码运行装置实施例的组成结构示意图。
[0036]图4为本发明所述代码生成装置、服务器以及客户端应用之间的交互方式示意图。
【【具体实施方式】】
[0037]为了使本发明的技术方案更加清楚、明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。
[0038]实施例一
[0039]图1为本发明所述关键代码保护方法实施例的流程图,如图1所示,包括以下具体实现方式。
[0040]在11中,根据去除关键代码后的客户端应用程序代码生成客户端应用的可执行文件。
[0041 ]如何编写客户端应用程序代码为现有技术。
[0042]可通过现有的编译链接方式,根据去除关键代码后的程序代码生成可执行文件。
[0043]哪些代码为关键代码可根据实际需要而定。
[0044]在12中,根据关键代码生成可动态加载执行的二进制数据,以便当客户端应用启动之后,若需要运行关键代码,动态加载该二进制数据并执行。
[0045]对于关键代码,可通过编译链接,将其转化成可动态加载执行的二进制数据。转化得到的二进制数据可保存在服务器中。
[0046]客户端应用启动之后,可首先确定本地磁盘中是否保存有该二进制数据,如果未保存,则可从服务器中拉取该二进制数据,并将拉取到的该二进制数据保存到本地磁盘中。之后,当需要运行关键代码时,客户端应用可对保存在本地磁盘中的该二进制数据动态加载并执行。
[0047]具体地,可将关键代码写成一个函数,并通过编译链接,得到可动态加载执行的二进制数据。客户端应用从服务器上拉取到该二进制数据之后,可将其保存到本地磁盘上的一个配置文件中,当需要动态加载执行该二进制数据时,可首先准备执行环境,如动态分配内存并设置其可执行属性,设置该二进制数据对应的函数在执行过程中需要调用函数的地址、需要输入的数据地址以及需要输出的数据地址(这些信息可预先定义好)等,之后,可将该二进制数据等加载到所分配的内存中,并执行该二进制数据。
[0048]其中,可将该函数在执行过程中需要调用函数的地址、需要输入的数据地址以及需要输出的数据地址等封装成一个结构体,将该结构体的地址作为该函数的参数传递到该函数中去,具体实现为现有技术。
[0049]可以看出,采用本实施例所述方法,将关键代码转化为可动态加载执行的二进制数据,后续,当客户端应用需要运行关键代码时,可对该二进制数据动态加载执行,也就是说,关键代码在客户端应用中是不可见的,只有在运行时才能看到一段数据被加载执行,从而克服了现有技术中存在的问题,进而提高了关键代码的安全性。
[0050]在此基础上,为了进一步提高关键代码的安全性,还可以对保存在服务器上的二进制数据进行安全保护处理,如按照预定方式对该二进制数据进行编码或加密。后续客户端应用加载执行该二进制数据之前,若确定该二进制数据进行了编码或加密,则需要先对该二进制数据进行去保护处理,如按照与编码方式对应的解码方式对该二进制数据进行解码,或者,按照与加密方式对应的解密方式对该二进制数据进行解密。具体采用何种编码方式或何种加密方式不作限制,可根据实际需要而定。
[0051]另外,如果上述二进制数据在运行期间被修改,那么还可对服务器上所保存的该二进制数据进行更新,即对关键代码进行更新,以使得所作修改失效,从而进一步提高了关键代码的安全性。
[0052]相应地,客户端应用启动之后,若确定本地保存有该二进制数据,但为更新之前的该二进制数据,则可从服务器中拉取更新之后的该二进制数据,并将本地磁盘中保存的更新之前的该二进制数据替换为更新之后的该二进制数据,以保证动态加载执行的二进制数据为更新之后的二进制数据。客户端应用可通过询问服务器来获知是否对二进制数据进行了更新。
[0053]在实际应用中,为了使客户端应用按照上述方式运行,需要在客户端应用对应的程序代码中增设:拉取代码、加载代码。
[0054]加载代码位于关键代码原来所在位置,用于执行:对保存在本地磁盘中的二进制数据进行解码或解密以及对该二进制数据进行加载执行等。
[0055]拉取代码位于程序代码的起始位置,因此将首先被运行,拉取代码用于执行:在客户端应用启动之后,确定本地磁盘中是否保存有关键代码对应的可动态加载执行的二进制数据,若未保存,则从服务器上拉取该二进制数据,并将拉取到的该二进制数据保存到本地磁盘中,若已保存,则进一步向服务器询问自上次拉取之后是否对该二进制数据进行了更新,若进行了更新,则从服务器上拉取更新后的该二进制数据,并将拉取到的更新后的该二进制数据保存到本地磁盘中,若未更新,则可不作处理。
[0056]加载代码和拉取代码的具体实现方式不限,只需根据各自功能编写相应的代码即可。
[0057]以上是关于本发明方法实施例的介绍,与所述方法对应的,本发明中还提出了一种代码生成装置以及一种代码运行装置,分别如实施例二和实施例三中所述。
[0058]实施例二
[0059]图2为本发明代码生成装置实施例的组成结构示意图,如图2所示,包括:代码生成模块21,还可进一步包括:保存模块22。
[0060]代码生成模块21,用于根据去除关键代码后的客户端应用程序代码生成客户端应用的可执行文件,根据关键代码生成可动态加载执行的二进制数据,以便当客户端应用启动之后,若需要运行关键代码,动态加载该二进制数据并执行。
[0061]可通过编译链接等,根据去除关键代码后的程序代码生成可执行文件。哪些代码为关键代码可根据实际需要而定。
[0062]对于关键代码,可通过编译链接等,将其转化成可动态加载执行的二进制数据。转化得到的二进制数据可保存到服务器中,保存模块22即用于将接收自代码生成模块21的二进制数据保存到服务器中。
[0063]客户端应用启动之后,可首先确定本地磁盘中是否保存有该二进制数据,如果未保存,则可从服务器中拉取该二进制数据,并将拉取到的该二进制数据保存到本地磁盘中。之后,当需要运行关键代码时,客户端应用可对保存在本地磁盘中的该二进制数据动态加载并执行。
[0064]为了进一步提高关键代码的安全性,保存模块22还可将得到的二进制数据进行编码或加密后,保存到服务器中。后续客户端应用在加载执行该二进制数据之前,若确定该二进制数据进行了编码或加密,则需要先对该二进制数据进行去保护处理,如按照与编码方式对应的解码方式对该二进制数据进行解码,或者,按照与加密方式对应的解密方式对该二进制数据进行解密。具体采用何种编码方式或何种加密方式不作限制,可根据实际需要而定。
[0065]另外,如果上述二进制数据在运行期间被修改,那么代码生成模块21还可对该二进制数据进行更新,即对关键代码进行更新,以使得所作修改失效,从而进一步提高了关键代码的安全性。保存模块22会将更新后的二进制数据保存到服务器中,以替代更新之前的二进制数据。客户端应用启动之后,若确定本地保存有该二进制数据,但为更新之前的该二进制数据,则可从服务器中拉取更新之后的该二进制数据,并将本地磁盘中保存的更新之前的该二进制数据替换为更新之后的该二进制数据,以保证动态加载执行的二进制数据是更新之后的二进制数据,客户端应用可通过询问服务器来获知是否对二进制数据进行了更新。
[0066]实施例三
[0067]图3为本发明代码运行装置实施例的组成结构示意图,如图3所示,包括:运行模块31,还可进一步包括:拉取模块32。
[0068]运行模块31,用于在启动之后,若需要运行自身的关键代码,则动态加载关键代码对应的、可动态加载执行的二进制数据,并执行该二进制数据。
[0069]对于关键代码,可通过编译链接等,将其转化成可动态加载执行的二进制数据。转化得到的二进制数据可保存在服务器中。
[0070]通过编译链接等,可根据去除关键代码后的程序代码生成可执行文件。哪些代码为关键代码可根据实际需要而定。
[0071]拉取模块32监测到运行模块31启动之后,若确定本地磁盘中未保存有所述二进制数据,则可从服务器中拉取该二进制数据并保存到本地磁盘中;后续,运行模块31会对保存在本地磁盘中的该二进制数据动态加载并执行。
[0072]为了进一步提高关键代码的安全性,保存在服务器中的二进制数据还可以是经过编码或加密后的,这样,运行模块31在加载执行该二进制数据之前,若确定该二进制数据进行了编码或加密,则需要先对该二进制数据进行解码或解密。
[0073]另外,如果上述二进制数据在运行期间被修改,那么还可对该二进制数据进行更新,即对关键代码进行更新,以使得所作修改失效,从而进一步提高了关键代码的安全性。若拉取模块32确定本地磁盘中保存有二进制数据,但为更新之前的二进制数据,则从服务器中拉取更新之后的二进制数据,并将本地磁盘中保存的更新之前的二进制数据替换为更新之后的二进制数据。
[0074]实施例四
[0075]图4为本发明所述代码生成装置、服务器以及客户端应用(代码运行装置)之间的交互方式示意图。
[0076]如图4所示,代码生成装置41根据去除关键代码后的客户端应用程序代码生成客户端应用43的可执行文件,根据关键代码生成可动态加载执行的二进制数据,保存到服务器42中,或者,将该二进制数据进行解码或加密后保存到服务器42中。
[0077]客户端应用43启动之后,确定本地磁盘中是否保存有该二进制数据,若未保存,则从服务器42上拉取该二进制数据,并将拉取到的该二进制数据保存到本地磁盘中,若已保存,则进一步向服务器42询问自上次拉取之后是否对该二进制数据进行了更新,若进行了更新,则从服务器42上拉取更新后的该二进制数据,并将拉取到的更新后的该二进制数据保存到本地磁盘中,若未更新,则可不作处理,后续,当客户端应用43需要运行关键代码时,对该二进制数据进行解码或解密,之后准备执行环境,加载该二进制数据并执行。
[0078]基于上述各实施例中的介绍可知,采用本发明所述方案后,关键代码在客户端应用中是不可见的,只有在运行时才能看到一段数据被加载执行,从而克服了现有技术中存在的问题,进而提高了关键代码的安全性,在此基础上,还可以通过对关键代码对应的二进制数据进行编码或加密,以及对二进制数据进行更新等,进一步提高关键代码的安全性。
[0079]在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0080]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0081]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0082]上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(Processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(R0M,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0083]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【主权项】
1.一种关键代码保护方法,其特征在于,包括: 根据去除关键代码后的客户端应用程序代码生成客户端应用的可执行文件; 根据所述关键代码生成可动态加载执行的二进制数据,以便当所述客户端应用启动之后,若需要运行所述关键代码,动态加载所述二进制数据并执行。2.根据权利要求1所述的方法,其特征在于, 该方法进一步包括:将所述二进制数据保存在服务器中。3.根据权利要求2所述的方法,其特征在于, 该方法进一步包括:对保存在所述服务器中的所述二进制数据进行更新。4.根据权利要求2所述的方法,其特征在于, 该方法进一步包括:将所述二进制数据进行编码或加密后,保存在所述服务器中。5.一种关键代码保护方法,其特征在于,包括: 客户端应用启动之后,若需要运行自身的关键代码,则动态加载所述关键代码对应的、可动态加载执行的二进制数据,并执行所述二进制数据。6.根据权利要求5所述的方法,其特征在于, 该方法进一步包括:所述客户端应用启动之后,若确定本地磁盘中未保存有所述二进制数据,则从服务器中拉取所述二进制数据并保存到本地磁盘中; 所述客户端应用动态加载所述二进制数据包括:所述客户端应用动态加载保存在本地磁盘中的所述二进制数据。7.根据权利要求6所述的方法,其特征在于, 该方法进一步包括:所述客户端应用确定本地磁盘中保存有所述二进制数据,但为更新之前的所述二进制数据,则从所述服务器中拉取更新之后的所述二进制数据,并将本地磁盘中保存的更新之前的所述二进制数据替换为更新之后的所述二进制数据。8.根据权利要求6所述的方法,其特征在于, 该方法进一步包括:所述客户端应用加载执行所述二进制数据之前,若确定所述二进制数据进行了编码或加密,则对所述二进制数据进行解码或解密。9.一种代码生成装置,其特征在于,包括: 代码生成模块,用于根据去除关键代码后的客户端应用程序代码生成客户端应用的可执行文件,根据所述关键代码生成可动态加载执行的二进制数据,以便当所述客户端应用启动之后,若需要运行所述关键代码,动态加载所述二进制数据并执行。10.根据权利要求9所述的装置,其特征在于, 所述装置中进一步包括:保存模块; 保存模块,用于将所述二进制数据保存到服务器中。11.根据权利要求10所述的装置,其特征在于, 所述保存模块进一步用于,将所述二进制数据进行编码或加密后,保存到所述服务器中。12.根据权利要求10所述的装置,其特征在于, 所述代码生成模块进一步用于,对所述二进制数据进行更新; 所述保存模块将更新后的所述二进制数据保存到所述服务器中。13.一种代码运行装置,其特征在于,包括: 运行模块,用于在启动之后,若需要运行自身的关键代码,则动态加载所述关键代码对应的、可动态加载执行的二进制数据,并执行所述二进制数据。14.根据权利要求13所述的装置,其特征在于, 所述装置中进一步包括:拉取模块; 所述拉取模块,用于在所述运行模块启动之后,若确定本地磁盘中未保存有所述二进制数据,则从服务器中拉取所述二进制数据并保存到本地磁盘中; 所述运行模块对保存在本地磁盘中的所述二进制数据动态加载并执行。15.根据权利要求14所述的装置,其特征在于, 所述拉取模块进一步用于,若确定本地磁盘中保存有所述二进制数据,但为更新之前的所述二进制数据,则从所述服务器中拉取更新之后的所述二进制数据,并将本地磁盘中保存的更新之前的所述二进制数据替换为更新之后的所述二进制数据。16.根据权利要求14所述的装置,其特征在于, 所述运行模块进一步用于,加载执行所述二进制数据之前,若确定所述二进制数据进行了编码或加密,则对所述二进制数据进行解码或解密。
【文档编号】G06F21/60GK105893860SQ201610293871
【公开日】2016年8月24日
【申请日】2016年5月5日
【发明人】金季强
【申请人】百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1