CN113761482A - 一种程序代码保护方法和装置 - Google Patents

一种程序代码保护方法和装置 Download PDF

Info

Publication number
CN113761482A
CN113761482A CN202110976917.5A CN202110976917A CN113761482A CN 113761482 A CN113761482 A CN 113761482A CN 202110976917 A CN202110976917 A CN 202110976917A CN 113761482 A CN113761482 A CN 113761482A
Authority
CN
China
Prior art keywords
function
code instruction
function code
encrypted
instruction
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
CN202110976917.5A
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.)
Hangzhou Netease Zhiqi Technology Co Ltd
Original Assignee
Hangzhou Netease Zhiqi 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 Hangzhou Netease Zhiqi Technology Co Ltd filed Critical Hangzhou Netease Zhiqi Technology Co Ltd
Priority to CN202110976917.5A priority Critical patent/CN113761482A/zh
Publication of CN113761482A publication Critical patent/CN113761482A/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/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/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2107File encryption

Landscapes

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

Abstract

本发明的实施方式提供了一种程序代码保护方法和装置。该包括程序代码保护方法,包括:针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;修改所述访问标识为预设值;并抽取所述函数对应的函数代码指令进行加密处理。对于判断出的DEX文件中包含的需要加密的函数,根据其结构信息中包含的访问标识和函数代码指令,修改访问标识为预设值,并将函数代码指令进行加密,而无需对整个DEX文件进行加密,从而能够节省***处理资源,提高了DEX文件加密效率,为用户带来了更好的体验。此外,本发明的实施方式提供了一种程序代码保护装置。

Description

