CN105279399A - 应用防破解方法和装置 - Google Patents

应用防破解方法和装置 Download PDF

Info

Publication number
CN105279399A
CN105279399A CN201510728491.6A CN201510728491A CN105279399A CN 105279399 A CN105279399 A CN 105279399A CN 201510728491 A CN201510728491 A CN 201510728491A CN 105279399 A CN105279399 A CN 105279399A
Authority
CN
China
Prior art keywords
virtual machine
machine instructions
instructions
application
converted
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
CN201510728491.6A
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.)
Baidu Online Network Technology Beijing Co Ltd
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and 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 Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201510728491.6A priority Critical patent/CN105279399A/zh
Publication of CN105279399A publication Critical patent/CN105279399A/zh
Priority to US15/239,109 priority patent/US10380329B2/en
Pending legal-status Critical Current

Links

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • 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/52Monitoring 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/53Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了应用防破解方法和装置。该方法的一具体实施方式包括:获取应用对应的被第一虚拟机解析的第一虚拟机指令;选取第一虚拟机指令中部分第一虚拟机指令,以及将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令;基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件。实现了由第一虚拟机、第二虚拟机分别解析第一虚拟机指令、第二虚拟机指令,使得即使破解程序从内存中提取出应用的源代码对应的所有虚拟机指令,因无法对第一虚拟机指令、第二虚拟机指令进行区分,导致破解程序无法基于获取的虚拟机指令对源代码进行恢复,从而防止应用被破解。

Description

