CN112613037A - 一种代码校验方法及装置 - Google Patents

一种代码校验方法及装置 Download PDF

Info

Publication number
CN112613037A
CN112613037A CN202011599487.1A CN202011599487A CN112613037A CN 112613037 A CN112613037 A CN 112613037A CN 202011599487 A CN202011599487 A CN 202011599487A CN 112613037 A CN112613037 A CN 112613037A
Authority
CN
China
Prior art keywords
dynamic link
link library
code
library file
checked
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
CN202011599487.1A
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 Novel Supertv Digital Tv Technology Co ltd
Original Assignee
Beijing Novel Supertv Digital Tv 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 Novel Supertv Digital Tv Technology Co ltd filed Critical Beijing Novel Supertv Digital Tv Technology Co ltd
Priority to CN202011599487.1A priority Critical patent/CN112613037A/zh
Publication of CN112613037A publication Critical patent/CN112613037A/zh
Pending legal-status Critical Current

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/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/565Static detection by checking file integrity

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种代码校验方法及装置;该方法包括:使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;当通过应用程序加载加密后的动态链接库文件时,调用解密代码对加密后的动态链接库文件进行解密并加载到内存中;当解密加载后的动态链接库被调用运行时,基于加密前的动态链接库文件的待校验代码段的哈希值,对解密加载后的动态链接库文件的待校验代码段进行完整性校验。本申请实施例可以动态保护代码的正常运行,防止代码在运行过程中的非法侵权行为,从而可以达到保护应用开发者和使用者的合法权益的目的。

Description

