CN109840396B - 提供安全性的设备和方法以及执行安全性以保护共享对象的代码的设备和方法 - Google Patents
提供安全性的设备和方法以及执行安全性以保护共享对象的代码的设备和方法 Download PDFInfo
- Publication number
- CN109840396B CN109840396B CN201810953350.8A CN201810953350A CN109840396B CN 109840396 B CN109840396 B CN 109840396B CN 201810953350 A CN201810953350 A CN 201810953350A CN 109840396 B CN109840396 B CN 109840396B
- Authority
- CN
- China
- Prior art keywords
- security
- file
- shared object
- execution
- object file
- 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 34
- 238000005538 encapsulation Methods 0.000 claims abstract description 8
- 238000000605 extraction Methods 0.000 claims abstract description 7
- 230000006835 compression Effects 0.000 claims description 3
- 238000004458 analytical method Methods 0.000 abstract description 7
- 230000003068 static effect Effects 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 66
- 238000010586 diagram Methods 0.000 description 6
- 239000000284 extract Substances 0.000 description 4
- 238000003491 array Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000007123 defense Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 1
- 238000012917 library technology Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
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
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- 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
-
- 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/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/14—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using a plurality of keys or algorithms
-
- 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/106—Enforcing content protection by specific content processing
- G06F21/1062—Editing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Bioethics (AREA)
- Virology (AREA)
- Storage Device Security (AREA)
Abstract
公开提供安全性的设备和方法以及执行安全性以保护共享对象的代码的设备和方法。提供安全性的设备包括:对象文件提取单元,被配置为从执行封装中提取共享对象文件;对象管理单元,被配置为单独存储共享对象文件的初始化函数相关节的至少一个标签的值,和提供通过用0来填充共享对象文件的至少一个标签的值而生成的安全性共享对象文件;安全性模块生成单元,被配置为生成安全性模块文件,其包括由对象管理单元单独存储的至少一个标签的值;和封装组装单元,其被配置为生成安全性执行封装,其包括执行引擎库、由对象管理单元提供的安全性共享对象文件、以及由安全性模块生成单元提供的安全性模块文件,从而完全保护共享对象文件免受静态分析攻击。
Description
背景技术
1.发明领域
本公开涉及用于提供安全性的设备和方法以及用于执行安全性以保护共享对象的代码的设备和方法,并且更具体地涉及用于提供安全性的设备和方法以及用于执行安全性以保护共享对象的初始化函数的执行代码免受静态分析的设备和方法。
2.现有技术的描述
根据多个应用是否共享和使用一个库代码,可以将库分类为静态库或共享库。静态库(通常是*.a形式的文件)是通过在链接阶段将库代码合并到应用中而使用的库。另一方面,共享库(通常是“*.so”形式的文件)是用于在运行时在应用之间共享库代码实例的库。
在使用共享库的应用中,在链接步骤中不复制库代码。当使用这样的共享库时,可以共享库代码,使得可以显著减小存储器大小。
在现有的操作系统例如Windows或Linux中,通常使用共享库。近来,随着包括移动电话的小型便携式设备的能力增加,各种应用可以被同时加载到存储器中并在这样的计算环境中被执行。如上所述,在其中存储器有限的计算环境中,更强烈地需要共享库技术。
共享对象是在基于Linux的操作系统中使用的共享库(共享对象),并且缩写“SO”在实践中被用作指示共享对象的扩展。执行文件通过在运行时将共享对象文件加载到存储器中来使用共享对象文件。共享对象文件本身不被执行,但是一个共享对象文件可以加载并使用另一共享对象文件。
共享对象的重要执行代码可能借助于通过逆向工程的反向分析而被泄漏,并且此外,该代码甚至可能以黑客期望的方式被修改。
发明内容
为了解决上述问题,本公开的方面是提供用于提供安全性的设备和方法,其通过向共享对象文件提供安全性来保护共享对象文件免受非法侵入(hacking)。
本公开的另一方面是提供用于执行安全性的设备和方法,其通过执行共享对象文件来保护共享对象文件免受非法侵入。
具体地,本公开的方面是提供用于提供安全性的设备和方法,其通过保护共享对象的执行代码免受静态分析来保护共享对象文件。
具体地,本公开的另一方面是提供用于执行安全性的设备和方法,其通过对共享对象的执行代码执行安全性来保护共享对象文件免受经由静态分析的非法侵入。
根据本公开的方面,提供了用于提供安全性的设备,其存储通过组装共享目标文件和执行引擎库而生成的执行封装(package)。该设备包括:对象文件提取单元,其被配置为从执行封装中提取共享对象文件;对象管理单元,其被配置为单独存储共享对象文件的初始化函数相关的节中的至少一个标签的值,和提供通过用0来填充共享对象文件的至少一个标签的值而生成的安全性共享对象文件;安全性模块生成单元,其被配置为生成安全性模块文件,其包括由对象管理单元单独存储的至少一个标签的值;以及封装组装单元,其被配置为生成安全性执行封装,其包括执行引擎库、由对象管理单元提供的安全性共享对象文件、以及由安全性模块生成单元提供的安全性模块文件。
用于提供安全性的设备还包括代码加密单元,其被配置为通过加密算法对共享对象文件的执行代码节的映像进行加密来生成安全性执行代码文件,其中,所述封装组装单元还包括由代码加密单元生成的安全性执行代码文件以生成安全性执行封装。
代码加密单元可以在通过加密算法加密映像之前通过压缩程序来对共享对象文件的执行代码节的映像进行压缩。
加密算法可以是高级加密标准(AES)算法。
代码加密单元可以将共享对象文件的执行代码节的映像分离为单独的文件,并且然后通过加密算法对映像进行加密。
共享对象文件的初始化函数相关的节可以是动态节,并且共享对象文件的执行代码节可以是文本节。
根据本公开的另一方面,提供了用于执行安全性的设备。该设备包括:动态加载器单元,其被配置为当通过操作系统为共享对象文件调用动态加载器时,将共享对象文件加载到存储器中并接收被加载的共享对象文件的基地址;以及对象管理单元,其被配置为读取单独存储的共享对象文件的初始化函数相关的节中的至少一个标签的值,并将该值添加到基地址,取出被存储在通过将标签的值添加到基地址而生成的地址中的初始化函数地址,以及调用对应的初始化函数。
对象管理单元可以通过从被存储在通过将标签的值添加到基地址而生成的地址中的初始化函数地址中顺次地取出数组的值、通过共享对象文件的初始化函数相关的节的动态表初始化数组的大小的数量来调用每个初始化函数。
用于执行安全性的设备还可以包括:代码解密单元,其被配置为对在通过加密算法对共享对象文件的执行代码节的映像进行加密之后提供的安全性执行代码文件进行解密。
代码解密单元可以对被存储为单独文件的安全性执行代码文件进行解密,并在被加载到存储器中的共享对象文件的执行代码节的位置处重构安全性执行代码文件。
根据本公开的另一方面,提供了提供安全性的方法。该方法包括:对通过组装共享对象文件和执行引擎库而生成的执行封装进行存储;从执行封装中提取共享对象文件;对共享对象文件的初始化函数相关的节中的至少一个标签的值进行单独存储,用0来填充共享对象文件的至少一个标签的值,并提供安全性共享对象文件;生成和提供安全性模块文件,其包括在提供安全性共享对象文件时单独存储的至少一个标签的值;以及生成安全性执行封装,其包括执行引擎库、在提供安全性共享对象文件时提供的安全性共享对象文件以及在生成安全性模块文件时提供的安全性模块文件。
根据本公开的另一方面,提供了执行安全性的方法。该方法包括:通过操作系统为共享对象文件调用动态加载器;通过动态加载器的操作将共享对象文件加载到存储器中并接收被加载的共享对象文件的基地址;读取单独存储的共享对象文件的初始化函数相关的节中的至少一个标签的值,并将该值添加到基地址;以及取出被存储在通过将标签的值添加到基地址而生成的地址中的初始化函数地址,并调用对应的初始化函数。
执行安全性的方法还可以包括用无意义值来填充被存储在由共享对象文件的初始化函数相关的节中的至少一个标签的偏移值指示的对象文件区域的位置处的初始化函数地址。
执行安全性的方法还可以包括用无意义值来填充共享对象文件的ELF头区域(header region)。
根据上述配置,本公开可以更确定地保护共享对象文件的重要执行代码免受静态分析攻击。
此外,本公开可以通过隐藏共享对象文件的正常执行所需的某些条信息来防止共享对象的转储和重用。
附图说明
本公开的以上及其他方面、特征和优点从以下结合附图的详细描述中将是更显而易见的,其中:
图1是示出根据本公开的实施例的用于保护共享对象的代码的安全性提供系统的框图;
图2示意性地示出了一般共享对象文件的结构;
图3详细地示出了共享对象文件的结构以描述本公开;
图4是示出图1的安全性提供装置的框图;
图5示出了根据本公开的实施例的向共享对象文件提供安全性的操作;
图6是示出图1的安全性执行装置的框图;
图7示出了根据本公开的实施例的其中安全性模块文件被加载到主存储单元中的状态;
图8A至图8C示出了图7的安全性模块文件的操作;
图9是示出根据本公开的实施例的用于保护共享对象文件的代码的安全性提供方法的流程图;以及
图10是示出根据本公开另一实施例的用于保护共享对象文件的代码的安全性执行方法的流程图。
具体实施方式
在下文中,将参照附图来描述根据本公开的用于提供安全性的设备和方法以及用于执行安全性以保护共享对象的代码的设备和方法的优选实施例。作为参考,在以下描述中,提及本公开的要素的术语是考虑要素的功能来设定的,并且因此不应该被解释为限制本公开的技术要素。
图1是示出根据本公开的实施例的用于保护共享对象的代码的安全性提供系统的框图。
如图1中所示,根据本公开的用于保护共享对象的代码的安全性提供系统包括程序开发装置110、安全性提供装置120和安全性执行装置130。程序开发装置110、安全性提供装置120和安全性执行装置130可以通过有线/无线通信网络来连接。
程序开发装置110是开发者通过其来开发应用程序的装置。当开发应用时,执行引擎(例如,unity引擎)通过编译应用源代码来创建二进制代码,并创建包括所创建的二进制代码和必要资源库的执行封装(例如,unity封装)。
安全性提供装置120是用于为由程序开发装置110创建的unity封装提供安全性的设备。当上载由程序开发装置110创建的unity封装时,安全性提供装置120提取共享对象文件,对提取的对象的执行代码进行加密,在单独的区域中存储与共享对象的初始化函数相关的至少一个标签值的值,添加安全性模块文件,并且然后再次创建安全性unity封装。
安全性执行装置130是用于执行可执行程序(例如,游戏程序)的用户终端设备。安全性执行装置130可以从程序开发装置110或安全性提供装置120下载安全性unity封装并执行该执行程序。
尽管图1将程序开发装置110和安全性提供装置120示出为单独的设备,但这仅是示例,并且本公开不限于此。
图2示意性地示出了一般共享对象文件的结构,并且图3详细地示出了共享对象文件的结构以描述本公开。
如图2中所示,共享对象(SO)文件具有可执行和可链接格式(ELF)形式。ELF是用于执行文件、对象文件、共享库和核心转储的标准文件格式。ELF在1999年被86open项目选为基于X86和类Unix的系统的标准文件格式。
参考图2,根据本公开的实施例的SO文件200包括:在SO文件的最前面的一个ELF头210;程序头表220,其定义了包括运行时执行SO文件所需的信息的段;以及节头表,其定义了包括用于链接和重新布置所需的重要信息的节。
同时,动态加载器(dlopen)通过由类Unix操作系统提供的系统功能来执行访问SO文件、将SO文件加载到存储器中以及准备SO文件以供其实际使用的任务。为了在应用文件或执行文件中使用SO文件,必须必要地调用函数dlopen。此后,当在另一执行文件或SO文件中再次发出dlopen请求时,通过函数dlopen的调用而被加载到存储器中的SO文件提供了链接,通过该链接可以在不重复存储器加载过程的情况下重用已经被加载到存储器中的信息。使用函数dlopen的特性来实施根据本公开的用于保护SO文件的代码区域的技术。
如图3中所示,图2中所示的程序头表220包括程序头和程序表区域,该程序表区域具有运行时执行SO文件所需的至少一个地址。此外,节头表230包括节头、文本节(.text节)和动态节(.dynamic节)。
节头可以存储关于SO文件中的各个节(数据丛)的位置和大小的信息,并且节在ELF被用于共享库时是有效的概念并可以是二进制数据丛的单元。在各个节当中,文本节可以包括所有程序代码,并且动态节可以包括标签和标签的值,且因此这些节是本公开中要被保护的最重要的节。
文本节中的构造器(constructor)是初始化函数或初始化函数集合,其在共享库被首次加载到存储器中时应该被无条件地执行一次。当在系统中发出dlopen请求时,该系统在其中执行构造器函数。当初始化函数未被执行时,程序无法被正常执行。虽然为同一个SO文件调用dlopen若干次,但所有初始化函数只被调用一次。
在下文中,将通过使用图3中所示的共享对象文件的结构来详细描述共享对象文件的操作。
被包括在SO文件的第一部分中的ELF头存储关于程序头和包含附加信息的节头的位置和数量的信息。当执行文件加载SO文件时,执行文件通过使用关于被存储在ELF头中的程序头和节头的位置和数量的信息来查找程序头和节头的位置(参见①)。
节头存储关于SO文件中各个节的位置和大小的信息。执行文件通过使用被存储在节头中的文本节的位置信息来查找文本节的位置(参见②)。文本节是与本公开相关的最重要的节,并且对应于以二进制数据的形式存储所有执行代码且要通过加密来保护的区域。
执行文件通过使用被存储在节头中的动态节的位置信息来查找动态节的位置(参见③)。动态节包括<标签:值>形式的多个信息。在这些标签当中,在本公开中使用动态表初始化(DT_INIT)标签、动态表初始化数组(DT_INIT_ARRAY)标签和动态表初始化数组大小(DT_INIT_ARRAYSZ)标签。动态表初始化(DT_INIT)标签和动态表初始化数组(DT_INIT_ARRAY)标签可以存储存储器的位置值(偏移值),该存储器存储在地址指针所处时间点由系统仅调用一次的初始化函数的地址,即,SO文件作为标签的值被dlopen首次加载到存储器中,并且动态表初始化数组大小(DT_INIT_ARRAYSZ)标签可以将初始化函数的数量存储为标签的值。
当初始化函数的数量为1时,动态表初始化(DT_INIT)标签的值被用于指示程序表区域的一个地址(参见④)。然而,当初始化函数的数量是多个时,使用动态表初始化数组(DT_INIT_ARRAY)标签的值,并且根据N(其为动态表初始化数组大小(DT_INIT_ARRAYSZ)标签的数量)仅顺次调用所有N个相应的初始化函数一次(参见⑤)。初始化函数的数量被存储在动态表初始化数组大小(DT_INIT_ARRAYSZ)标签的值中(参见⑥)。
图4是示出图1的安全性提供装置的框图,并且图5示出了根据本公开的实施例的向共享对象文件提供安全性的操作。
如图4中所示,安全性提供装置120包括SO文件提取单元410、代码加密单元420、对象管理单元430、安全性模块生成单元440和封装组装单元450。
SO文件提取单元410通过对从程序开发装置110上载的unity封装的多个库和文件进行解析来提取SO文件。也就是说,SO文件提取单元410从通过组装SO文件和执行引擎库而生成的执行封装中提取SO文件。
代码加密单元420将SO文件的执行代码节的整个区域(即,要被保护的文本节)分离为单独的文件,并通过压缩程序(例如ZIP)对分离的文本节文件进行压缩。代码加密单元420通过加密算法对由ZIP压缩的文本节文件进行加密来生成安全性文本节文件(参见①)。加密算法可以包括加密算法DES、AES和RSA中的至少一个。这里,作为第二加密算法,优选使用高级加密标准(AES)算法,通过其对整个加密的DLL进行再次加密。
由于执行代码节(即要被保护的文本节)被生成为单独的文件,因此对象管理单元430首先用0来填充其中存在文本节的所有SO文件区域(参见②)。
对象管理单元430在单独区域中存储动态节的三个标签的值,并用0来填充SO文件内的所有原始值(参见③)。在这种情况下,如果标签DT_INIT_ARRAYSZ的值没有变为0,则调用异常代码(变为0的初始化函数),并且因此错误发生且程序停止,使得将标签值改变为0的过程是必要的以防止初始化函数被调用。
安全性模块生成单元440是用于对SO文件施加安全性的元件,并且生成包括由对象管理单元430单独存储的至少一个标签的值的安全性模块文件。由安全性模块生成单元440生成的安全性模块文件可以是安全性库文件。
安全性模块生成单元440可以包括用于对由代码加密单元420加密的安全性SO文件进行解密的解密算法,并且当代码加密单元420将安全性文本节文件存储为单独的文件时,还可以包括原始文本节的偏移值。
安全性模块生成单元440可以包括用于对库的完整性进行验证的散列注册函数、用于防止使用调试器分析游戏程序的反调试函数、以及用于防止游戏程序的存储器状态被转储的反转储函数。
封装组装单元450生成安全性执行封装,其包括执行引擎库、由代码加密单元420生成的安全性执行代码文件、由对象管理单元430提供的安全性共享对象文件、以及由安全性模块生成单元440提供的安全性模块文件。
图6是示出图1的安全性执行装置的框图。
如图6中所示,安全性执行装置130可以包括CPU 610、主存储单元620、显示单元630、辅助存储单元640、输入单元650和网络单元660。
辅助存储单元640存储通过网络单元660从安全性提供装置120下载的安全性执行封装。当请求安全性执行封装(例如,游戏程序的安全性unity封装)时,CPU 610将被存储在辅助存储单元640中的安全性unity封装加载到主存储单元620中。同时,游戏程序可以通过输入单元650或网络单元660来接收新的值。
根据本公开的实施例的安全性执行装置130可以是用户终端,诸如个人计算机(PC)、笔记本计算机、平板电脑、个人数字助理(PDA)、游戏机、便携式多媒体播放器(PDA)、掌上游戏机(PSP)、无线通信终端、智能电话、电视或媒体播放器。
图7示出了根据本公开的实施例的其中安全性模块文件被加载到主存储单元中的状态。图8A至图8C示出了图7的安全性模块文件的操作。
如图7中所示,安全性模块文件700包括动态加载器单元710、代码解密单元720和对象管理单元730。
当通过操作系统为SO文件调用动态加载器时,动态加载器单元710将SO文件加载到主存储单元620中并接收被加载的SO文件的基地址。
代码解密单元720对在通过加密算法加密对象文件的执行代码节之后提供的安全性执行代码文件进行解密。代码解密单元720对被存储为单独文件的安全性执行代码文件进行解密,并在被加载到主存储单元620中的SO文件的执行代码节的位置处重构安全性执行代码文件。
对象管理单元630读取被单独存储的SO文件的初始化函数相关的节中的至少一个标签的值,将该值添加到基地址,取出被存储在主存储单元620的对应地址中的初始化函数地址,并调用初始化函数。而且,对象管理单元630可以通过顺次地取出被存储在主存储单元620的对应地址中的初始化函数地址的值、通过SO文件的初始化函数相关的节的动态表初始化数组的大小的数量来分别调用初始化函数。
在下文中,将参考图8A至图8C更详细地描述安全性模块文件的操作。
执行文件在使用目标SO文件之前调用安全性模块文件700。当调用安全性模块文件700时,通过操作系统为相应的SO文件调用动态加载器(dlopen)(参见图8A中的①)。
响应于动态加载器内的登录,将对应的SO文件加载到主存储单元620中。当完成SO文件的加载时,安全性模块文件700接收被加载的SO文件的基地址(参见图8A中的②)。
安全性模块文件700对被存储为单独文件的文本节的数据进行解密和释放由压缩算法压缩的文本节的数据,以便获得原始数据(参见图8A中的③)。安全性模块文件700通过使用被存储的文本节的偏移值而将获得的原始映像重构到主存储单元的SO文件区域的文本节中的位置(参见图8A中的④)。
当完成文本节的重构时,安全性模块文件700首先读取被单独存储的标签DT_INIT的值,并将标签的值添加到SO文件的基地址(参见图8B中的①)。安全性模块文件700取出被存储在通过将标签的值添加到基地址而生成的地址中的初始化函数地址(参见图8B中的②)。安全性模块文件700通过使用初始化函数地址来调用对应的构造器函数(参见图8B中的③)。同时,当标签DT_INIT的读取值为0时,安全性模块文件700前进到下一步骤。
安全性模块文件700读取被单独存储的标签DT_INIT的值,并将标签的值添加到SO文件的基地址(参见图8B中的④)。安全性模块文件700取出被存储在通过将标签的值添加到基地址而生成的地址中的初始化函数地址(参见图8B中的⑤)。安全性模块文件700通过使用初始化函数地址和标签DT_INIT_ARRAY的值而顺次地取出初始化函数地址数组的值来调用每个初始化函数(参见图8B中的⑥)。
由于所有初始化函数中的每个已经根据上述操作被执行了一次,所以当对可执行程序中的对应SO文件执行动态加载器(dlopen)时,已经被加载到主存储单元620中和被完全解密的数据的指针被返回,并且应用程序被正常执行。
同时,安全性模块文件700用无意义值来填充被存储在由标签DT_INIT指示的位置处的初始化函数地址,并且还用无意义值来填充被存储在由标签DT_INIT_ARRAY指示的位置处的数组中的所有初始化函数地址(参见图8C)。
安全性模块文件700基本上包括附件防御函数,以便防止存储器转储和动态分析,但是黑客可能通过规避附件防御来转储被加载到存储器中的SO文件。然而,由于初始化函数的信息填充有无意义值,因此不可能正常执行初始化函数和调制被转储的SO文件。
此外,安全性模块文件700还用无意义值来填充ELF头区域,这使得查找用于存储器转储的位置更加困难(参见图8C)。由于ELF头包括关于程序头和节头的信息,因此如果其上没有信息的共享对象被转储和重用,则应用程序可能被异常执行或者可能不被执行。
图9是示出根据本公开的实施例的用于保护共享对象文件的代码的安全性提供方法的流程图。
在S902中,安全性提供装置120存储通过组装共享对象文件和执行引擎库而生成的执行封装。在S904中,共享对象文件提取单元410从执行封装中提取共享对象文件。
在S906中,代码加密单元420通过加密算法对共享对象文件的执行代码节的映像进行加密来生成安全性执行代码文件。在这种情况下,代码加密单元420可以在将共享对象文件的执行代码节的映像分离为单独的文件之后通过加密算法来执行加密。
对象管理单元430单独地存储共享对象文件的初始化函数相关的节中的至少一个标签的值,用0来填充共享对象文件的至少一个标签的值,并且在S908中提供安全性共享对象文件。
在S910中,安全性模块生成单元440生成安全性模块文件,其包括由对象管理单元430单独存储的至少一个标签的值。在S912中,封装组装单元450生成安全性执行封装,其包括执行引擎库、由代码加密单元420生成的安全性执行代码文件、由对象管理单元430提供的安全性共享对象文件、以及由安全性模块生成单元440提供的安全性模块文件。
图10是示出根据本公开另一实施例的用于保护共享对象文件的代码的安全性执行方法的流程图。
在S1002中,执行文件在使用目标SO文件之前调用安全性模块文件700。在S1004中,安全性模块文件700通过操作系统来为共享对象文件调用动态加载器。动态加载器将SO文件加载到主存储单元620中,并将被加载的SO文件的基地址返回到安全性模块文件700,使得在S1006中安全性模块文件700接收基地址。
在S1008中,安全性模块文件700对在通过加密算法加密对象文件的执行代码节之后提供的安全性执行代码文件进行解密。当安全性执行代码文件被存储为单独的文件时,安全性模块文件700对被存储为单独文件的安全性执行代码文件进行解密,并在被加载到主存储单元620中的SO文件的执行代码节中的位置处重构安全性执行代码文件。
安全性模块文件700读取被单独存储的共享对象文件的初始化函数相关的节中的至少一个标签的值,并在S1010中将该值添加到基地址。
安全性模块文件700取出被存储在通过将标签的值添加到基地址而生成的地址中的初始化函数地址,并在S1012中调用对应于初始化函数地址的初始化函数。安全性模块文件700可以通过顺次地取出被存储在主存储单元620的对应地址中的初始化函数地址的值、通过SO文件的初始化函数相关的节的动态表初始化数组的大小的数量来调用每个初始化函数。
在S1014中,安全性模块文件700用无意义值来填充被存储在由共享对象文件的初始化函数相关的节中的至少一个标签的偏移值指示的对象文件区域的位置处的初始化函数地址。在S1016中,安全性模块文件700还用无意义值来填充共享对象文件的ELF头区域。
本公开的实施例仅是本公开的技术思想的示例,并且应当基于权利要求来解释本公开的范围。此外,本领域技术人员可以理解的是,在不脱离本公开的必要特征的情况下可以进行各种修改和改变,并且在与本公开等同的范围内的所有技术思想应该被解释为被包括在本公开的范围内。
Claims (9)
1.一种用于提供安全性的设备,用于保护通过组装共享对象文件和执行引擎库而生成的执行封装,其中,所述共享对象文件包括初始化函数相关的节和执行代码节,所述设备包括:
对象文件提取单元,其被配置为从所述执行封装中提取所述共享对象文件;
对象管理单元,其被配置为将提取的共享对象文件的初始化函数相关的节中的至少一个标签的值存储在单独位置,并且被配置为生成安全性共享对象文件,其中所述安全性共享对象文件是通过用0来填充所述提取的共享对象文件的初始化函数相关的节中的至少一个标签的值生成的;
安全性模块生成单元,其被配置为生成安全性模块文件,其包括由所述对象管理单元存储在所述单独位置并且没有用0来填充的至少一个标签的值;以及
封装组装单元,其被配置为通过组合所述执行封装的所述执行引擎库、由所述对象管理单元生成的所述安全性共享对象文件、以及由所述安全性模块生成单元生成的所述安全性模块文件来生成安全性执行封装,其中所述安全性共享对象文件包括用0填充的所述初始化函数相关的节的标签,其中所述所述安全性模块文件包括存储在所述单独位置的所述提取的共享对象文件的初始化函数相关的节中的至少一个标签的值,
其中,所述执行封装中的至少一些部分能够通过用0填充而被保护。
2.根据权利要求1所述的设备,还包括代码加密单元,其被配置为通过加密算法对所述共享对象文件的所述执行代码节的映像进行加密而生成安全性执行代码文件,其中,所述封装组装单元还包括由所述代码加密单元生成的安全性执行代码文件以生成所述安全性执行封装。
3.根据权利要求2所述的设备,其中,所述代码加密单元在通过所述加密算法加密所述映像之前通过压缩程序来对所述共享对象文件的执行代码节的映像进行压缩。
4.根据权利要求3所述的设备,其中,所述加密算法是高级加密标准(AES)算法。
5.根据权利要求2至4中的一项所述的设备,其中,所述代码加密单元将所述共享对象文件的执行代码节的映像分离为单独的文件,并且然后通过加密算法对所述映像进行加密。
6.根据权利要求2至4中的一项所述的设备,其中,所述共享对象文件的初始化函数相关的节是动态节,并且所述共享对象文件的所述执行代码节是文本节。
7.一种提供安全性的方法,所述方法由保护通过组装共享对象文件和执行引擎库而生成的执行封装的装置执行,所述方法包括:
从所述执行封装中提取所述共享对象文件;
将提取的共享对象文件的初始化函数相关的节中的至少一个标签的值存储在单独位置,并且通过用0来填充所述提取的共享对象文件的初始化函数相关的节中的至少一个标签的值来生成安全性共享对象文件;
生成安全性模块文件,其包括在生成所述安全性共享对象文件的步骤中存储在单独位置的所述初始化函数相关的节中的至少一个标签的值;以及
通过组合所述执行封装的所述执行引擎库、在生成所述安全性共享对象文件的步骤中提供的安全性共享对象文件、以及在生成所述安全性模块文件时提供的所述安全性模块文件来生成安全性执行封装,
其中,所述执行封装中的至少一些部分能够通过用0填充而被保护。
8.根据权利要求7所述的方法,还包括通过加密算法对所述共享对象文件的所述执行代码节的映像进行加密而生成安全性执行代码文件,其中,生成所述安全性执行封装包括还将在生成所述安全性执行代码时生成的安全性执行代码文件包括在内以生成所述安全性执行封装。
9.根据权利要求8所述的方法,其中,生成所述安全性执行代码文件包括将所述共享对象文件的执行代码节的映像分离为单独的文件,并且然后通过所述加密算法对所述映像进行加密。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170158133A KR102039380B1 (ko) | 2017-11-24 | 2017-11-24 | 공유 오브젝트의 코드 보호를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법 |
KR10-2017-0158133 | 2017-11-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109840396A CN109840396A (zh) | 2019-06-04 |
CN109840396B true CN109840396B (zh) | 2023-09-29 |
Family
ID=66632453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810953350.8A Active CN109840396B (zh) | 2017-11-24 | 2018-08-21 | 提供安全性的设备和方法以及执行安全性以保护共享对象的代码的设备和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11061998B2 (zh) |
JP (1) | JP6698775B2 (zh) |
KR (1) | KR102039380B1 (zh) |
CN (1) | CN109840396B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112800418B (zh) * | 2020-12-31 | 2022-05-13 | 北京深思数盾科技股份有限公司 | 自定义程序集的文件保护方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591659A (zh) * | 2011-12-28 | 2012-07-18 | 中标软件有限公司 | 一种移动终端主界面上的微件实现方法及其管理方法 |
CN105227565A (zh) * | 2015-10-13 | 2016-01-06 | 北京娜迦信息科技发展有限公司 | 用于安卓系统的防逆向破解共享对象文件的方法和装置 |
CN105825087A (zh) * | 2016-03-16 | 2016-08-03 | 福建联迪商用设备有限公司 | Elf共享库保护方法及其系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6112025A (en) * | 1996-03-25 | 2000-08-29 | Sun Microsystems, Inc. | System and method for dynamic program linking |
US6598130B2 (en) * | 2000-07-31 | 2003-07-22 | Hewlett-Packard Development Company, L.P. | Technique for referencing distributed shared memory locally rather than remotely |
US7685596B1 (en) * | 2004-09-01 | 2010-03-23 | The Mathworks, Inc. | Deploying and distributing of applications and software components |
US9111036B2 (en) * | 2010-04-30 | 2015-08-18 | Red Hat, Inc. | Preloading unwind data for non-intrusive backtracing |
KR101536920B1 (ko) * | 2013-12-16 | 2015-07-15 | 주식회사 에스이웍스 | Arm 프로세서 기반의 파일 난독화 방법 |
TWI524208B (zh) * | 2013-12-31 | 2016-03-01 | Giga Byte Tech Co Ltd | Encryption and Decryption of Function Library of Open System |
KR101671336B1 (ko) * | 2014-02-27 | 2016-11-16 | (주)스마일게이트엔터테인먼트 | 코드 분리가 적용된 언패킹 보호 방법 및 장치 |
KR101695639B1 (ko) * | 2014-08-13 | 2017-01-16 | (주)잉카엔트웍스 | 클라우드 기반의 애플리케이션 보안 서비스 제공 방법 및 시스템 |
-
2017
- 2017-11-24 KR KR1020170158133A patent/KR102039380B1/ko active IP Right Grant
-
2018
- 2018-08-21 CN CN201810953350.8A patent/CN109840396B/zh active Active
- 2018-09-13 US US16/130,194 patent/US11061998B2/en active Active
- 2018-09-20 JP JP2018175878A patent/JP6698775B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591659A (zh) * | 2011-12-28 | 2012-07-18 | 中标软件有限公司 | 一种移动终端主界面上的微件实现方法及其管理方法 |
CN105227565A (zh) * | 2015-10-13 | 2016-01-06 | 北京娜迦信息科技发展有限公司 | 用于安卓系统的防逆向破解共享对象文件的方法和装置 |
CN105825087A (zh) * | 2016-03-16 | 2016-08-03 | 福建联迪商用设备有限公司 | Elf共享库保护方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
KR102039380B1 (ko) | 2019-11-01 |
KR20190060181A (ko) | 2019-06-03 |
JP6698775B2 (ja) | 2020-05-27 |
US11061998B2 (en) | 2021-07-13 |
CN109840396A (zh) | 2019-06-04 |
JP2019096300A (ja) | 2019-06-20 |
US20190163885A1 (en) | 2019-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2549380B1 (en) | Information processing device, virtual machine generation method, and application software distribution system | |
US20070271446A1 (en) | Application Execution Device and Application Execution Device Application Execution Method | |
CN104965712B (zh) | 应用程序加固保护方法、装置及移动终端 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
US20080216071A1 (en) | Software Protection | |
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
US20080270806A1 (en) | Execution Device | |
CN107977552B (zh) | 一种安卓应用的加固方法和装置 | |
CN107273723B (zh) | 一种基于so文件加壳的Android平台应用软件保护方法 | |
US8943486B2 (en) | Multiple instruction execution mode resource-constrained device | |
EP1890237A1 (en) | Computer system and program creating device | |
CN107291485B (zh) | 动态链接库的加固方法、运行方法、加固装置和安全系统 | |
CN109840400B (zh) | 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法 | |
CN111191195A (zh) | 一种用于保护apk的方法和装置 | |
CN113568680B (zh) | 应用程序的动态链接库保护方法、装置、设备及介质 | |
JP2007233426A (ja) | アプリケーション実行装置 | |
KR101734663B1 (ko) | 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치 | |
CN109840396B (zh) | 提供安全性的设备和方法以及执行安全性以保护共享对象的代码的设备和方法 | |
CN110597496B (zh) | 应用程序的字节码文件获取方法及装置 | |
KR101667774B1 (ko) | 스크립트 프로그램을 위한 보안 제공 장치 및 방법 | |
JP2008040853A (ja) | アプリケーション実行方法およびアプリケーション実行装置 | |
CN113220314A (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
KR20180028666A (ko) | 역공학 방지 방법 및 장치 | |
CN111290781A (zh) | Npk方式打包脚本、运行npk格式脚本文件的方法及装置 | |
CN109460640A (zh) | 一种Java程序保护方法、装置、设备及可读存储介质 |
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 |