CN102831342A - 一种提高安卓系统中应用程序保护强度的方法 - Google Patents

一种提高安卓系统中应用程序保护强度的方法 Download PDF

Info

Publication number
CN102831342A
CN102831342A CN2012102635503A CN201210263550A CN102831342A CN 102831342 A CN102831342 A CN 102831342A CN 2012102635503 A CN2012102635503 A CN 2012102635503A CN 201210263550 A CN201210263550 A CN 201210263550A CN 102831342 A CN102831342 A CN 102831342A
Authority
CN
China
Prior art keywords
virtual machine
code instructions
secure virtual
application program
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.)
Granted
Application number
CN2012102635503A
Other languages
English (en)
Other versions
CN102831342B (zh
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 Senseshield Technology Co Ltd
Original Assignee
Beijing Senselock Software 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 Senselock Software Technology Co Ltd filed Critical Beijing Senselock Software Technology Co Ltd
Priority to CN201210263550.3A priority Critical patent/CN102831342B/zh
Publication of CN102831342A publication Critical patent/CN102831342A/zh
Application granted granted Critical
Publication of CN102831342B publication Critical patent/CN102831342B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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
    • 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
    • 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/2125Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation

Landscapes

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

Abstract

本发明公开了一种保护安卓系统应用程序的方法。通过使用本地调用接口和安全虚拟机,将安卓应用程序的关键代码无缝地移植到安全环境中运行,可以大大提高反编译和跟踪的难度,具有非常大的实用价值。

Description

一种提高安卓系统中应用程序保护强度的方法
技术领域
本发明涉及软件版权保护技术,特别涉及一种用于安卓系统的应用软件版权保护方法。
背景技术
Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。每一个Android(安卓系统)应用程序在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制、内存分配和管理等等都是依赖底层操作系统而实现的。所有Android应用程序的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。安卓(Android)系统使用Dalvik 虚拟机运行应用代码,这可以保证安卓应用在不同手机厂商硬件平台上的一致性,然而,由于Dalvik虚拟机属于开放源代码产品,虚拟机的实现代码是公开的,其指令集也属于典型的中间语言,因此基于Dalvik的应用程序可以很容易反编译为可读性非常好的源代码。即使是对逆向工程不太熟悉的黑客也能很轻易的研究和修改安卓应用程序,这对于应用软件的保护是非常不利的。
微软公司用于保护.NET平台产品的SLP(Software License and Protection)技术使用了一种基于虚拟机的软件保护方法。在普通的.NET平台IL中间语言的虚拟机之外,再提供一个称为安全虚拟机(Secure Virtual Machine)的新虚拟机,实施保护方案时,将受保护应用程序的部分指令通过置换算法转换为新虚拟机的指令,同时将原始应用程序中被转换的这部分指令替换为对新虚拟机的调用指令,由于所述安全虚拟机架构和指令集并不公开,由安全虚拟机指令逆向还原出源代码的难度大大增加,从而提高了安全强度。尽管安全虚拟机技术对于保护中间语言类型的应用软件具有非常显著的效果,但是SLP技术还存在着调用点易于被发现、通信过程易于被模拟等问题,当前这些问题是通过混淆器解决的,但是效果不佳。
除了上述问题之外,安卓系统的运行环境和微软公司的.NET平台还存在很多不同之处,因此对于安卓平台上的应用程序的保护而言,现在还并没有较为合适的保护方法。
发明内容
有鉴于此,本发明提供了一种保护安卓系统应用软件的方法,所述方法包括如下步骤:
创建安全虚拟机,所述安全虚拟机用于执行对应于所述应用程序中第一程序代码指令的第二程序代码指令;
创建由Dalvik虚拟机执行的第一程序代码指令与由所述安全虚拟机执行的所述第二程序代码指令的映射表;
根据所述映射表将所述应用程序中的所述第一程序代码指令转换为所述第二程序代码指令;
将所述第一程序代码指令从所述应用程序中删除,并将所述应用程序中调用所述已删除的所述第一程序代码指令的调用方式更改为本地调用方式;
创建本地调用接口;
当需要执行所述应用程序中第一程序代码指令时,Dalvik虚拟机执行所述本地调用接口;
所述本地调用接口调用所述安全虚拟机,由所述安全虚拟机执行所述第二程序代码指令。
根据本发明的一个方面,在所述安全虚拟机中执行所述应用程序中的部分功能代码,所述安全虚拟机具有安全保护功能。
根据本发明的一个方面,所述安全虚拟机具有花指令功能、或动态指令功能、或反跟踪功能之类的安全保护功能。
根据本发明的一个方面,在根据所述映射表将所述第一程序代码指令转换为所述第二程序代码指令的过程中,所述转换过程由指令自动转换单元根据映射表自动进行转换,或者手动转换。
根据本发明的一个方面,根据所述调用方式的类型,创建所述本地调用接口。
根据本发明的一个方面,提供一种提高安卓系统中应用程序保护强度的系统,所述系统包括:
用于创建安全虚拟机的装置,所述安全虚拟机用于执行对应于所述应用程序中第一程序代码指令的第二程序代码指令;
用于创建由Dalvik虚拟机执行的第一程序代码指令与由所述安全虚拟机执行的所述第二程序代码指令的映射表的装置;
用于根据所述映射表将所述应用程序中的所述第一程序代码指令转换为所述第二程序代码指令的装置;
用于将所述第一程序代码指令从所述应用程序中删除,并将所述应用程序中调用所述已删除的所述第一程序代码指令的调用方式更改为本地调用方式的装置;
用于创建本地调用接口的装置;
用于当需要执行所述应用程序中第一程序代码指令时,Dalvik虚拟机执行所述本地调用接口的装置;
用于所述本地调用接口调用所述安全虚拟机,由所述安全虚拟机执行所述第二程序代码指令的装置。
由于被转换的代码运行在安全虚拟机中,在不了解安全虚拟机架构的情况下,黑客不可能反编译出完整的受保护软件源代码,破解软件的成本就包括了对安全虚拟机分析的时间成本,显然,这样就提高了受保护软件的安全性。
附图说明
图1是根据本发明一个实施例的结构框图;
图2是根据本发明一个实施例的流程处理图。
具体实施方式
本发明使用安全虚拟机实现对应用软件的保护,包括本地(Native)调用接口单元和安全虚拟机单元。
其中,安全虚拟机单元用于安全运行受保护软件的部分代码。本地调用接口单元用于完成受保护软件和安全虚拟机之间的相互调用。
在本发明范围内,本地调用指的是虚拟机中间语言直接调用由本地硬件指令编写的方法,JNI(Java Native Interface)是安卓系统使用的本地调用规范。JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍使用其他语言,只要调用约定受支持即可。JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。
如图1所示,受保护软件的指令运行在Dalvik虚拟机中,而受保护软件中部分需要保护的功能代码则需要运行在安全虚拟机中。当受保护软件需要调用受保护的那些功能代码时,在Dalvik虚拟机中运行的受保护软件通过本地接口调用单元,访问在安全虚拟机单元中运行的受保护的部分功能代码,从而实现受保护软件和安全虚拟机之间的相互访问。具体的处理过程如下:
步骤100,生成安全虚拟机,并生成Dalvik指令和安全虚拟机指令的映射表。根据本发明的一个具体实施方式,在应用程序中,安卓系统所运行的设备的内存中均可生成安全虚拟机,安全虚拟机也可以是一个单独运行的独立底层虚拟机。安全虚拟机可以通过自行编码实现,也可以通过工具生成。安全虚拟机的功能是:所述安全虚拟机本身除了基本的执行指令功能之外,还具有诸多安全功能,例如花指令、动态指令,反跟踪等功能,通过提供的这些功能可以进一步提高安全虚拟机的分析难度。
Dalvik指令有很多,例如:0e 00,0f 01,11 01,00 10x,01 12x等,根据Dalvik指令通过置换算法或其他方式生成对应的安全虚拟机指令。安全虚拟机指令与Dalvik指令有简单的对应关系,可以是一对一,也可以是一对多的关系。
其中,根据本发明的一个具体实施方式,安全虚拟机SVM的指令与Dalvik 虚拟机的指令之间的简单映射关系可以是一一对应,也可以是多个安全虚拟机SVM的指令对应一个Dalvik 虚拟机的指令。当一一对应时,表示安全虚拟机中有对应的单独指令与Dalvik指令对应,只是编码不同,可实现相同的功能或表示为同一意思。一对多时,表示Dalvik的一个指令在安全虚拟机中没有直接单独对应的能实现相同功能的指令,需要多个指令共同使用来实现相同的功能。
映射表的内容就是Dalvik指令与安全虚拟机指令的对应关系表,数据结构可自行定义。例如:Dalvik指令0e 00表示0e 00 => return-void  Java中的return,固定不变数据0,假如转换为安全虚拟机指令的规则方式为将Dalvik指令前置加0或0x,据此Dalvik指令0e 00转换为00e 00或0x0e 00,00e 00或0x0e 00所表示的意思与Dalvik指令0e 00意义相同,0e 00与00e 00或0x0e 00即为简单的对应关系,将Dalvik指令逐个依照此种转换规则进行转换,最后生成的安全虚拟机指令与Dalivk指令的对应关系列表即为映射表。
上述举例为一对一的关系,即表示Dalvik指令与安全虚拟机对应的转换指令只是编码不同,但是可以实现相同的功能。根据本发明的一个具体实施方式,一对多的关系,表示Dalvik的一条指令在安全虚拟机中没有直接对应的功能,需要多条指令共同使用或经过组合以实现Dalvik中该指令相同的功能。
所述安全虚拟机本身除了基本的执行指令功能之外,还具有诸多安全功能,例如花指令、动态指令,反跟踪等功能,进一步提高安全虚拟机的分析难度。
花指令是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容。经典的花指令是一些跳转指令,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可能利用各种指令:jmp, call, ret的一些堆栈技巧,位置运算,等等。也就是说,花指令可理解为乱指令,混淆代码,通过在程序中增加一些无用的杂乱内容、或进行一些跳转或对代码进行混淆,使用名称替换、字符串加密、流程混淆、语法混淆或增加无用代码等手段使得最初代码面目全非,但并不影响程序的正常运行,通过这些方式迷惑反汇编软件以打乱其分析软件指令的目的,增加反编译破解的难度。
动态指令是指有一部分代码是在程序运行中动态生成的。
反跟踪则为在代码中加入会监测是否有调试器调试的相关代码,在运行应用程序时,代码中的反调试代码会监测是否存在调试器,如果有停止解密和加载运行过程。
安全虚拟机的指令集和实现方式可以每个软件开发者不同,也可以每个应用软件都不同,甚至可以每次实施保护方案都不同,这可以进一步提高安全虚拟机的分析难度。由于生成安全虚拟机的过程并非本发明的发明重点,而且安全虚拟机实现方式可通过自行编码实现,因此仅举出简单实例来说明。
根据本发明的一个具体实施方式,通过代码来创建安全虚拟机,例如可以每个软件开发者不同,当为开发者A时,假设Dalvik指令转换为安全虚拟机指令的规则为前置补0a,Dalvik指令0e据此转换为安全虚拟机指令则为0a0e,0a0e指令与Dalvik指令0e表述为相同的功能。当为开发者B时,假设Dalvik指令转换为安全虚拟机指令规则为将Dalvik指令后置加00, 0e 转换后则为 0e00,Dalvik指令依照此种规则变换生成安全虚拟机指令集。很明显,这种规则是可自行定义。因此,下文不再赘述这部分内容。
步骤101,根据映射表将受保护软件中要保护的方法对应指令转换为安全虚拟机的指令。
映射表即为Dalvik指令与安全虚拟机指令的对应关系表,对Dalvik的每一条指令,通过置换算法或自定义的一些算法来转换为一个特定的指令,该指令和Dalvik指令有对应关系。
根据本发明的一个具体实施方式,例如Dalvik中的0e 00指令,表示0e 00=>reurn void Java中的return,固定不变数据0。通过特殊方式转换为一个指令0a0e 00(此处只是示意,实际指令并非一定如此,转换方式简单的可例如将指令前置加0a等方式),则Dalvik指令0e 00对应的安全虚拟机指令即为0a0e 00,0a0e 00表示与Dalvik指令0e 00功能相同,将Dalvik中每个指令通过上述方式进行转换后生成的指令即为对应的安全虚拟机指令,这种对应关系列表表就是映射表。将Dalvik指令转换为安全虚拟机指令可自行定义转换方法。
转换过程可以由既可以采用自动转换工具根据映射表(根据Dalvik的指令到映射表中查找对应的安全虚拟机指令)自动进行,也可以由编程人员转换。
步骤102,将要保护的方法(例如,受保护应用程序中的部分源代码或者功能模块)的指令从受保护应用程序的源代码中删除,并标记对应方法为本地(Native)方法。
步骤103,根据受保护的方法类型,按照本地调用规范,生成本地调用接口。根据本发明的一个具体实施方式,方法类型包括:普通方法和本地方法。而本地调用接口就是JNI(Java Native Interface),采用的是安卓系统的本地调用规范。生成接口的过程是在生成JNI的步骤中实现的,也就是JNI中生成供别的程序调用的接口。根据本发明的一个具体实施方式,具体为在生成JNI的过程中用c/c++实现.h头文件中声明的函数,接口名称格式为JAVA_再加上Java程序的package路径再加上函数名组成。
步骤104,运行受保护软件,当需要执行被转换的受保护代码时,由于对应方法已经标记为本地方法,Dalvik虚拟机将执行本地调用接口库中的对应调用接口,此对应调用接口调用安全虚拟机,执行转换过的安全虚拟机指令。
步骤105,转换到安全虚拟机中指令需要调用受保护软件中其他方法时,通过和步骤103和步骤104相同的本地调用方法完成。
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本实施例以一个简单的安卓程序为例,说明本发明的一种实现方式。
首先,生成安全虚拟机SVM。
在本实施例中,使用Dalvik虚拟机的复制版本作为安全虚拟机(SVM)。其具体实现方式是,仅仅将所有的单字节Dalvik前置填充0,扩展为32位长。根据本发明的一个具体实施方式,Dalvik指令转换为安全虚拟机指令的具体转换方式为:将单字节Dalvik指令前置填充0,扩展为32位长度,扩展后的指令即为安全虚拟机指令,将Dalvik每个指令据此转换方式进行转换生成对应的安全虚拟机指令。据此,Dalvik指令与安全虚拟机指令会有对应关系。
然后,将这些对应关系存储至文件或表中,这也就生成了映射表,映射表中存储的即为Dalvik指令与安全虚拟机指令的映射关系。
其中,安全虚拟机SVM的调用接口为SVMRun。根据本发明的一个具体实施方式,将要保护的方法对应的指令在映射表中找到对应的Dalvik指令项,然后找到映射表中该Dalvik指令项对应的安全虚拟机的指令项,将找到的安全虚拟机的指令项替换至要保护的方法的对应指令代码处,其他指令代码以此类推,直到将其他指令代码按此方式全部转换完成为止。
根据本发明的一个实施例,需要保护的应用程序为HelloJni.java,其用于在一个TextView中显示字符串“Hello World”。为了便于理解,下面列出其主要代码:
public class HelloJni extends Ativity
{
Override
public void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  TextView tv = new TextView(this)
  tv.setText( stringFromJNI() );
  setContentView(tv);
}
public String stringFromJNI()
{
  return "Hello World";
}
}
受保护软件为一个用于显示“Hello World”的Java应用程序,其名称为HelloJni.java。受保护软件中的部分代码是需要保护的功能代码。在该实施例中,需要保护该HelloJni.java中的方法stringFromJNI()。那么在受保护程序的源程序中去掉此方法的代码,并标记为本地调用,使得保护后的HelloJni.Java代码如下:
public class HelloJni extends Ativity
{
Override
public void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  TextView tv = new TextView(this)
  tv.setText( stringFromJNI() );
  setContentView(tv);
}
public natvie String stringFromJNI();
}
即,将stringFromJNI()标识更改为Native,使之成为本地方法。
由于安全虚拟机SVM的指令与Dalvik 虚拟机的指令存在简单的映射关系,因此将原始程序中return "Hello World";对应的指令系列全部扩展为32位即可在安全虚拟机SVM中运行。
根据本发明的一个具体实施方式,将原始程序中return "Hello World";对应的指令系列全部扩展为32位的转换过程如下:仅仅将所有的单字节Dalvik指令前置填充0,扩展为32位长(填充扩展的过程即为转换为安全虚拟机的过程),即可作为安全虚拟机指令运行。
将受保护软件中的部分功能代码经过上述转换,转换为在安全虚拟机单元中的受保护的部分功能代码,待由安全虚拟机执行。
根据一个实施例,根据JNI规范,生成本地调用库HelloJni.DLL。该接口库通过编写程序生成,其示例性的源代码如下(C语言),其中的接口名称为Java_com_example_hellojni_HelloJni_stringFromJNI:
jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz)
{
return SVMRun("stringFromJNI", env, thiz);
}
调用该接口库的作用是返回由已生成的SVMRun调用接口所返回的stringFromJNI()。其中接口库是指调用图1中的本地调用接口单元,“JNIEnv* env,jobject thiz”中jobject thiz 指的是使用这个函数的JAVA对象,JNIEnv* env表示 JNIEnv指针是JVM创建的,用于Native的c/c++方法操纵Java执行栈中的数据,比如Java类,Java方法等。
运行修改后的HelloJni.Java,当调用stringFromJNI方法时,根据JNI调用规范,Dalvik虚拟机自动调用本地调用接口单元HelloJni.DLL中的接口Java_com_example_hellojni_HelloJni_stringFromJNI,再由本地调用接口单元调用安全虚拟机(SVM),从而实现了对被转换的方法的调用。
从本实施例可见,本方法仅需将要保护的方法标记为Native即可,非常简单,方便。同时,由于在软件中不存在对安全虚拟机SVM的直接调用指令,整个保护方案的安全强度也得到了比较大的提升,具有非常大的实用价值。
上述仅就一个简单实例进行了描述。很明显,本领域的其它应用程序也可以按照本发明所公开的技术思想进行指令的转换,并通过调用本地调用接口来实现安全的调用,从而达到高强度保护的目的。至于其它类似的实例,本发明就不再一一详细描述。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种提高安卓系统中应用程序保护强度的方法,其特征在于,所述方法包括如下步骤:
创建安全虚拟机,所述安全虚拟机用于执行对应于所述应用程序中第一程序代码指令的第二程序代码指令;
创建由Dalvik虚拟机执行的第一程序代码指令与由所述安全虚拟机执行的所述第二程序代码指令的映射表;
根据所述映射表将所述应用程序中的所述第一程序代码指令转换为所述第二程序代码指令;
将所述第一程序代码指令从所述应用程序中删除,并将所述应用程序中调用所述已删除的第一程序代码指令的调用方式更改为本地调用方式;
创建本地调用接口;
当需要执行所述应用程序中第一程序代码指令时,所述Dalvik虚拟机执行所述本地调用接口;
所述本地调用接口调用所述安全虚拟机,由所述安全虚拟机执行所述第二程序代码指令。
2.如权利要求1所述的方法,其特征在于,在所述安全虚拟机中执行所述应用程序中的部分功能代码,所述安全虚拟机具有安全保护功能。
3.如权利要求2所述的方法,其特征在于,所述安全虚拟机具有花指令功能、或动态指令功能、或反跟踪功能之类的安全保护功能。
4.如权利要求1、2所述的方法,其特征在于,在根据所述映射表将所述第一程序代码指令转换为所述第二程序代码指令的过程中,所述转换过程由指令自动转换单元根据所述映射表自动进行转换,或者手动转换。
5.如权利要求1-4所述的方法,其特征在于,根据所述调用方式的类型,创建所述本地调用接口。
6.一种提高安卓系统中应用程序保护强度的系统,其特征在于,所述系统包括:
用于创建安全虚拟机的装置,所述安全虚拟机用于执行对应于所述应用程序中第一程序代码指令的第二程序代码指令;
用于创建由Dalvik虚拟机执行的第一程序代码指令与由所述安全虚拟机执行的所述第二程序代码指令的映射表的装置;
用于根据所述映射表将所述应用程序中的所述第一程序代码指令转换为所述第二程序代码指令的装置;
用于将所述第一程序代码指令从所述应用程序中删除,并将所述应用程序中调用所述已删除的所述第一程序代码指令的调用方式更改为本地调用方式的装置;
用于创建本地调用接口的装置;
用于当需要执行所述应用程序中第一程序代码指令时,所述Dalvik虚拟机执行所述本地调用接口的装置;
用于所述本地调用接口调用所述安全虚拟机,由所述安全虚拟机执行所述第二程序代码指令的装置。
7.如权利要求6所述的系统,其特征在于,在所述安全虚拟机中执行所述应用程序中的部分功能代码,所述安全虚拟机具有安全保护功能。
8. 如权利要求7所述的系统,其特征在于,所述安全虚拟机具有花指令功能、或动态指令功能、或反跟踪功能之类的安全保护功能。
9.如权利要求7、8所述的系统,其特征在于,在根据所述映射表将所述第一程序代码指令转换为所述第二程序代码指令的过程中,所述转换过程由指令自动转换单元根据所述映射表自动进行转换,或者手动转换。
10.如权利要求6-9所述的系统,其特征在于,根据所述调用方式的类型,创建所述本地调用接口。
CN201210263550.3A 2012-07-28 2012-07-28 一种提高安卓系统中应用程序保护强度的方法 Active CN102831342B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210263550.3A CN102831342B (zh) 2012-07-28 2012-07-28 一种提高安卓系统中应用程序保护强度的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210263550.3A CN102831342B (zh) 2012-07-28 2012-07-28 一种提高安卓系统中应用程序保护强度的方法