一种代码校验方法及装置
技术领域
本发明实施例涉及计算机应用技术领域,尤其涉及一种代码校验方法及装置。
背景技术
随着Android系统在各种设备平台上的广泛应用,Android应用也遇到了越来越多的非法攻击。很多攻击者通过静态反编译、内存代码修改、内存代码注入、中断调试等方式对运行在Android系统上的应用程序的动态链接库SO进行攻击,从而达到盗版、篡改程序运行结果、获取机密信息和私密数据等非法侵权目的,极大损害了应用开发者和使用者的合法权益。
当前应用开发者通常采用对SO进行加密保护的方法,对程序代码进行保护。但该方法只能防止SO在被加载之前被静态反编译,一旦SO被加载到内存后,运行过程中就可能被攻击者采用内存代码修改、内存代码注入、中断调试等方式进行攻击。此外,在程序运行过程中,攻击者如果采用设置软中断点、注入运行代码、修改代码运行逻辑攻击手段,必然会破坏代码段的完整性;而且通过中断等方法对代码进行调试跟踪时,会增加调试代码运行的时间。
发明内容
本发明提供一种代码校验方法及装置,可以动态保护代码的正常运行,防止代码在运行过程中的非法侵权行为,从而可以达到保护应用开发者和使用者的合法权益的目的。
第一方面,本发明实施例提供了一种代码校验方法,所述方法包括:
使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;
当通过应用程序加载所述加密后的动态链接库文件时,调用解密代码对所述加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将所述解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库;
当所述解密加载后的动态链接库被调用运行时,基于所述加密前的动态链接库文件的待校验代码段的哈希值,对所述解密加载后的动态链接库文件的待校验代码段进行完整性校验。
第二方面,本发明实施例还提供了一种代码校验装置,所述装置包括:加密模块、解密模块和校验模块;其中,
所述加密模块,用于使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;
所述解密模块,用于当通过应用程序加载所述加密后的动态链接库文件时,调用解密代码对所述加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将所述解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库;
所述校验模块,用于当所述解密加载后的动态链接库被调用运行时,基于所述加密前的动态链接库文件的待校验代码段的哈希值,对所述解密加载后的动态链接库文件的待校验代码段进行完整性校验。
本发明实施例提出了一种代码校验方法及装置,先使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;当通过应用程序加载加密后的动态链接库文件时,调用解密代码对加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段并加载到内存中;当解密加载后的动态链接库被调用运行时,基于加密前的动态链接库文件的待校验代码段的哈希值,对解密加载后的动态链接库文件的待校验代码段进行完整性校验。也就是说,在本发明的技术方案可以动态地对解密加载后的动态链接库文件的待校验代码段进行完整性校验,防止代码在运行过程中的非法侵权行为。而在现有技术中,应用开发者通常采用对SO进行加密保护的方法,对程序代码进行保护。但该方法只能防止SO在被加载之前被静态反编译,一旦SO被加载到内存后,只能通过中断等方法对代码进行调试跟踪时,这样必然会增加调试代码运行的时间。因此,和现有技术相比,本发明实施例提出的代码校验方法及装置,可以动态保护代码的正常运行,防止代码在运行过程中的非法侵权行为,从而可以达到保护应用开发者和使用者的合法权益的目的;并且,本发明实施例的技术方案实现简单方便、便于普及,适用范围更广。
附图说明
图1为本发明实施例提供的代码校验方法的第一流程示意图;
图2为本发明实施例提供的代码校验方法的第二流程示意图;
图3为本发明实施例提供的代码校验装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例提供的代码校验方法的第一流程示意图。如图1所示,代码校验方法可以包括以下步骤:
步骤101、使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中。
在本步骤中,电子设备可以使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中。具体地,使用源码编译出来的动态链接库文件包括:文件头和文件内容;其中,文件头为:ELF_Header;文件内容至少包括:初始代码段、待校验代码段和数据代码段;具体地,初始代码段为:“.init”和“.init_array”;待校验代码段为:“.securetext”;数据段为:“.data”;此外,加密前的动态链接库文件还可以包括:文本段和只读数据段;其中,文本段为:“.text”;只读数据段为:“.rodata”。
本申请可以通过动态链接库文件加密工具计算出加密前的动态链接库文件的待校验代码段“.securetext”的哈希值,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中。具体地,加密前的动态链接库文件包括:文件头和文件内容;其中,文件头为:ELF_Header;文件内容至少可以包括:初始代码段、待校验代码段和数据代码段;具体地,初始代码段为:“.init”和“.init_array”;待校验代码段为:“.securetext’”;数据段为:“.data”;此外,加密后的动态链接库文件还可以包括:文本段和只读数据段;其中,文本段为:“.text”;只读数据段为:“.rodata”。ELF(Executable andLinkable Format)是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,本申请中的ELF是指运行在Android系统上的动态链接库文件。
在本申请的具体实施例中,在对动态链接库文件的加密过程中,电子设备可以通过加密工具加载动态链接库文件,然后计算原动态链接库文件的待校验代码段“.securetext”的哈希值,并将其替换原动态链接库文件的数据段“.data”中预置的参数值;同时,使用密文替换原动态链接库文件的待校验代码段“.securetext”的数据。具体地,动态链接库文件是指Android系统上地动态链接库文件(Shared Object,简称SO)。本申请中的使用源码编译出来的动态链接库文件为原SO,加密前的动态链接库文件为Secure SO。在本申请的具体实施例中,加载Secure SO的方法包括以下步骤:1)获取Secure SO的待校验代码段“.securetext’”的数据SecureText’、只读数据段“.rodata”的数据ROData和“.data”段中的待校验代码段的哈希值SecureText_Hash_Value’;2)解密SecureText’,得到原SO对应的待校验代码明文SecureText;其中,SecureText=AE_Decrypt(ROData|SecureText_Hash_Value’,SecureText’(MAC|EnSecureText));3)若解密成功,则在内存中使用SecureText替换待校验代码段“.securetext’”的数据SecureText’,完成应用对Secure SO的加载;否则应用加载Secure SO失败。
步骤102、当通过应用程序加载加密后的动态链接库文件时,调用解密代码对加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库。
在本步骤中,当通过应用程序加载加密后的动态链接库文件时,电子设备可以调用解密代码对加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库。例如,假设使用源码编译出来的动态链接库文件为原SO,加密前的动态链接库文件为Secure SO;电子设备可以自动调用原SO的初始代码段“.init”或者“.init_array”中的解密代码,对加密后的动态链接库文件进行解密。
步骤103、当解密加载后的动态链接库被调用运行时,基于加密前的动态链接库文件的待校验代码段的哈希值,对解密加载后的动态链接库文件的待校验代码段进行完整性校验。
在本步骤中,当解密加载后的动态链接库被调用运行时,电子设备可以基于加密前的动态链接库文件的待校验代码段的哈希值,对解密加载后的动态链接库文件的待校验代码段进行完整性校验。具体地,电子设备可以先计算解密后的动态链接库文件的待校验代码段的哈希值;若解密加载后的动态链接库文件的待校验代码段的哈希值与加密前的动态链接库文件的待校验代码段的哈希值相同,则电子设备可以判定解密加载后的动态链接库的待校验代码段通过完整性校验;若解密后的动态链接库文件的待校验代码段的哈希值与加密前的动态链接库文件的待校验代码段的哈希值不相同,则电子设备可以判定解密加载后的动态链接库的待校验代码段不通过完整性校验。本申请要求在代码开发编码时定义用于代码的完整性校验和运行时间校验的参数,提供SO加载解密校验的代码实现。编译打包生成SO时,待校验代码会生成“.securetext”段,代码的完整性校验参数会在数据段“.data”的指定位置,SO加载解密校验的代码实现在“.init”段或者“.init_array”段中。Android系统应用在加载Secure SO时,首先执行“.init”段或者“.init_array”段中SO加载解密校验代码,对“.securetext”段的数据进行解密校验和替换。SO运行过程中,会动态地校验代码段的完整性以及关键/重要代码的执行时间,一旦校验失败,则中止正常运行,进入异常处理流程。
本发明实施例提出的代码校验方法,先使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;当通过应用程序加载加密后的动态链接库文件时,调用解密代码对加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段并加载到内存中;当解密加载后的动态链接库被调用运行时,基于加密前的动态链接库文件的待校验代码段的哈希值,对解密加载后的动态链接库文件的待校验代码段进行完整性校验。也就是说,在本发明的技术方案可以动态地对解密加载后的动态链接库文件的待校验代码段进行完整性校验,防止代码在运行过程中的非法侵权行为。而在现有技术中,应用开发者通常采用对SO进行加密保护的方法,对程序代码进行保护。但该方法只能防止SO在被加载之前被静态反编译,一旦SO被加载到内存后,只能通过中断等方法对代码进行调试跟踪时,这样必然会增加调试代码运行的时间。因此,和现有技术相比,本发明实施例提出的代码校验方法及装置,可以动态保护代码的正常运行,防止代码在运行过程中的非法侵权行为,从而可以达到保护应用开发者和使用者的合法权益的目的;并且,本发明实施例的技术方案实现简单方便、便于普及,适用范围更广。
实施例二
图2为本发明实施例提供的代码校验方法的第二流程示意图。如图2所示,代码校验方法可以包括以下步骤:
步骤201、使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中。
步骤202、当通过应用程序加载加密后的动态链接库文件时,调用解密代码对加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库。
步骤203、当解密加载后的动态链接库被调用运行时,基于加密前的动态链接库文件的待校验代码段的哈希值,对解密加载后的动态链接库文件的待校验代码段进行完整性校验。
步骤204、当解密加载后的动态链接库被调用运行时,获取解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间。
在本步骤中,当解密加载后的动态链接库被调用运行时,电子设备可以获取解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间。具体地,当各个校验单元中的待校验代码在被调用时和运行完成时,电子设备可以分别记录各自对应的时间值;然后根据各个待校验代码在被调用时和运行完成时的时间值,计算各个待校验代码的运行时间;其中,解密加载后的动态链接库文件的待校验代码段中各个待校验代码分别构成独立的校验单元。
步骤205、根据解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间与解密加载后的动态链接库的待校验代码段中的各个待校验代码的正常运行的最大时间值,对解密加载后的动态链接库的待校验代码段进行时间校验。
在本步骤中,电子设备可以根据解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间与解密加载后的动态链接库的待校验代码段中的各个待校验代码的正常运行的最大时间值,对解密加载后的动态链接库的待校验代码段进行时间校验。具体地,若各个待校验代码的运行时间小于或者等于各个待校验代码的正常运行的最大时间值,则电子设备可以判定解密加载后的动态链接库的待校验代码段通过运行时间校验;若各个待校验代码的运行时间大于各个待校验代码的正常运行的最大时间值,则电子设备可以判定解密加载后的动态链接库的待校验代码段不通过运行时间校验。例如,当各个待校验在被调用时,电子设备可以获取当前时间值T1;当各个待校验代码运行完成时,电子设备可以获取当前时间值T2,则各个待校验代码的运行时间为T2-T1,如果各个待校验代码的运行时间T2-T1小于或者等于各个待校验代码的正常运行的最大运行时间,则电子设备可以判定解密加载后的动态链接库的待校验代码段;如果各个待校验代码的运行时间T2-T1大于各个待校验代码的正常运行的最大运行时间,则电子设备可以判定解密加载后的动态链接库的待校验代码段不通过运行时间校验。
在本申请的具体实施例中,电子设备在对SO开发编码时,应完成以下工作:1)指定待校验的代码编译打包到代码段“.securetext”,在固定全局变量位置定义对应的校验参数SecureText_Hash_Value并赋初值。2)为每段待校验的代码定义对应的校验参数MaxTime并赋值最大运行时间值。3)在SO的构造位置实现SO加载解密校验代码,编译打包时该段代码会在“.init”或者“.init_array”段,在应用加载Secure SO时将被首先调用执行。源代码编译打包生成原SO,使用加密工具对其进行加密保护生成Secure SO时,可以通过以下步骤实现:1)通过加密工具加载原SO,获取原SO中的待校验代码段“.securetext”中的数据SecureText和只读数据段“.rodata”中的数据ROData。SO中的待校验代码段名为“.securetext”,只读数据段名为“.rodata”。2)计算待校验代码段“.securetext”中的数据SecureText的哈希值SecureText_Hash_Value’;其中,SecureText_Hash_Value’=Hash(SecureText)。3)使用SecureText_Hash_Value’替换原SO中的数据段“.data”中的SecureText_Hash_Value。4)加密SecureText并生成SecureText’;其中,ROData|SecureText_Hash_Value’为明文部分,SecureText为待加密部分,动态链接库文件加密工具可以通过认证加密算法(Authenticated Encryption Algorithm,简称AE)实现认证加密,MAC为AE生成的校验数据,EnSecureText为AE生成的密文数据。具体地,SecureText’(MAC|EnSecureText)=AE_Encrypt(ROData|SecureText_Hash_Value’,SecureText)。5)使用SecureText’替换待校验代码段SecureText。6)生成被加密保护后的Secure SO。
本发明提出了一种程序在运行过程中实现代码保护的方法,通过动态校验代码段的完整性和运行时间等保护措施,提高了程序代码正常运行的防护能力,有效地防止通过调试、篡改等非法手段跟踪运行、破解程序代码、非法获取私密信息等侵权行为。在程序代码加载和运行过程中,动态地检测代码段的完整性以及代码段的运行时间,防止对程序设置中断运行进行跟踪和调试,从而可以确保程序运行时代码的完整性,反调试,防止程序盗版、篡改程序运行结果、获取机密信息和私密数据等非法侵权行为。
本发明实施例提出的代码校验方法,先使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;当通过应用程序加载加密后的动态链接库文件时,调用解密代码对加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段并加载到内存中;当解密加载后的动态链接库被调用运行时,基于加密前的动态链接库文件的待校验代码段的哈希值,对解密加载后的动态链接库文件的待校验代码段进行完整性校验。也就是说,在本发明的技术方案可以动态地对解密加载后的动态链接库文件的待校验代码段进行完整性校验,防止代码在运行过程中的非法侵权行为。而在现有技术中,应用开发者通常采用对SO进行加密保护的方法,对程序代码进行保护。但该方法只能防止SO在被加载之前被静态反编译,一旦SO被加载到内存后,只能通过中断等方法对代码进行调试跟踪时,这样必然会增加调试代码运行的时间。因此,和现有技术相比,本发明实施例提出的代码校验方法及装置,可以动态保护代码的正常运行,防止代码在运行过程中的非法侵权行为,从而可以达到保护应用开发者和使用者的合法权益的目的;并且,本发明实施例的技术方案实现简单方便、便于普及,适用范围更广。
实施例三
图3为本发明实施例三提供的代码校验装置的结构示意图。如图3所示,所述代码校验装置包括:加密模块301、解密模块302和校验模块303;其中,
所述加密模块301,用于使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;
所述解密模块302,用于当通过应用程序加载所述加密后的动态链接库文件时,调用解密代码对所述加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将所述解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库;
所述校验模块303,用于当所述解密加载后的动态链接库被调用运行时,基于所述加密前的动态链接库文件的待校验代码段的哈希值,对所述解密加载后的动态链接库文件的待校验代码段进行完整性校验。
进一步的,所述校验模块303,具体用于计算所述解密后的动态链接库文件的待校验代码段的哈希值;若所述解密加载后的动态链接库文件的待校验代码段的哈希值与所述加密前的动态链接库文件的待校验代码段的哈希值相同,则判定所述解密加载后的动态链接库的待校验代码段通过完整性校验;若所述解密后的动态链接库文件的待校验代码段的哈希值与所述加密前的动态链接库文件的待校验代码段的哈希值不相同,则判定所述解密加载后的动态链接库的待校验代码段不通过完整性校验。
进一步的,所述校验模块303,用于当所述解密加载后的动态链接库被调用运行时,获取所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间;根据所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间与所述解密加载后的动态链接库的待校验代码段中的各个待校验代码的正常运行的最大时间值,对所述解密加载后的动态链接库的待校验代码段进行时间校验。
进一步的,所述校验模块303,具体用于当各个校验单元中的待校验代码在被调用时和运行完成时分别记录各自对应的时间值;根据各个待校验代码在被调用时和运行完成时的时间值,计算各个待校验代码的运行时间。
进一步的,所述校验模块303,具体用于若各个待校验代码的运行时间小于或者等于各个待校验代码的正常运行的最大时间值,则判定所述解密加载后的动态链接库的待校验代码段通过运行时间校验;若各个待校验代码的运行时间大于各个待校验代码的正常运行的最大时间值,则判定所述解密加载后的动态链接库的待校验代码段不通过运行时间校验。
上述代码校验装置可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例提供的代码校验方法。