应用防破解方法和装置
技术领域
本申请涉及互联网领域,具体涉及应用安全领域,尤其涉及应用防破解方法和装置。
背景技术
目前,在用户安装应用时,通常通过下载包含有应用的源代码的安装包的方式进行安装。为防止应用被破解,即恢复出安装包中的源代码,在已知的技术中,通过将安装包中的源代码预先进行加密,然后在经加密后的源代码加载在内存中运行时,再对加密的源代码进行解密,以防止应用被破解。
然而,当采用上述方式防止应用被破解时,经解密之后的源代码最终依然会全部加载在内存中运行,导致破解程序依然可以通过不断的捕获内存中的代码而获取应用的全部源代码,完成对应用的破解。
发明内容
本申请提供了应用防破解方法和装置,用于解决上述背景技术部分存在的技术问题。
第一方面,本申请提供了应用防破解方法,该方法包括:获取应用对应的被第一虚拟机解析的第一虚拟机指令,第一虚拟机指令基于对应用的源代码进行编译生成,第一虚拟机为解析第一虚拟机指令以生成机器指令的虚拟机;选取第一虚拟机指令中部分第一虚拟机指令,以及将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令,第二虚拟机为解析第二虚拟机指令生成机器指令的虚拟机;基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。
第二方面,本申请提供了应用防破解装置,该装置包括:获取单元,配置用于获取应用对应的被第一虚拟机解析的第一虚拟机指令,第一虚拟机指令基于对应用的源代码进行编译生成,第一虚拟机为解析第一虚拟机指令以生成机器指令的虚拟机;处理单元,配置用于选取第一虚拟机指令中部分第一虚拟机指令,以及将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令,第二虚拟机为解析第二虚拟机指令生成机器指令的虚拟机;生成单元,配置用于基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。
本申请提供的应用防破解方法和装置,通过获取应用对应的被第一虚拟机解析的第一虚拟机指令;选取第一虚拟机指令中部分第一虚拟机指令,以及将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令;基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。实现了由第一虚拟机、第二虚拟机分别解析第一虚拟机指令、第二虚拟机指令,使得即使破解程序从内存中提取出应用的源代码对应的所有虚拟机指令,因无法对第一虚拟机指令、第二虚拟机指令进行区分,导致破解程序无法基于获取的虚拟机指令对源代码进行恢复,从而防止应用被破解。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构图;
图2示出了根据本申请的应用防破解方法的一个实施例的流程图;
图3示出了Java虚拟机解析虚拟机指令生成机器指令的原理图;
图4示出了根据本申请的应用防破解方法的另一个实施例的流程图;
图5示出了根据本申请的应用防破解装置的一个实施例的结构示意图;
图6是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的应用防破解方法或应用防破解装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供传输链路的介质。网络104可以包括各种连接类型,例如有线、无线传输链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯应用,例如网络安全类应用、即时通信工具等。
终端设备101、102、103可以是具有显示屏并且支持网络通信的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(MovingPictureExpertsGroupAudioLayerIII,动态影像专家压缩标准音频层面3)、MP4(MovingPictureExpertsGroupAudioLayerIV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上的应用提供安全支持的服务器。服务器105可以接收到终端设备101、102、103发送的应用安装包下载请求,并对安装包进行处理,并将处理结果(例如包含有第二虚拟机指令的安装包)反馈给终端设备。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
请参考图2,其示出了根据本申请的应用防破解方法的一个实施例的流程200。本实施例所提供的应用防破解方法可以由图1中的终端设备101、102、103或服务器105执行。该方法包括以下步骤:
步骤201,获取应用对应的被第一虚拟机解析的第一虚拟机指令。
在本实施例中,第一虚拟机指令基于对应用的源代码进行编译生成,第一虚拟机为解析第一虚拟机指令以生成机器指令的虚拟机。例如,当应用的源代码为Java代码时,第一虚拟机指令可以为由Java编译器对Java代码进行编译后生成的Java字节码,相应地,第一虚拟机可以为执行Java字节码的Java虚拟机。
应理解,上述第一虚拟机为Java字节码,第一虚拟机可以为Java虚拟机即为示例性地简要说明虚拟机与虚拟机指令的对应关系,在本实施例中,并不对虚拟机的类型进行限定。以下说明的虚拟机解析虚拟机指令生成机器指令的基本原理既适用于Java虚拟机,也适用于其他类型的虚拟机。
在说明虚拟机解析虚拟机指令生成机器指令的原理之前,首先说明应用的源代码(例如C代码、C++代码等)经编译之后生成机器指令的基本原理:用于执行机器指令的CPU对应一个指令集(例如X86指令集),相应地,CPU执行的每一个操作(例如将数据写入内存的存储操作)由多条机器指令组成。在应用的源代码中,可以由一条或多条代码表示一个由CPU执行的操作,在对源代码进行编译时,源代码会被运行于平台的编译器解析为适用于平台(例如Linux、Windows)的指令。以CPU执行的操作为将数据写入内存的存储操作为例,假设源代码中包含一条与存储操作对应的代码。在Linux平台上,该代码经由运行于Linux上的编译器(例如GCC编译器)进行编译之后,可以生成与该代码对应的多条Linux指令,然后将多条Linux指令转换为机器指令,由CPU执行转换后得到的机器指令,执行存储操作。在Windows平台上,该代码经由运行于Windows上的编译器(例如VisualStudio开发工具)编译之后,可以生成Windows指令集中与该代码对应的多条Windows指令,然后将多条Windows指令转换为机器指令,由CPU执行转换后得到的机器指令,执行存储操作。
基于上述应用的源代码经编译之后生成机器指令的基本原理,下面继续说明虚拟机解析虚拟机指令生成机器指令的原理。以虚拟机为Java虚拟机为例,请参考图3,其示出了Java虚拟机解析虚拟机指令生成机器指令的原理图。在图3中,通过Java编译器将应用的Java源代码编译为虚拟机指令(Java字节码),然后,由Java虚拟机中的Java解释器解析Java字节码,根据目标平台的不同,分别生成适用于不同平台的指令,然后转换为机器指令,由CPU执行该机器指令,完成相应地的操作。以一条用于使CPU执行存储操作的Java代码为例,首先该Java代码被转换为Java字节码,然后通过Java解释器将该Java字节码解析为Linux平台上与存储操作对应的Linux指令,即从Linux指令集中查找存储操作对应的Linux指令,然后将该Linux指令转换为机器指令,由CPU执行该机器指令,完成存储操作。
步骤202,选取第一虚拟机指令中部分第一虚拟机指令,以及将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令。
在本实施例中,在获取应用的第一虚拟机指令之后,可以选取第一虚拟机指令中部分第一虚拟机指令。以第一虚拟机指令为Java字节码,第一虚拟机为Java虚拟机为例,在Java虚拟机规范中,Java字节码设置于Class文件中,因此,选取第一虚拟机指令中部分第一虚拟机指令可以为:选取Class文件中的方法代码即与Class文件中定义的方法对应的Java字节码,将与Class文件中的方法对应的Java字节码作为部分第一虚拟机指令。
在本实施例的一些可选的实现方式中,第一虚拟机、第二虚拟机均为Java虚拟机,第一虚拟机指令为Java字节码。在本实施例中,第一虚拟机可以为直接可执行Java字节码的Java虚拟机,可直接执行Java字节码的Java虚拟机也可称之为系统Java虚拟机。系统Java虚拟机配置完整的JRE(JavaRuntimeEnvironment,Java运行环境),JRE中包括Class文件中定义的方法在执行时需要访问的核心类库。在本实施例中,第一虚拟机、第二虚拟机可以为应用于安卓(Android)平台的Java虚拟机即Dalvik虚拟机,相应地,第一虚拟机可以为可直接执行适用于安卓平台的Java字节码(也可称之为Dalvik字节码),第二虚拟机可以为基于Java虚拟机规范创建的Dalvik虚拟机。
应理解,在本实施例中,Java虚拟机的含义可以为符合Java虚拟机规范的虚拟机。例如,在Java虚拟机规范中规定,虚拟机指令需要设置于Java虚拟机规范中定义的类型的文件(例如Class文件)中、由类加载器将定义的类型的文件加载到Java虚拟机、由文件解析器(例如Class文件解析器)解析定义的类型的文件中的虚拟机指令。因此,只要符合上述规范的虚拟机,均可称之为Java虚拟机。
在本实施例中,在选取出第一虚拟机指令中部分第一虚拟机指令之后,可以将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令。第二虚拟机为解析第二虚拟机指令生成机器指令的虚拟机。基于步骤201中说明的虚拟机解析虚拟机指令生成机器指令的原理,下面继续说明创建第二虚拟机,利用第二虚拟机解析第二虚拟机指令生成机器指令的基本原理:以第一虚拟机、第二虚拟机均为Java虚拟机,第一虚拟机指令为Java字节码为例,第一虚拟机可以为可直接执行Java字节码的系统Java虚拟机。可以首先设置第二虚拟机指令的指令格式,然后创建用于对第二虚拟机指令进行解释执行的第二虚拟机的Java解释器,利用第二虚拟机的Java解释器将第二虚拟机指令分别转换为适用于不同平台的指令,即对第二虚拟机指令解释执行。最后,将该指令转换为机器指令,由CPU执行该机器指令。在本实施例中,第二虚拟机的Java解释器可以采用以下方式实现:可以基于系统虚拟机的Java解释器的结构,对系统Java虚拟机的Java解释器的提取虚拟机指令中的操作码、操作数的方式进行改进,使其可以根据第二虚拟机指令格式,从第二虚拟机指令中提取出操作码、操作数。而第二虚拟机中对提取出操作码、操作数的解释执行的方式则可以继续沿用系统Java虚拟机对操作码、操作数的解释执行方式,即可以依照系统Java虚拟机中的操作码、操作数在Java虚拟机的堆栈中的执行顺序,对提取出操作码、操作数解释执行,从而使得第二虚拟机指令得以被解释执行。在本实施例中,在创建了第二虚拟机的Java解释器之后,可以进一步基于Java虚拟机规范,创建与第二虚拟机指令适配的Class文件解析器、类加载器,从而构建第二虚拟机。
在本实施例中,第二虚拟机可以只支持部分类型的第一虚拟机指令的转换。以第一虚拟机可以为可直接执行Java字节码的系统Java虚拟机为例,对于具有复杂的操作的类型的第一虚拟机指令(Java字节码),例如,需要有核心类库支持的指令,则可以由系统Java虚拟机执行该类型第一虚拟机指令,第二虚拟机不对该类型的第一虚拟机指令进行转换,从而减少系统开销。
在本实施例中,当第二虚拟机为Java虚拟机,在创建第二虚拟机的Java解释器时,即编写第二虚拟机的Java解释器时,可以仅采用Java语言编写第二虚拟机的Java解释器,对所有第二虚拟机指令的解释执行均通过Java代码的运行实现。也可以同时采用Java语言和C语言编写第二虚拟机的Java解释器。例如,在对第二虚拟机指令解释执行时,对复杂的第二虚拟机指令的解释执行部分由C代码实现,从而提升第二虚拟机指令的执行效率。还可以仅采用C语言编写第二虚拟机的Java解释器,对所有的第二虚拟机指令的解释执行均通过C代码的运行实现,由于C语言为底层语言,因此更难于破解,从而可以进一步提高安全性。
在本实施例中,当第一虚拟机、第二虚拟机均为Java虚拟机,在通过Java解释器对第一虚拟机指令、第二虚拟机指令解释执行时,还可以对第一虚拟机指令、第二虚拟机指令进行指令序列优化处理,以及将第一虚拟机指令、第二虚拟机指令与数据分离。例如,分别设置虚拟机指令队列、数据队列。虚拟机指令队列仅存储指令,虚拟机指令需要访问的寄存器和数据存储于数据队列,由指令指针和数据指针分别指向指令队列和数据队列。
在本实施例的一些可选的实现方式中,将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令包括:基于第一虚拟机指令与第二虚拟机指令的对应关系表,将部分第一虚拟机指令转换为第二虚拟机指令。
在本实施例中,第一虚拟机指令与第二虚拟机指令可以为固定映射关系。可以预先建立第一虚拟机指令与第二虚拟机指令的对应关系表,然后基于第一虚拟机指令与第二虚拟机指令的对应关系表,将部分第一虚拟机指令转换为第二虚拟机指令。此外,还可以针对一条第一虚拟机指令、第二虚拟机指令,单独进行加密处理。
步骤203,基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件。
在本实施例中,可以基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。
以应用为由Java代码编写的安卓应用为例,可以对该安卓应用的Java源代码进行Java编译之后可以得到对应的第一虚拟机指令(Java字节码)。然后,将部分第一虚拟机指令转换为第二虚拟机指令,分别生成未被转换的第一虚拟机指令对应的Class文件以及第二虚拟机指令对应的Class文件。最后,可以通过Dex文件格式转换工具将Class文件转换成Dex文件,将安卓应用在运行时所需的资源文件和Dex文件进行打包,最终生成APK(AndroidPackage,安卓安装包)文件。从而使得用户通过该APK文件安装应用后,在应用运行时,即执行Dex文件时,执行的虚拟机指令为第一虚拟机、第二虚拟机指令。从而使得即使破解程序获取全部加载在内存中的应用的源代码对应的虚拟机指令,由于无法确定第一虚拟机指令、第二虚拟机指令的对应关系,而无法对第一虚拟机指令、第二虚拟机指令进行区分,从而使得破解程序无法恢复出应用的源代码。
在本实施例的一些可选的实现方式中,还包括:在基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件之后,将可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。
在本实施例中,在将部分第一虚拟机指令转化为第二虚拟机指令之后,可以将包含有未被转换的第一虚拟机指令、第二虚拟机指令的可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。以应用为由Java代码编写的安卓应用为例,可以将Dex文件与第二虚拟机的源代码进行打包,生成APK文件。从而当用户下载APK文件安装应用时,可以同时安装第二虚拟机,然后在应用运行时,由第二虚拟机执行Dex文件中的第二虚拟机指令。
请参考图4,其示出了根据本申请的应用防破解方法的另一个实施例的流程400。本实施例所提供的应用防破解方法可以由图1中的终端设备101、102、103或服务器105执行。该方法包括以下步骤:
步骤401,获取应用对应的被第一虚拟机解析的第一虚拟机指令。
在本实施例中,第一虚拟机指令基于对应用的源代码进行编译生成,第一虚拟机为解析第一虚拟机指令以生成机器指令的虚拟机。例如,当应用的源代码为Java代码时,第一虚拟机指令可以为由Java编译器对Java代码进行编译后生成的Java字节码,相应地,第一虚拟机可以为Java虚拟机。
步骤402,选取第一虚拟机指令中部分第一虚拟机指令,将部分第一虚拟机指令进行编码生成第二虚拟机指令。
在本实施例中,在获取应用的第一虚拟机指令之后,可以选取第一虚拟机指令中部分第一虚拟机指令。以第一虚拟机指令为Java字节码,第一虚拟机为Java虚拟机为例。在Java虚拟机规范中,Java字节码设置于Class文件中,因此,选取第一虚拟机指令中部分第一虚拟机指令可以为选取Class文件中的方法代码即与Class文件中定义的方法对应的Java字节码,从而将与Class文件中定义的方法对应的Java字节码作为部分第一虚拟机指令。
在本实施例中,可以采用以下方式将选取出的部分第一虚拟机指令转换为第二虚拟机指令:提取部分第一虚拟机指令中的操作码与操作数;以第二虚拟机指令对应的预设指令格式对操作码与操作数进行编码,生成第二虚拟机指令。在本实施例中,可以预先设置第二虚拟机指令对应的预设指令格式,该第二虚拟机指令对应的预设指令格式可以定义有操作码、操作数等的长度以及在第二虚拟机指令中位置,然后可以将从第一虚拟机指令中提取出的操作码、操作数转换为预设指令格式中定义的长度,以及将转换后的操作码、操作数设置于预设指令格式中的相应地的位置上,从而将选取出的部分第一虚拟机指令转换为第二虚拟机指令。
在本实施例的一些可选的实现方式中,还包括:设置操作码与操作数在第二虚拟机指令中对应的字段的长度,基于字段的长度,调整预设指令格式。在本实施例中,还可以预先设置操作码与操作数在第二虚拟机指令中对应的字段的长度,从而实现在将第一虚拟机指令转换为第二虚拟机指令的过程中,随机设置第二虚拟机指令的指令格式,实现随机产生第二虚拟机指令。然后,可以将包含有该操作码与操作数的第一虚拟机指令转换为随机生成的第二虚拟机指令,从而实现第一虚拟机指令与第二虚拟机指令的动态映射,进一步提升安全性。
步骤403,基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件。
在本实施例中,可以基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。在本实施例中,还可以将可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。以应用为由Java代码编写的安卓应用为例,可以将Dex文件与第二虚拟机的源代码进行打包,生成APK文件。从而当用户下载APK文件安装应用时,可以同时安装第二虚拟机,然后在运行应用时,由第二虚拟机执行Dex文件中的第二虚拟机指令。
请参考图5,其示出了根据本申请的应用防破解装置的一个实施例的结构示意图。装置500包括:获取单元501,处理单元502,生成单元503。其中,获取单元501配置用于获取应用对应的被第一虚拟机解析的第一虚拟机指令,第一虚拟机指令基于对应用的源代码进行编译生成,第一虚拟机为解析第一虚拟机指令以生成机器指令的虚拟机;处理单元502配置用于选取第一虚拟机指令中部分第一虚拟机指令,以及将部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令,第二虚拟机为解析第二虚拟机指令生成机器指令的虚拟机;生成单元503配置用于基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件,以使得可执行文件被执行时,由第一虚拟机、第二虚拟机分别执行未被转换的第一虚拟机指令、第二虚拟机指令。
在本实施例的一些可选的实现方式中,第一虚拟机、第二虚拟机均为Java虚拟机,第一虚拟机指令为Java字节码。
在本实施例的一些可选的实现方式中,装置500还包括:安装包生成单元(未示出),配置用于在基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成应用对应的可执行文件之后,将可执行文件与第二虚拟机的源代码进行打包,生成应用对应的安装包文件。
在本实施例的一些可选的实现方式中,处理单元502包括:第一转换子单元(未示出),配置用于基于第一虚拟机指令与第二虚拟机指令的对应关系表,将部分第一虚拟机指令转换为第二虚拟机指令。
在本实施例的一些可选的实现方式中,处理单元502包括:提取子单元(未示出),配置用于提取部分第一虚拟机指令中的操作码与操作数;第二转换子单元(未示出),配置用于以第二虚拟机指令对应的预设指令格式对操作码与操作数进行编码,生成第二虚拟机指令。
在本实施例的一些可选的实现方式中,装置500还包括:调整单元(未示出),配置用于设置操作码与操作数在第二虚拟机指令中对应的字段的长度,基于字段的长度,调整预设指令格式。
图6示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM603中,还存储有系统600操作所需的各种程序和数据。CPU601、ROM602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:获取所述应用对应的被第一虚拟机解析的第一虚拟机指令,所述第一虚拟机指令基于对所述应用的源代码进行编译生成,所述第一虚拟机为解析所述第一虚拟机指令以生成机器指令的虚拟机;选取所述第一虚拟机指令中部分第一虚拟机指令,以及将所述部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令,所述第二虚拟机为解析所述第二虚拟机指令生成机器指令的虚拟机;基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成所述应用对应的可执行文件,以使得所述可执行文件被执行时,由所述第一虚拟机、第二虚拟机分别执行所述未被转换的第一虚拟机指令、第二虚拟机指令。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (12)

1.一种应用防破解方法,其特征在于,所述方法包括:
获取所述应用对应的被第一虚拟机解析的第一虚拟机指令,所述第一虚拟机指令基于对所述应用的源代码进行编译生成,所述第一虚拟机为解析所述第一虚拟机指令以生成机器指令的虚拟机;
选取所述第一虚拟机指令中部分第一虚拟机指令,以及将所述部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令,所述第二虚拟机为解析所述第二虚拟机指令生成机器指令的虚拟机;
基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成所述应用对应的可执行文件,以使得所述可执行文件被执行时,由所述第一虚拟机、第二虚拟机分别执行所述未被转换的第一虚拟机指令、第二虚拟机指令。
2.根据权利要求1所述的方法,其特征在于,所述第一虚拟机、第二虚拟机均为Java虚拟机,所述第一虚拟机指令为Java字节码。
3.根据权利要求1-2之一所述的方法,其特征在于,所述方法还包括:在所述基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成所述应用对应的可执行文件之后,将所述可执行文件与第二虚拟机的源代码进行打包,生成所述应用对应的安装包文件。
4.根据权利要求3所述的方法,其特征在于,所述将所述部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令包括:
基于第一虚拟机指令与第二虚拟机指令的对应关系表,将所述部分第一虚拟机指令转换为所述第二虚拟机指令。
5.根据权利要求3所述的方法,其特征在于,所述将所述部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令包括:
提取所述部分第一虚拟机指令中的操作码与操作数;
以第二虚拟机指令对应的预设指令格式对所述操作码与操作数进行编码,生成所述第二虚拟机指令。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
设置所述操作码与操作数在所述第二虚拟机指令中对应的字段的长度,基于所述字段的长度,调整所述预设指令格式。
7.一种应用防破解装置,其特征在于,所述装置包括:
获取单元,配置用于获取所述应用对应的被第一虚拟机解析的第一虚拟机指令,所述第一虚拟机指令基于对所述应用的源代码进行编译生成,所述第一虚拟机为解析所述第一虚拟机指令以生成机器指令的虚拟机;
处理单元,配置用于选取所述第一虚拟机指令中部分第一虚拟机指令,以及将所述部分第一虚拟机指令转换为被第二虚拟机解析的第二虚拟机指令,所述第二虚拟机为解析所述第二虚拟机指令生成机器指令的虚拟机;
生成单元,配置用于基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成所述应用对应的可执行文件,以使得所述可执行文件被执行时,由所述第一虚拟机、第二虚拟机分别执行所述未被转换的第一虚拟机指令、第二虚拟机指令。
8.根据权利要求7所述的装置,其特征在于,所述第一虚拟机、第二虚拟机均为Java虚拟机,所述第一虚拟机指令为Java字节码。
9.根据权利要求7-8之一所述的装置,其特征在于,所述装置还包括:
安装包生成单元,配置用于在所述基于第一虚拟机指令中未被转换的第一虚拟机指令与第二虚拟机指令,生成所述应用对应的可执行文件之后,将所述可执行文件与第二虚拟机的源代码进行打包,生成所述应用对应的安装包文件。
10.根据权利要求9所述的装置,其特征在于,所述处理单元包括:
第一转换子单元,配置用于基于第一虚拟机指令与第二虚拟机指令的对应关系表,将所述部分第一虚拟机指令转换为所述第二虚拟机指令。
11.根据权利要求9所述的装置,其特征在于,所述处理单元包括:
提取子单元,配置用于提取所述部分第一虚拟机指令中的操作码与操作数;
第二转换子单元,配置用于以第二虚拟机指令对应的预设指令格式对所述操作码与操作数进行编码,生成所述第二虚拟机指令。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
调整单元,配置用于设置所述操作码与操作数在所述第二虚拟机指令中对应的字段的长度,基于所述字段的长度,调整所述预设指令格式。
CN201510728491.6A 2015-10-30 2015-10-30 应用防破解方法和装置 Pending CN105279399A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201510728491.6A CN105279399A (zh) 2015-10-30 2015-10-30 应用防破解方法和装置
US15/239,109 US10380329B2 (en) 2015-10-30 2016-08-17 Method and apparatus for preventing application from being deciphered

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510728491.6A CN105279399A (zh) 2015-10-30 2015-10-30 应用防破解方法和装置

Publications (1)

Publication Number Publication Date
CN105279399A true CN105279399A (zh) 2016-01-27

Family

ID=55148402

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510728491.6A Pending CN105279399A (zh) 2015-10-30 2015-10-30 应用防破解方法和装置

Country Status (2)

Country Link
US (1) US10380329B2 (zh)
CN (1) CN105279399A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107305498A (zh) * 2016-04-25 2017-10-31 深圳市深信服电子科技有限公司 应用安装方法、控制器及应用安装系统
CN108121565A (zh) * 2016-11-28 2018-06-05 阿里巴巴集团控股有限公司 生成指令集编码的方法、装置和系统
CN108932406A (zh) * 2017-05-18 2018-12-04 北京梆梆安全科技有限公司 虚拟化软件保护方法和装置
CN112214738A (zh) * 2020-10-20 2021-01-12 上海星融汽车科技有限公司 诊断设备反破解方法

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109992974B (zh) * 2017-12-29 2023-04-14 中兴通讯股份有限公司 虚拟机字节码文件的保护方法、设备及可读存储介质
GB2581482B (en) 2019-02-15 2021-02-24 Promon As Security virtual-machine software applications
CN113536328A (zh) * 2020-04-21 2021-10-22 中国移动通信集团重庆有限公司 链接库文件加密的方法、装置及计算设备
CN113204347B (zh) * 2021-04-02 2022-03-22 北京易捷思达科技发展有限公司 适用于软件包的处理方法、装置及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101158911A (zh) * 2007-11-22 2008-04-09 北京飞天诚信科技有限公司 .Net程序保护方法及装置
CN101300584A (zh) * 2005-08-06 2008-11-05 安全尺度有限公司 防止软件逆向工程、未经授权修改以及运行时数据截取的方法
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
CN103413075A (zh) * 2013-07-10 2013-11-27 北京深思数盾科技有限公司 一种通过虚拟机保护java可执行程序的方法及设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040158695A1 (en) * 1999-05-03 2004-08-12 Laurent Ugen Method and apparatus for handling transfer of guarded instructions in a computer system
US7124445B2 (en) * 2002-06-21 2006-10-17 Pace Anti-Piracy, Inc. Protecting software from unauthorized use by converting source code modules to byte codes
US8799879B2 (en) * 2009-06-30 2014-08-05 Oracle America, Inc. Method and apparatus for protecting translated code in a virtual machine

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101300584A (zh) * 2005-08-06 2008-11-05 安全尺度有限公司 防止软件逆向工程、未经授权修改以及运行时数据截取的方法
CN101158911A (zh) * 2007-11-22 2008-04-09 北京飞天诚信科技有限公司 .Net程序保护方法及装置
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
CN103413075A (zh) * 2013-07-10 2013-11-27 北京深思数盾科技有限公司 一种通过虚拟机保护java可执行程序的方法及设备

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107305498A (zh) * 2016-04-25 2017-10-31 深圳市深信服电子科技有限公司 应用安装方法、控制器及应用安装系统
CN107305498B (zh) * 2016-04-25 2020-12-01 深信服科技股份有限公司 应用安装方法、控制器及应用安装系统
CN108121565A (zh) * 2016-11-28 2018-06-05 阿里巴巴集团控股有限公司 生成指令集编码的方法、装置和系统
CN108932406A (zh) * 2017-05-18 2018-12-04 北京梆梆安全科技有限公司 虚拟化软件保护方法和装置
CN108932406B (zh) * 2017-05-18 2021-12-17 北京梆梆安全科技有限公司 虚拟化软件保护方法和装置
CN112214738A (zh) * 2020-10-20 2021-01-12 上海星融汽车科技有限公司 诊断设备反破解方法
CN112214738B (zh) * 2020-10-20 2024-02-13 上海星融汽车科技有限公司 诊断设备反破解方法

Also Published As

Publication number Publication date
US10380329B2 (en) 2019-08-13
US20170124306A1 (en) 2017-05-04

Similar Documents

Publication Publication Date Title
CN105279399A (zh) 应用防破解方法和装置
EP2962193B1 (en) Compiler based obfuscation
US10409966B2 (en) Optimizing and protecting software
KR101545272B1 (ko) 안드로이드에서의 dex파일 바이너리 난독화 방법
AU2013312865B2 (en) Generating native code from intermediate language code for an application
US20180260199A1 (en) Method and apparatus for intermediate representation of applications
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
US20140298318A1 (en) Computer-executable application packaging method, computer-executable device and storage media performing the same
US20160180065A1 (en) Apparatus for tamper protection of application code and method thereof
CN106415491B (zh) 一种应用保护方法、服务器以及终端
US20170286073A1 (en) Apparatus for providing framework to develop client application executed on multiple platforms, and method using the same
CN114547558B (zh) 授权方法、授权控制方法及装置、设备和介质
CN113568680B (zh) 应用程序的动态链接库保护方法、装置、设备及介质
CN106055375A (zh) 应用程序安装方法及装置
KR101734663B1 (ko) 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치
CN103051711B (zh) 基于spice协议的嵌入式云终端系统的构建方法
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN104850444A (zh) 软件安装包的分发方法及装置、软件安装方法及装置
CN107092472A (zh) 一种动态发布方法及设备
CN104657631A (zh) 应用的渠道信息的处理方法及装置
KR101863325B1 (ko) 역공학 방지 방법 및 장치
JP2018005915A (ja) アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム
CN107784204B (zh) 应用脱壳方法和装置
CN118036024A (zh) 一种基于国密ceph块存储的加密方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20160127