Publications (2)

Publication Number Publication Date
CN102831342A true CN102831342A (zh) 2012-12-19
CN102831342B CN102831342B (zh) 2016-01-06

Family

ID=47334475

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210263550.3A Active CN102831342B (zh) 2012-07-28 2012-07-28 一种提高安卓系统中应用程序保护强度的方法

Country Status (1)

Country Link
CN (1) CN102831342B (zh)

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103324872A (zh) * 2013-07-12 2013-09-25 上海交通大学 基于指令混淆的Android应用程序保护方法及系统
CN103413075A (zh) * 2013-07-10 2013-11-27 北京深思数盾科技有限公司 一种通过虚拟机保护java可执行程序的方法及设备
CN103544414A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种Android系统应用的深度代码混淆方法
CN103544415A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动平台应用软件的加固方法
CN103593185A (zh) * 2013-11-04 2014-02-19 浙江大学 基于单Linux内核的多Android系统共享输入显示设备的方法
WO2014142430A1 (ko) * 2013-03-15 2014-09-18 주식회사 에스이웍스 안드로이드에서의 dex파일 바이너리 난독화 방법
CN104102860A (zh) * 2014-08-11 2014-10-15 北京奇虎科技有限公司 安卓平台应用程序的保护方法、运行方法、装置及系统
CN104573424A (zh) * 2013-10-23 2015-04-29 中国银联股份有限公司 一种应用程序保护系统和方法
CN104615933A (zh) * 2015-01-27 2015-05-13 北京奇虎科技有限公司 防软件反编译的方法、防反编译软件启动的方法和装置
CN104834838A (zh) * 2015-04-29 2015-08-12 福建天晴数码有限公司 防止dex文件从内存中转存的方法及装置
CN105279399A (zh) * 2015-10-30 2016-01-27 百度在线网络技术(北京)有限公司 应用防破解方法和装置
CN105678120A (zh) * 2014-11-20 2016-06-15 中国移动通信集团公司 一种应用程序安全防护方法和服务器
CN105868589A (zh) * 2016-03-30 2016-08-17 网易(杭州)网络有限公司 一种脚本加密方法、脚本运行方法及装置
CN105975816A (zh) * 2015-12-25 2016-09-28 武汉安天信息技术有限责任公司 移动终端下基于虚拟技术的代码保护方法及系统
WO2017107706A1 (zh) * 2015-12-25 2017-06-29 北京奇虎科技有限公司 基于arm指令虚拟化的elf文件保护方法及系统
CN106933610A (zh) * 2015-12-30 2017-07-07 北京金山安全软件有限公司 一种应用程序安装包生成方法、装置及电子设备
CN106951745A (zh) * 2017-03-31 2017-07-14 北京深思数盾科技股份有限公司 一种指令重组方法和装置
CN107292131A (zh) * 2017-06-21 2017-10-24 北京深思数盾科技股份有限公司 软件保护方法和装置
CN108304158A (zh) * 2016-08-24 2018-07-20 北京花甲科技有限公司 一种动态库的代理方法及设备
CN108875321A (zh) * 2017-05-09 2018-11-23 中移(杭州)信息技术有限公司 一种指令集的生成方法、装置和电子设备
CN109918872A (zh) * 2019-01-28 2019-06-21 中国科学院数据与通信保护研究教育中心 Android应用加固方法
CN110619196A (zh) * 2019-09-19 2019-12-27 北京丁牛科技有限公司 一种基于脚本语言的项目代码保护方法及装置
US11263311B2 (en) 2019-02-15 2022-03-01 Promon As Securing virtual-machine software applications

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050257243A1 (en) * 2004-04-27 2005-11-17 Microsoft Corporation Method and system for enforcing a security policy via a security virtual machine
CN101038611A (zh) * 2006-03-14 2007-09-19 北京深思洛克数据保护中心 一种软件保护的方法
CN101216775A (zh) * 2008-01-03 2008-07-09 北京深思洛克数据保护中心 一种软件程序的保护方法、装置及系统
CN101231597A (zh) * 2008-02-01 2008-07-30 东信和平智能卡股份有限公司 智能卡中java程序指令的执行方法
CN102214281A (zh) * 2011-04-27 2011-10-12 北京深思洛克软件技术股份有限公司 一种软件保护方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050257243A1 (en) * 2004-04-27 2005-11-17 Microsoft Corporation Method and system for enforcing a security policy via a security virtual machine
CN101038611A (zh) * 2006-03-14 2007-09-19 北京深思洛克数据保护中心 一种软件保护的方法
CN101216775A (zh) * 2008-01-03 2008-07-09 北京深思洛克数据保护中心 一种软件程序的保护方法、装置及系统
CN101231597A (zh) * 2008-02-01 2008-07-30 东信和平智能卡股份有限公司 智能卡中java程序指令的执行方法
CN102214281A (zh) * 2011-04-27 2011-10-12 北京深思洛克软件技术股份有限公司 一种软件保护方法和装置