Claims (10)

1.一种代码校验方法,其特征在于,所述方法包括:
使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;
当通过应用程序加载所述加密后的动态链接库文件时,调用解密代码对所述加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将所述解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库;
当所述解密加载后的动态链接库被调用运行时,基于所述加密前的动态链接库文件的待校验代码段的哈希值,对所述解密加载后的动态链接库文件的待校验代码段进行完整性校验。
2.根据权利要求1所述的方法,其特征在于,所述基于加密前的动态链接库文件的待校验代码段的哈希值,对所述解密后的动态链接库文件的待校验代码段进行完整性校验,包括:
计算所述解密后的动态链接库文件的待校验代码段的哈希值;
若所述解密加载后的动态链接库文件的待校验代码段的哈希值与所述加密前的动态链接库文件的待校验代码段的哈希值相同,则判定所述解密加载后的动态链接库的待校验代码段通过完整性校验;若所述解密后的动态链接库文件的待校验代码段的哈希值与所述加密前的动态链接库文件的待校验代码段的哈希值不相同,则判定所述解密加载后的动态链接库的待校验代码段不通过完整性校验。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述解密加载后的动态链接库被调用运行时,获取所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间;
根据所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间与所述解密加载后的动态链接库的待校验代码段中的各个待校验代码的正常运行的最大时间值,对所述解密加载后的动态链接库的待校验代码段进行时间校验。
4.根据权利要求3所述的方法,其特征在于,所述获取所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间,包括:
当各个校验单元中的待校验代码在被调用时和运行完成时,分别记录各自对应的时间值;
根据各个待校验代码在被调用时和运行完成时的时间值,计算各个待校验代码的运行时间。
5.根据权利要求3所述的方法,其特征在于,所述根据所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间与所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的正常运行的最大时间值,对所述解密后的动态链接库文件的待校验代码段进行时间校验,包括:
若各个待校验代码的运行时间小于或者等于各个待校验代码的正常运行的最大时间值,则判定所述解密加载后的动态链接库的待校验代码段通过运行时间校验;若各个待校验代码的运行时间大于各个待校验代码的正常运行的最大时间值,则判定所述解密加载后的动态链接库的待校验代码段不通过运行时间校验。
6.一种代码校验装置,其特征在于,所述装置包括:加密模块、解密模块和校验模块;其中,
所述加密模块,用于使用动态链接库文件加密工具加密使用源码编译出来的动态链接库文件,并将加密前的动态链接库文件的待校验代码段的哈希值预置到加密后的动态链接库文件中;
所述解密模块,用于当通过应用程序加载所述加密后的动态链接库文件时,调用解密代码对所述加密后的动态链接库文件进行解密,得到解密后的动态链接库文件的待校验代码段;并将所述解密后的动态链接库文件的待校验代码段加载到内存中,得到解密加载后的动态链接库;
所述校验模块,用于当所述解密加载后的动态链接库被调用运行时,基于所述加密前的动态链接库文件的待校验代码段的哈希值,对所述解密加载后的动态链接库文件的待校验代码段进行完整性校验。
7.根据权利要求6所述的装置,其特征在于,所述校验模块,具体用于计算所述解密后的动态链接库文件的待校验代码段的哈希值;若所述解密加载后的动态链接库文件的待校验代码段的哈希值与所述加密前的动态链接库文件的待校验代码段的哈希值相同,则判定所述解密加载后的动态链接库的待校验代码段通过完整性校验;若所述解密后的动态链接库文件的待校验代码段的哈希值与所述加密前的动态链接库文件的待校验代码段的哈希值不相同,则判定所述解密加载后的动态链接库的待校验代码段不通过完整性校验。
8.根据权利要求6所述的装置,其特征在于,所述校验模块,用于当所述解密加载后的动态链接库被调用运行时,获取所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间;根据所述解密后的动态链接库文件的待校验代码段中的各个待校验代码的运行时间与所述解密加载后的动态链接库的待校验代码段中的各个待校验代码的正常运行的最大时间值,对所述解密加载后的动态链接库的待校验代码段进行时间校验。
9.根据权利要求8所述的装置,其特征在于,所述校验模块,具体用于当各个校验单元中的待校验代码在被调用时和运行完成时,分别记录各自对应的时间值;根据各个待校验代码在被调用时和运行完成时的时间值,计算各个待校验代码的运行时间。
10.根据权利要求8所述的装置,其特征在于,所述校验模块,具体用于若各个待校验代码的运行时间小于或者等于各个待校验代码的正常运行的最大时间值,则判定所述解密加载后的动态链接库的待校验代码段通过运行时间校验;若各个待校验代码的运行时间大于各个待校验代码的正常运行的最大时间值,则判定所述解密加载后的动态链接库的待校验代码段不通过运行时间校验。
CN202011599487.1A 2020-12-29 2020-12-29 一种代码校验方法及装置 Pending CN112613037A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011599487.1A CN112613037A (zh) 2020-12-29 2020-12-29 一种代码校验方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011599487.1A CN112613037A (zh) 2020-12-29 2020-12-29 一种代码校验方法及装置