一种程序代码保护方法和装置
本申请为2017年6月6日申请的,申请号为“201710419286.0”,名称为“一种程序代码保护方法和装置”的分案申请。
技术领域
本发明的实施方式涉及软件开发技术领域,更具体地,本发明的实施方式涉及一种程序代码保护方法和装置。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
APP是Application(应用)的简称,通常是指移动设备(包括平板电脑、手机和其他移动设备)上的第三方开发的应用程序。DEX文件是Android平台上(Dalvik虚拟机)的可执行文件,相当于Windows平台中的exe文件,每个Apk(AndroidPackage,Android开发包)安装包中都有DEX文件,其由Java语言编写而成,其包含了APP的全部操作指令以及运行时所需的数据。DEX文件可以通过第三方逆向分析工具查看其Java源码,即通过反编译DEX文件可以直接看到Java源码,因此,越来越多的App(包括恶意病毒App)都使用了加固技术以防止App被轻易反编译。
现有技术中,通常采用以下两种方法对DEX文件进行加固,一种是对源DEX进行加密,并把加密后的文件打包存储到APK的某个目录下(加壳),这样,在APP运行时,外壳DEX首先启动,然后将加密文件解密,待解密出源DEX后再动态加载到内存运行源DEX。另外一种是将源DEX和外壳DEX混合处理成一个新DEX,在APP运行时,外壳DEX首先启动,然后将包含在新DEX里的源DEX解密出来,最后动态加载运行源DEX。
发明内容
但是,上述第一种方案中,由于需要加载加密文件以及解密和动态加载加密后的源DEX,需要消耗***较多的处理资源;而在上述第二种方案中,其减少了DEX文件内存加载,在一定程度上降低了***资源开销,但是,其在加密过程中,仍然需要对整个DEX文件进行加密,同样增加了***处理资源的开销。
为此,非常需要一种改进的函数代码指令保护方法,以提高函数代码指令保护的安全性。
在本上下文中,本发明的实施方式期望提供一种程序代码保护方法和装置。
在本发明实施方式的第一方面中,提供了一种程序代码保护方法,包括:
针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;
修改所述访问标识为预设值;并
抽取所述函数对应的函数代码指令进行加密处理。
优选地,针对DEX文件中包含的每一函数,按照以下流程判断该函数对应的函数代码指令是否需要加密:
针对DEX文件中包含的每一函数,判断该函数是否存在于预先存储的白名单中;
如果存在,则确定该函数对应的函数代码指令需要加密;
如果不存在,则确定该函数对应的函数代码指令不需要加密。
优选地,所述函数的结构信息中还包括指令偏移信息;以及
抽取所述函数对应的函数代码指令进行加密处理,具体包括:
根据所述指令偏移信息确定所述函数对应的函数代码指令的起始位置和终止位置;
抽取所述开始位置与终止位置之间包含的函数代码指令进行加密处理。
可选地,本发明实施例提供的程序代码保护方法,还包括:
存储加密后的函数代码指令;并
记录加密后的函数代码指令的存储位置信息。
可选地,本发明实施例提供的程序代码保护方法,还包括:
在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;并
执行解密后的函数代码指令。
可选地,本发明实施例提供的程序代码保护方法,还包括:
在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;并
记录***为解密后的函数代码指令所分配的内存偏移信息;
修改所述函数的结构信息中包含的指令偏移信息为分配的内存偏移信息。
在本发明实施方式的第二方面中,提供了一种程序代码保护装置,包括:
第一获取单元,用于针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;
第一修改单元,用于修改所述访问标识为预设值;
加密单元,用于抽取所述函数对应的函数代码指令进行加密处理。
可选地,本发明实施例提供的程序代码保护装置,还包括:
判断单元,用于针对DEX文件中包含的每一函数,判断该函数是否存在于预先存储的白名单中;如果存在,则确定该函数对应的函数代码指令需要加密;如果不存在,则确定该函数对应的函数代码指令不需要加密。
优选地,所述文件结构信息中还包括指令偏移信息;以及
所述加密单元,具体用于根据所述指令偏移信息确定所述访问标识对应的函数代码指令的起始位置和终止位置;抽取所述开始位置与终止位置之间包含的函数代码指令进行加密处理。
可选地,本发明实施例提供的程序代码保护装置,还包括:
存储单元,用于存储加密后的函数代码指令;
第一记录单元,用于记录加密后的函数代码指令的存储位置信息。
可选地,本发明实施例提供的程序代码保护装置,还包括:
第二获取单元,用于在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;
执行单元,用于执行解密后的函数代码指令。
可选地,本发明实施例提供的程序代码保护装置,还包括:
第三获取单元,用于在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;
第二记录单元,用于记录为解密后的函数代码指令所分配的内存偏移信息;
第二修改单元,用于修改所述文件结构信息中包含的指令偏移信息为分配的内存偏移信息。
在本发明实施方式的第三方面中,提供了一种程序代码保护装置,例如,可以包括存储器和处理器,其中,处理器可以用于读取存储器中的程序,执行下列过程:针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;修改所述访问标识为预设值;并抽取所述函数对应的函数代码指令进行加密处理。
在本发明实施方式的第四方面中,提供了一种程序产品,其包括函数代码指令,当所述程序产品运行时,所述函数代码指令用于执行以下过程:针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;修改所述访问标识为预设值;并抽取所述函数对应的函数代码指令进行加密处理。
根据本发明实施方式的程序保护方法和装置,对于判断出的DEX文件中包含的需要加密的函数,根据其结构信息中包含的访问标识和函数代码指令,修改访问标识为预设值,并将函数代码指令进行加密,而无需对整个DEX文件进行加密,从而能够节省***处理资源,提高了DEX文件加密效率,为用户带来了更好的体验。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了根据本发明实施方式的程序代码保护方法的实施流程示意图;
图2示意性地示出了根据本发明实施方式的函数结构信息示意图;
图3示意性地示出了根据本发明实施方式的对需要加密的函数抽取其指令代码后的结构信息示意图;
图4示意性地示出了根据本发明实施方式的判断任一函数对应的函数代码指令是否需要加密的流程示意图;
图5示意性地示出了根据本发明实施方式的抽取函数代码指令进行加密的流程示意图;
图6示意性地示出了根据本发明实施方式的程序代码保护装置的结构示意图;
图7示意性地示出了根据本发明实施方式的另外一种程序代码保护装置的结构示意图;
图8示意性地示出了根据本发明实施方式的程序产品示意图;
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种***、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种程序代码保护方法和装置。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
发明概述
本发明人发现,在对DEX文件进行加固时,通常需要对整个DEX文件进行加密,这增加了***处理资源开销,降低了DEX文件加密的处理效率。
有鉴于此,本发明实施例中,针对DEX文件中包含的每一函数,首选确定需要加密的函数,并根据需加密的函数的结构信息,抽取其中的函数代码指令进行加密,由于无需对整个DEX文件进行加密,从大大减少了数据处理量,节约了***资源开销,提高了DEX文件加密的效率。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
示例性方法
如图1所示,其为本发明实施例提供的程序代码保护方法的实施流程示意图,可以包括以下步骤:
S11、针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识。
具体实施时,这对待加密的DEX文件,针对该DEX文件中包含的每一函数,依次判断该函数是否需要加密,如果是,则获取该函数的结构信息,如图2所示,其为函数的结构信息示意图,函数的结构信息中包含的函数代码指令和访问标识。
S12、修改结构信息中的访问标识为预设值。
具体实施时,当一个函数在Java源代码中被声明为native函数的时候,它的指令代码并不在DEX文件里,而是在注册它的SO(shared object,共享动态链接库)文件里。因此,本发明实施中,利用了DEX文件中函数的访问标识,通过将不是native标识的函数变更为native类型来隐藏函数的指令代码,源函数的指令代码将会被加密保存起来,在APP运行的时候再动态解密执行。
S13、抽取所述函数对应的函数代码指令进行加密处理。
如图3所示,其为本发明实施例中,对需要加密的函数抽取其指令代码后的结构信息示意图。图3中,如果待加密的函数的访问标识不是native,则将访问标识修改为native,修改指令偏移信息为null,并抽取该函数对应的函数指令代码进行加密处理。
具体实施时,在步骤S11中,针对DEX文件中包含的任一函数,可以按照图4所示的流程判断该函数对应的函数代码指令是否需要加密:
S41、针对DEX文件中包含的每一函数,判断该函数是否存在于预先存储的白名单中,如果是,则执行步骤S42,否则,执行步骤S43。
具体实施时,可以预先建立函数加密白名单,其中,白名单中的函数可以根据经验预先设定。
S42、确定该函数对应的函数代码指令需要加密,流程结束。
S43、确定该函数对应的函数代码指令不需要加密。
具体实施时,如图2所示,函数的结构信息中还包括指令偏移信息,基于此,步骤S13中,可以按照图5所示的流程实施:
S51、根据所述指令偏移信息确定所述函数对应的函数代码指令的起始位置和终止位置。
S52、抽取所述开始位置与终止位置之间包含的函数代码指令进行加密处理。
在APP运行过程中,为了准确获取被加密的函数代码指令并执行,本发明实施例中,在对函数指令代码进行加密之后,还可以包括需要存储加密后的函数代码指令,并记录加密后的函数代码指令的存储位置信息。
现有技术中,第一种加密方法在解密后,由于需要调用动态加载相关函数,这个过程中可能会被攻击者通过钩挂相关函数来获取解密后的源DEX,从而达到破解的目的,降低了DEX文件保护的安全性;而第二种加密方法中,由于其需要解密源DEX,并使用动态加载技术来加载解密后的源DEX,这个过程中,仍然存在与上述第一种加密方法相同的问题,即可能被攻击者通过钩挂相关函数获取解密后的源DEX,从而达到破解的目的,同样降低了DEX文件保护的安全性。
而在APP运行过程中,需要执行被加密的函数代码指令时,基于本发明实施例提供的程序代码保护方法,本发明实施例提供以下两种处理方法。
方法一、直接执行解密后的函数代码指令。
这种实施方式下,在APP运行执行DEX文件时,根据记录的存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密,并执行解密后的函数代码指令。
方法二、修复被加密函数的结构信息。
这种实施方式下,在APP运行执行DEX文件时,根据记录的存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;并记录***为解密后的函数代码指令所分配的内存偏移信息;修改所述函数的结构信息中包含的指令偏移信息为分配的内存偏移信息。这样,根据内存偏移信息可以准确获取解密后的函数代码指令并执行。
上述两种方法中,无需调用动态加载相关函数,因此,避免了被攻击者通过钩挂相关函数来获取解密后的函数指令代码,从而提高了DEX文件保护的安全性。
本发明实施例提供的程序代码保护方法中,针对DEX文件中判断出的需加密的函数,利用函数的访问标识来抽取相应的函数代码指令进行加密,相比于现有技术中,加密整个DEX文件,大大减少了需处理的数据量,从而节约了***处理资源,提高了程序代码保护的效率,提高了用户体验;而在执行解密后的函数代码指令过程中,由于无需调用动态加载相关函数,从而避免了攻击者通过钩挂相关函数来获取解密后的函数代码指令,提高了DEX文件保护的安全性。
示例性设备
在介绍了本发明示例性实施方式的方法之后,接下来,参考图6对本发明示例性实施方式的、用于程序代码保护的装置。
如图6所示,其为本发明实施例提供的程序代码保护装置的结构示意图,可以包括:
第一获取单元61,用于针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识;
第一修改单元62,用于修改所述访问标识为预设值;
加密单元63,用于抽取所述函数对应的函数代码指令进行加密处理。
可选地,本发明实施例提供的程序代码保护装置,还可以包括:
判断单元64,用于针对DEX文件中包含的每一函数,判断该函数是否存在于预先存储的白名单中;如果存在,则确定该函数对应的函数代码指令需要加密;如果不存在,则确定该函数对应的函数代码指令不需要加密。
优选地,所述文件结构信息中还包括指令偏移信息;以及
所述加密单元63,具体用于根据所述指令偏移信息确定所述访问标识对应的函数代码指令的起始位置和终止位置;抽取所述开始位置与终止位置之间包含的函数代码指令进行加密处理。
可选地,本发明实施例提供的程序代码保护装置,还可以包括:
存储单元65,用于存储加密后的函数代码指令;
第一记录单元66,用于记录加密后的函数代码指令的存储位置信息。
可选地,本发明实施例提供的程序代码保护装置,还可以包括:
第二获取单元67,用于在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;
执行单元68,用于执行解密后的函数代码指令。
可选地,本发明实施例提供的程序代码保护装置,还可以包括:
第三获取单元69,用于在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;
第二记录单元610,用于记录为解密后的函数代码指令所分配的内存偏移信息;
第二修改单元611,用于修改所述文件结构信息中包含的指令偏移信息为分配的内存偏移信息。
在介绍了本发明示例性实施方式的程序代码保护方法和装置之后,接下来,介绍根据本发明的另一示例性实施方式的程序代码保护装置。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为***、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“***”。
在一些可能的实施方式中,根据本发明的程序代码保护装置可以包括至少一个处理单元、以及至少一个存储单元。其中,所述存储单元存储有函数代码指令,当所述函数代码指令被所述处理单元执行时,使得所述处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的程序代码保护方法中的各种步骤。例如,所述处理单元可以执行如图1中所示的步骤S11,针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识,步骤S12,修改结构信息中的访问标识为预设值;以及步骤S13,抽取所述函数对应的函数代码指令进行加密处理。
下面参照图7来描述根据本发明的这种实施方式的程序代码保护装置70。图7显示的程序代码保护装置仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,程序代码保护装置70可以以通用计算设备的形式表现,例如其可以为用户设备。程序代码保护装置70的组件可以包括但不限于:上述至少一个处理单元71、上述至少一个存储单元72、连接不同***组件(包括存储单元72和处理单元71)的总线73。
总线73表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、***总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元72可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)721和/或高速缓存存储器722,还可以进一步包括只读存储器(ROM)723。
存储单元72还可以包括具有一组(至少一个)程序模块724的程序/实用工具725,这样的程序模块724包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
程序代码保护装置70也可以与一个或多个外部设备74(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与该程序代码保护装置70交互的设备通信,和/或与使得程序代码保护装置70能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口75进行。并且,程序代码保护装置70还可以通过网络适配器76与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器76通过总线73与程序代码保护装置70的其它模块通信。应当明白,尽管图中未示出,可以结合程序代码保护装置70使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
示例性程序产品
在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算设备上运行时,所述程序代码用于使所述计算设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的程序代码保护方法的步骤,例如,所述计算设备可以执行如图1中所示的步骤S11,针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令及其访问标识,步骤S12,修改结构信息中的访问标识为预设值;以及步骤S13,抽取所述函数对应的函数代码指令进行加密处理。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
如图8所示,描述了根据本发明的实施方式的用于程序代码保护的程序产品80,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在服务器设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (8)

1.一种程序代码保护方法,其特征在于,包括:
针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令、访问标识及其指令偏移信息;
修改所述访问标识为预设值;并
抽取所述函数对应的函数代码指令进行加密处理;
存储加密后的函数代码指令;并
记录加密后的函数代码指令的存储位置信息;
在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;并
记录***为解密后的函数代码指令所分配的内存偏移信息;
修改所述函数的结构信息中包含的指令偏移信息为分配的内存偏移信息,以便根据所述指令偏移信息获取解密后的函数代码指令并执行;
其中,针对DEX文件中包含的每一函数,按照以下流程判断该函数对应的函数代码指令是否需要加密,包括:
针对DEX文件中包含的每一函数,判断该函数是否存在于预先存储的白名单中;
如果存在,则确定该函数对应的函数代码指令需要加密;
如果不存在,则确定该函数对应的函数代码指令不需要加密。
2.根据权利要求1所述的方法,其特征在于,抽取所述函数对应的函数代码指令进行加密处理,具体包括:
根据所述指令偏移信息确定所述函数对应的函数代码指令的起始位置和终止位置;
抽取所述开始位置与终止位置之间包含的函数代码指令进行加密处理。
3.根据权利要求1所述的方法,其特征在于,还包括:
在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;并
执行解密后的函数代码指令。
4.一种程序代码保护装置,其特征在于,包括:
第一获取单元,用于针对DEX文件中包含的每一函数,如果判断出该函数对应的函数代码指令需要加密,则获取所述函数的结构信息,所述结构信息中包含有函数代码指令、访问标识及其指令偏移信息;
第一修改单元,用于修改所述访问标识为预设值;
加密单元,用于抽取所述函数对应的函数代码指令进行加密处理;
存储单元,用于存储加密后的函数代码指令;
第一记录单元,用于记录加密后的函数代码指令的存储位置信息;
第三获取单元,用于在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;
第二记录单元,用于记录为解密后的函数代码指令所分配的内存偏移信息;
第二修改单元,用于修改所述文件结构信息中包含的指令偏移信息为分配的内存偏移信息,以便根据所述指令偏移信息获取解密后的函数代码指令并执行;
判断单元,用于针对DEX文件中包含的每一函数,判断该函数是否存在于预先存储的白名单中;如果存在,则确定该函数对应的函数代码指令需要加密;如果不存在,则确定该函数对应的函数代码指令不需要加密。
5.根据权利要求4所述的装置,其特征在于,所述加密单元,具体用于根据所述指令偏移信息确定所述访问标识对应的函数代码指令的起始位置和终止位置;抽取所述开始位置与终止位置之间包含的函数代码指令进行加密处理。
6.根据权利要求5所述的装置,其特征在于,还包括:
第二获取单元,用于在执行所述DEX文件时,根据所述存储位置信息从相应的存储位置获取加密后的函数代码指令进行解密;
执行单元,用于执行解密后的函数代码指令。
7.一种计算设备,其特征在于,包括至少一个处理单元、以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述程序被所述处理单元执行时,使得所述处理单元执行权利要求1~3任一权利要求所述方法的步骤。
8.一种计算机可读介质,其特征在于,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行权利要求1~3任一所述方法的步骤。
CN202110976917.5A 2017-06-06 2017-06-06 一种程序代码保护方法和装置 Pending CN113761482A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110976917.5A CN113761482A (zh) 2017-06-06 2017-06-06 一种程序代码保护方法和装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201710419286.0A CN107292135A (zh) 2017-06-06 2017-06-06 一种程序代码保护方法和装置
CN202110976917.5A CN113761482A (zh) 2017-06-06 2017-06-06 一种程序代码保护方法和装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201710419286.0A Division CN107292135A (zh) 2017-06-06 2017-06-06 一种程序代码保护方法和装置

Publications (1)

Publication Number Publication Date
CN113761482A true CN113761482A (zh) 2021-12-07

Family

ID=60094873

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202110976917.5A Pending CN113761482A (zh) 2017-06-06 2017-06-06 一种程序代码保护方法和装置
CN201710419286.0A Pending CN107292135A (zh) 2017-06-06 2017-06-06 一种程序代码保护方法和装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201710419286.0A Pending CN107292135A (zh) 2017-06-06 2017-06-06 一种程序代码保护方法和装置

Country Status (1)

Country Link
CN (2) CN113761482A (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107292163B (zh) * 2016-04-13 2019-08-27 中国科学院声学研究所 一种基于Chromium的渲染进程分离方法
CN109492353B (zh) * 2018-10-11 2024-04-16 北京奇虎科技有限公司 应用加固方法、装置、电子设备和存储介质
CN111639358B (zh) * 2020-06-15 2023-08-22 深圳供电局有限公司 一种指令加密、加密指令解密方法及装置
CN112052463B (zh) * 2020-08-05 2024-06-04 北京智游网安科技有限公司 一种代码处理方法、终端及存储介质
CN112052461A (zh) * 2020-08-05 2020-12-08 北京智游网安科技有限公司 一种基于指令注入的代码处理方法、终端及存储介质
CN111966972B (zh) * 2020-08-21 2023-07-04 北京元心科技有限公司 程序加密方法、装置、电子设备及计算机可读存储介质
CN112905543A (zh) * 2021-02-07 2021-06-04 网易(杭州)网络有限公司 脚本文件的防破解方法、介质、装置和计算设备
CN113569269B (zh) * 2021-09-23 2022-12-27 苏州浪潮智能科技有限公司 一种代码混淆的加密方法、装置、设备及可读介质
CN113987471A (zh) * 2021-10-29 2022-01-28 山西大鲲智联科技有限公司 可执行文件执行方法、装置、电子设备和计算机可读介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2075728A1 (en) * 2007-12-27 2009-07-01 Thomson Licensing A method and an apparatus for code protection
CN103761475A (zh) * 2013-12-30 2014-04-30 北京奇虎科技有限公司 检测智能终端中恶意代码的方法及装置
US20140317419A1 (en) * 2013-04-17 2014-10-23 Laurence H. Cooke Secure computing
CN104573416A (zh) * 2013-10-25 2015-04-29 腾讯科技(深圳)有限公司 一种生成应用安装包、执行应用的方法及装置
CN104834838A (zh) * 2015-04-29 2015-08-12 福建天晴数码有限公司 防止dex文件从内存中转存的方法及装置
US20160239671A1 (en) * 2015-02-13 2016-08-18 Thomson Licensing Method and device for protecting an application and method and device for executing a protected application thus protected
CN106203006A (zh) * 2016-08-31 2016-12-07 北京鼎源科技有限公司 基于dex与so文件动态执行的Android应用加固方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2075728A1 (en) * 2007-12-27 2009-07-01 Thomson Licensing A method and an apparatus for code protection
US20140317419A1 (en) * 2013-04-17 2014-10-23 Laurence H. Cooke Secure computing
CN104573416A (zh) * 2013-10-25 2015-04-29 腾讯科技(深圳)有限公司 一种生成应用安装包、执行应用的方法及装置
CN103761475A (zh) * 2013-12-30 2014-04-30 北京奇虎科技有限公司 检测智能终端中恶意代码的方法及装置
US20160239671A1 (en) * 2015-02-13 2016-08-18 Thomson Licensing Method and device for protecting an application and method and device for executing a protected application thus protected
CN104834838A (zh) * 2015-04-29 2015-08-12 福建天晴数码有限公司 防止dex文件从内存中转存的方法及装置
CN106203006A (zh) * 2016-08-31 2016-12-07 北京鼎源科技有限公司 基于dex与so文件动态执行的Android应用加固方法

Also Published As

Publication number Publication date
CN107292135A (zh) 2017-10-24

Similar Documents

Publication Publication Date Title
CN113761482A (zh) 一种程序代码保护方法和装置
CN106778103B (zh) 一种安卓应用程序防逆向破解的加固方法、***及解密方法
JP6227772B2 (ja) 動的ライブラリを保護する方法及び装置
EP3038004A1 (en) Method for providing security for common intermediate language-based program
TWI715762B (zh) 虛擬機器創建方法和裝置
US20180239621A1 (en) Method and device of operating functional module cross platforms
CN111858004A (zh) 基于tee扩展的计算机安全世界实时应用动态加载方法及***
EP3451221B1 (en) Binary suppression and modification for software upgrades
CN112231702B (zh) 应用保护方法、装置、设备及介质
CN113568680B (zh) 应用程序的动态链接库保护方法、装置、设备及介质
CN113760306A (zh) 安装软件的方法、装置、电子设备及存储介质
CN110348206B (zh) 应用于安卓安装包apk的保护方法、介质、装置和计算设备
CN111382447B (zh) 安装包的加密方法、存储介质及计算机设备
US20160078227A1 (en) Data processing system security device and security method
CN113032741B (zh) 类文件加密方法、类文件运行方法、装置、设备及介质
US10719456B2 (en) Method and apparatus for accessing private data in physical memory of electronic device
CN107209815B (zh) 用于使用返回导向编程的代码混淆的方法
CN110502900B (zh) 一种检测方法、终端、服务器及计算机存储介质
CN110263532B (zh) 可信计算方法、设备及***
CN112052461A (zh) 一种基于指令注入的代码处理方法、终端及存储介质
CN109145591B (zh) 应用程序的插件加载方法
CN106295327B (zh) 可执行文件的加固方法和装置
CN110955885A (zh) 一种数据写入方法及装置
CN110109717A (zh) 一种安卓插件的加载控制方法、装置和计算机设备
CN104680043A (zh) 一种可执行文件的保护方法及装置

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