Cited By (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014142430A1 (ko) * 2013-03-15 2014-09-18 주식회사 에스이웍스 안드로이드에서의 dex파일 바이너리 난독화 방법
CN103413075A (zh) * 2013-07-10 2013-11-27 北京深思数盾科技有限公司 一种通过虚拟机保护java可执行程序的方法及设备
CN103413075B (zh) * 2013-07-10 2016-05-04 北京深思数盾科技股份有限公司 一种通过虚拟机保护java可执行程序的方法及设备
CN103324872A (zh) * 2013-07-12 2013-09-25 上海交通大学 基于指令混淆的Android应用程序保护方法及系统
CN104573424A (zh) * 2013-10-23 2015-04-29 中国银联股份有限公司 一种应用程序保护系统和方法
WO2015058639A1 (zh) * 2013-10-23 2015-04-30 中国银联股份有限公司 一种应用程序保护系统和方法
CN103544415A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动平台应用软件的加固方法
CN103544415B (zh) * 2013-10-25 2015-08-12 江苏通付盾信息科技有限公司 一种移动平台应用软件的加固方法
CN103544414B (zh) * 2013-10-25 2015-08-19 江苏通付盾信息科技有限公司 一种Android系统应用的深度代码混淆方法
CN103544414A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种Android系统应用的深度代码混淆方法
CN103593185A (zh) * 2013-11-04 2014-02-19 浙江大学 基于单Linux内核的多Android系统共享输入显示设备的方法
CN103593185B (zh) * 2013-11-04 2017-01-04 浙江大学 基于单Linux内核的多Android系统共享输入显示设备的方法
CN104102860A (zh) * 2014-08-11 2014-10-15 北京奇虎科技有限公司 安卓平台应用程序的保护方法、运行方法、装置及系统
CN105678120A (zh) * 2014-11-20 2016-06-15 中国移动通信集团公司 一种应用程序安全防护方法和服务器
CN105678120B (zh) * 2014-11-20 2019-06-07 中国移动通信集团公司 一种应用程序安全防护方法和服务器
CN104615933A (zh) * 2015-01-27 2015-05-13 北京奇虎科技有限公司 防软件反编译的方法、防反编译软件启动的方法和装置
CN104615933B (zh) * 2015-01-27 2018-08-17 北京奇虎科技有限公司 防软件反编译的方法、防反编译软件启动的方法和装置
CN104834838B (zh) * 2015-04-29 2017-11-24 福建天晴数码有限公司 防止dex文件从内存中转存的方法及装置
CN104834838A (zh) * 2015-04-29 2015-08-12 福建天晴数码有限公司 防止dex文件从内存中转存的方法及装置
US10380329B2 (en) 2015-10-30 2019-08-13 Baidu Online Network Technology (Beijing) Co., Ltd. Method and apparatus for preventing application from being deciphered
US20170124306A1 (en) * 2015-10-30 2017-05-04 Baidu Online Network Technology (Beijing) Co., Ltd. Method and apparatus for preventing application from being deciphered
CN105279399A (zh) * 2015-10-30 2016-01-27 百度在线网络技术(北京)有限公司 应用防破解方法和装置
CN105975816A (zh) * 2015-12-25 2016-09-28 武汉安天信息技术有限责任公司 移动终端下基于虚拟技术的代码保护方法及系统
WO2017107706A1 (zh) * 2015-12-25 2017-06-29 北京奇虎科技有限公司 基于arm指令虚拟化的elf文件保护方法及系统
CN105975816B (zh) * 2015-12-25 2019-06-07 武汉安天信息技术有限责任公司 移动终端下基于虚拟技术的代码保护方法及系统
CN106933610A (zh) * 2015-12-30 2017-07-07 北京金山安全软件有限公司 一种应用程序安装包生成方法、装置及电子设备
CN105868589A (zh) * 2016-03-30 2016-08-17 网易(杭州)网络有限公司 一种脚本加密方法、脚本运行方法及装置
CN108304158A (zh) * 2016-08-24 2018-07-20 北京花甲科技有限公司 一种动态库的代理方法及设备
CN108304158B (zh) * 2016-08-24 2021-12-10 北京顶象技术有限公司 一种动态库的代理方法及设备
CN106951745A (zh) * 2017-03-31 2017-07-14 北京深思数盾科技股份有限公司 一种指令重组方法和装置
CN106951745B (zh) * 2017-03-31 2019-10-18 北京深思数盾科技股份有限公司 一种指令重组方法和装置
CN108875321A (zh) * 2017-05-09 2018-11-23 中移(杭州)信息技术有限公司 一种指令集的生成方法、装置和电子设备
CN107292131A (zh) * 2017-06-21 2017-10-24 北京深思数盾科技股份有限公司 软件保护方法和装置
CN109918872A (zh) * 2019-01-28 2019-06-21 中国科学院数据与通信保护研究教育中心 Android应用加固方法
US11263311B2 (en) 2019-02-15 2022-03-01 Promon As Securing virtual-machine software applications
CN110619196A (zh) * 2019-09-19 2019-12-27 北京丁牛科技有限公司 一种基于脚本语言的项目代码保护方法及装置

Also Published As

Publication number Publication date
CN102831342B (zh) 2016-01-06

Similar Documents

Publication Publication Date Title
CN102831342A (zh) 一种提高安卓系统中应用程序保护强度的方法
CN102043932B (zh) 一种防止Java程序被反编译的方法
US11354144B2 (en) Java native interface and windows universal app hooking
KR101328012B1 (ko) 애플리케이션 코드 난독화 장치 및 그 방법
CN108932406B (zh) 虚拟化软件保护方法和装置
KR101490047B1 (ko) 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
CN103413075B (zh) 一种通过虚拟机保护java可执行程序的方法及设备
EP2691905B1 (en) Method of securing non-native code
US8090959B2 (en) Method and apparatus for protecting .net programs
CN105683990B (zh) 用于保护动态库的方法和装置
US9443064B2 (en) Protecting method and system of java source code
CN103914637B (zh) 一种安卓平台的可执行程序加密方法
KR20130018642A (ko) 적대적 실행 환경 내에서 정적 및 동적 공격들에 대하여 자바 바이트코드 코드를 보호하는 시스템 및 방법
CN105404794B (zh) Java应用软件的保护方法和装置
CN105022936A (zh) 一种类class文件加密解密方法和装置
WO2016033966A1 (zh) 应用数据的保护方法及装置
CN105303072A (zh) 基于art模式的软件加固方法及装置
CN105653260A (zh) 一种支持多cpu架构的应用软件开发及运行服务系统
CN103413074A (zh) 一种通过api实现软件保护的方法和装置
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN106557350B (zh) 应用程序安装包中java字节码转换方法、装置及设备
CN108170433A (zh) 一种Java代码的混淆方法、恢复方法及其装置
KR20130020135A (ko) 통합 개발 환경에서의 코드 동시 개발자 리스트 제공 시스템 및 방법
CN104751026B (zh) 安卓系统的软件保护方法、软件应用方法及相关装置
CN105242978A (zh) 多线程条件下cpu高速缓存行失效的处理方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: BEIJING SHENSI SHUDUN SCIENCE + TECHNOLOGY CO., LT

Free format text: FORMER OWNER: BEIJING SENSELOCK SOFTWARE TECHNOLOGY CO., LTD.

Effective date: 20150722

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150722

Address after: 100872 Zhongguancun street, Haidian District, a cultural building, No. 1706, No. 59, No.

Applicant after: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

Address before: 100086 Beijing City, Haidian District Zhongguancun South Street No. 6 Zhucheng building B block 1201

Applicant before: Beijing Senselock Software Technology Co.,Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP03 Change of name, title or address

Address after: 100193 Beijing, Haidian District, East West Road, No. 10, East Hospital, building No. 5, floor 5, layer 510

Patentee after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 Zhongguancun street, Haidian District, a cultural building, No. 1706, No. 59, No.

Patentee before: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee after: Beijing Shendun Technology Co.,Ltd.

Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.