Publications (1)

Publication Number Publication Date
CN112613037A true CN112613037A (zh) 2021-04-06

Family

ID=75248940

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011599487.1A Pending CN112613037A (zh) 2020-12-29 2020-12-29 一种代码校验方法及装置

Country Status (1)

Country Link
CN (1) CN112613037A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113507479A (zh) * 2021-07-23 2021-10-15 上海颜硕信息科技有限公司 一种针对web代码和数据的网关型加解密透明sdk技术
CN113568680A (zh) * 2021-07-23 2021-10-29 杭州网易智企科技有限公司 应用程序的动态链接库保护方法、装置、设备及介质
CN113656043A (zh) * 2021-08-24 2021-11-16 北京奇艺世纪科技有限公司 一种代码校验方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103778375A (zh) * 2012-10-24 2014-05-07 腾讯科技(深圳)有限公司 防止用户设备加载非法的动态链接库文件的装置和方法
US20150033354A1 (en) * 2011-01-14 2015-01-29 Peer Wichmann Method for Protecting an Application Program and Related Computer Program Product
CN104751050A (zh) * 2015-04-13 2015-07-01 成都睿峰科技有限公司 一种客户端应用程序管理方法
CN105426708A (zh) * 2016-01-19 2016-03-23 北京鼎源科技有限公司 一种Android系统的应用程序的加固方法
CN105956456A (zh) * 2016-04-26 2016-09-21 南京邮电大学 一种对Android系统进行四重联合签名验证的实现方法
CN106650327A (zh) * 2016-11-24 2017-05-10 湖南鼎源蓝剑信息科技有限公司 基于动态恢复so文件的Android应用加固方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150033354A1 (en) * 2011-01-14 2015-01-29 Peer Wichmann Method for Protecting an Application Program and Related Computer Program Product
CN103778375A (zh) * 2012-10-24 2014-05-07 腾讯科技(深圳)有限公司 防止用户设备加载非法的动态链接库文件的装置和方法
CN104751050A (zh) * 2015-04-13 2015-07-01 成都睿峰科技有限公司 一种客户端应用程序管理方法
CN105426708A (zh) * 2016-01-19 2016-03-23 北京鼎源科技有限公司 一种Android系统的应用程序的加固方法
CN105956456A (zh) * 2016-04-26 2016-09-21 南京邮电大学 一种对Android系统进行四重联合签名验证的实现方法
CN106650327A (zh) * 2016-11-24 2017-05-10 湖南鼎源蓝剑信息科技有限公司 基于动态恢复so文件的Android应用加固方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113507479A (zh) * 2021-07-23 2021-10-15 上海颜硕信息科技有限公司 一种针对web代码和数据的网关型加解密透明sdk技术
CN113568680A (zh) * 2021-07-23 2021-10-29 杭州网易智企科技有限公司 应用程序的动态链接库保护方法、装置、设备及介质
CN113568680B (zh) * 2021-07-23 2023-08-11 杭州网易智企科技有限公司 应用程序的动态链接库保护方法、装置、设备及介质
CN113656043A (zh) * 2021-08-24 2021-11-16 北京奇艺世纪科技有限公司 一种代码校验方法、装置、电子设备及存储介质
CN113656043B (zh) * 2021-08-24 2023-09-05 北京奇艺世纪科技有限公司 一种代码校验方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN112613037A (zh) 一种代码校验方法及装置
US7346780B2 (en) Integrity ordainment and ascertainment of computer-executable instructions
KR100946042B1 (ko) 탬퍼-레지스턴트 애플리케이션 구동 방법 및 시스템과 컴퓨터 판독 가능 저장 매체
KR101503785B1 (ko) 동적 라이브러리를 보호하는 방법 및 장치
EP2420950B1 (en) Information processing system, information processing method, information processing program, computer readable medium and computer data signal
US8984272B2 (en) Information processing apparatus, secure module, information processing method, and computer product
CA3023939C (en) Method and apparatus for dynamic executable verification
US7370319B2 (en) System and method for regulating execution of computer software
US8225290B2 (en) Systems and methods for regulating execution of computer software
CN109284585B (zh) 一种脚本加密方法、脚本解密运行方法和相关装置
CN102576391A (zh) 嵌入在shell代码中的软件许可
JP4664055B2 (ja) プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
CN107257282B (zh) 一种基于rc4算法的代码全包加密方法
CN110245464B (zh) 保护文件的方法和装置
KR101638257B1 (ko) 애플리케이션의 소스 코드 보호 방법 및 이를 수행하는 장치
CN115964681A (zh) 目标应用程序的证书文件的生成方法
CN114357387A (zh) java应用程序防篡改的判断方法、编译方法及设备
CN111611551B (zh) 一种基于国密算法的动态链接库保护方法及其系统
CN111522555B (zh) apk文件的加固方法、解密方法及相关装置
US20230058046A1 (en) Apparatus and Method for Protecting Shared Objects
CN112733094A (zh) 一种Java应用程序的安全保护方法
CN112130863B (zh) 客户端程序防止反汇编保护方法
WO2022176164A1 (ja) プログラム処理装置、プログラム処理方法、及び、プログラム
CN114816549B (zh) 一种保护bootloader及其环境变量的方法及系统

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