CN104866734A - 一种dex文件的保护方法及装置 - Google Patents
一种dex文件的保护方法及装置 Download PDFInfo
- Publication number
- CN104866734A CN104866734A CN201410064826.4A CN201410064826A CN104866734A CN 104866734 A CN104866734 A CN 104866734A CN 201410064826 A CN201410064826 A CN 201410064826A CN 104866734 A CN104866734 A CN 104866734A
- Authority
- CN
- China
- Prior art keywords
- file
- instruction
- smali
- code
- protected
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种DEX文件的保护方法及装置,涉及数据安全技术领域,能够对DEX文件的相关指令进行隐藏处理,从而提高程序代码的安全性。该方法主要包括:将待保护的DEX文件进行反汇编处理,得到smali文件;将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件;将所述受保护的smali文件进行汇编处理,得到受保护的DEX文件,所述汇编处理与所述反汇编对应。本发明主要用于对DEX文件进行保护的过程中。
Description
技术领域
本发明涉及数据安全技术领域,具体涉及Android应用程序的保护领域,尤其涉及一种DEX文件的保护方法及装置。
背景技术
Android系统由Google公司和开放手机联盟领导及开发,是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑等。当在Android系统中安装应用程序时,可以通过将Android安装包(AndroidPackage,简称APK)文件直接传送到Android模拟器或Android手机中执行即可实现安装,每个APK文件都包括有DEX文件(Dalvik VM executes),即AndroidDalvik执行程序。由于Android的开源特性,DEX文件很容易被逆向分析和破解得到中间文件(如smali文件)或源文件,严重影响了Android应用程序的保护。
现有技术中主要使用源码级别的代码混淆方法,来实现加强Android应用程序安全性的目的,也就是在生成应用程序安装包的过程中,调用Android官方提供的混淆工具,从源码中获取混淆元素并且针对其进行混淆处理,生成最终的DEX文件。这种以源码为输入的混淆方法,主要针对Android程序中出现的包名、类名、方法名三方面进行处理。例如:
原始包名:com.example.hellojni
混淆后包名:com.a.b
在执行上述DEX文件的保护方法时,发明人发现现有技术中至少存在如下问题:虽然通过混淆android程序中的包名、类名、方法名可以在一定程度上增加阅读难度,但是混淆后的指令仍然能具有较强的可读性,逆向破解者仅需要对DEX文件做静态分析,便可以获取代码的实现逻辑和创意思路,无法实现对DEX文件的有效保护。
发明内容
有鉴于此,本发明实施例提供一种DEX文件的保护方法及装置,来解决以上背景技术部分提到的技术问题。
一方面,本发明实施例提供了一种DEX文件的保护方法,该方法包括:
将待保护的DEX文件进行反汇编处理,得到smali文件;
将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件;
将所述受保护的smali文件进行汇编处理,得到受保护的DEX文件,所述汇编处理与所述反汇编对应。
另一方面,本发明实施例还提供了一种DEX文件的保护装置,该装置包括:
反汇编模块,用于将待保护的DEX文件进行反汇编处理,得到smali文件;
隐藏模块,用于将所述反汇编模块得到的smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件;
汇编模块,用于将所述隐藏模块得到的所述受保护的smali文件进行汇编处理,得到受保护的DEX文件,所述汇编处理与所述反汇编对应。
本发明实施例提出的一种DEX文件的保护方法及装置,通过将DEX文件反汇编得到中间文件即smali文件,然后将smali文件中待保护的指令进行隐藏处理,并经汇编后得到受保护的DEX文件,使得所述受保护的DEX文件内容变得难以识别,从而极大地增加了APK程序逻辑的分析时间成本以及分析难度,进一步提高了程序代码的安全性,有效地满足了Android应用程序对抗静态以及动态逆向破解的需求。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明具体实施例提供的一种DEX文件的保护方法流程图;
图2是本发明具体实施例提供的一种将smali文件中待保护的指令进行代码乱序处理的方法流程图;
图3是本发明具体实施例提供的一种将乱序节点间顺序打乱的方法流程图;
图4是本发明具体实施例提供的一种将smali文件中待保护的指令进行指令虚拟处理的方法流程图;
图5是本发明具体实施例提供的一种将smali文件中待保护的指令进行代码抽取处理的方法流程图;
图6是本发明具体实施例提供的一种DEX文件的保护装置组成框图;
图7是本发明具体实施例提供的另一种DEX文件的保护装置组成框图;
图8是本发明具体实施例提供的一种代码乱序子模块的组成框图;
图9是本发明具体实施例提供的另一种代码乱序子模块的组成框图;
图10是本发明具体实施例提供的又一种代码乱序子模块的组成框图;
图11是本发明具体实施例提供的一种指令虚拟子模块的组成框图;
图12是本发明具体实施例提供的一种代码抽取子模块的组成框图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
本发明的具体实施方式提供了一种DEX文件的保护方法,如图1所示,该方法包括:
101、将待保护的DEX文件进行反汇编处理,得到smali文件。
其中,所述将待保护的DEX文件进行反汇编处理可以使用已知的第三方反汇编工具(例如Baksmali反汇编器),将所述待保护的DEX文件进行反汇编操作,从而在反编译工程目录下生成一个smali文件夹,里面存放着所有反编译出的smali文件,这些文件会根据程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的smali文件。
102、将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件。
其中,所述smali文件的语法是一种宽松式的Jasmin/dedexer语法,而且它实现了DEX文件的所有功能,并且包括调试信息以及线路信息等。将所述smali文件中待保护的指令进行隐藏处理,是指可以通过在所述smali文件比较重要的代码(如实现关键功能的方法指令)中添加垃圾代码或使用别名等的方式,实现对所述smali文件的保护,使得相关指令不会被逆向破解者轻易获取,从而得到受保护的smali文件。
103、将所述受保护的smali文件进行汇编处理,得到受保护的DEX文件,所述汇编处理与所述反汇编对应。
其中,所述将受保护的smali文件进行汇编处理同样可以使用已知的第三方汇编工具(例如Smali汇编器),将所述受保护的smali文件进行汇编操作,从而得到受保护的DEX文件。其中,所述汇编工具与所述反汇编工具应该是相互匹配的,如Smali和Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种DEX格式文件的汇编器和反汇编器。
本发明实施例提出的DEX文件的保护方法,通过将DEX文件反汇编得到中间文件,然后将中间文件的相关指令进行隐藏处理,可以将相关指令保护起来,得到受保护的DEX文件,增加了程序逻辑的分析时间成本以及分析难度,提高了程序代码的安全性。
进一步地,在将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件时,可以通过但不局限于以下的方法实现,该方法包括:
将所述smali文件中待保护的指令进行代码乱序处理,得到受保护的smali文件,其中,所述代码乱序处理可以将原始程序的执行流程进行乱序排列;
或将所述smali文件中待保护的指令进行指令虚拟处理,得到受保护的smali文件,其中,所述指令虚拟处理可以将关键指令的功能提取到二进制文件中执行;
或将所述smali文件中待保护的指令进行代码抽取处理,得到受保护的smali文件,其中,所述代码抽取处理可以将代码进行分层存储。
进一步地,本发明具体实施例提供了一种将smali文件中待保护的指令进行代码乱序处理的具体方法,如图2所示,该方法包括:
201、获取所述smali文件的文件头、非方法块和方法块。
具体地,在获取所述smali文件的文件头、非方法块和方法块时,可以通过直接遍历所述smali文件并根据所述smali文件的语法格式,获得文件头、非方法块和方法块。也可以首先将所述smali文件按行存储到一个空链表中,在这个过程中可以剔除所述smali文件中的空白行和注释行等无用信息;然后遍历这个链表,从而获取所述smali文件的文件头、非方法块和方法块。其中所述文件头包括当前类名、继承类名和源文件名等信息,非方法块包括一些描述性信息,而方法块包括实现代码功能的具体操作指令。
202、将所述方法块的指令分储到空链表的节点中。
具体地,在将所述方法块的指令存储到空链表的节点中时,可以将所述方法块中所包含的指令分开存储到一个空链表的节点中,每个节点内包括一条或多条所述指令。
203、将乱序信息写入所述节点中,得到乱序节点。
其中,所述乱序信息主要包括垃圾指令和跳转标签,所述跳转标签可以将所述垃圾指令与节点中的原始指令分隔开来,并且所述跳转标签还可以指定原始指令的执行顺序。以C语言为例,一个乱序节点的格式可以如下:
:labelx
原始指令
goto:labely
垃圾指令
其中,label代表所述跳转标签,labelx用于标记当前的原始指令,goto:labely用于代表当前原始指令的下一条指令,这样所述垃圾指令就不会被执行,从而确保程原始代码的正常运行。
204、将所述乱序节点间的顺序打乱,并将起始跳转节点插入到所述链表中的第一个节点前作为头节点,得到乱序后的链表。
具体地,当前链表中存在多个乱序节点,虽然每个乱序节点中都包含垃圾指令,但是节点本身在链表中的顺序与原始指令写入的顺序是一致的,也就是说第一个节点中必然包括第一条指令,后续指令也按顺序存放在各节点中。此时,可以通过随机或固定的乱序方式将所述乱序节点间的顺序打乱,这样不同节点间的指令顺序就会被完全打乱。然后将起始跳转节点插入到所述链表中的第一个节点前作为头节点,得到乱序后的链表,其中所述起始跳转节点用于指定第一条指令,用于保障原始代码的正常运行。
205、将所述文件头、非方法块以及所述乱序后的链表中的内容写入新的smali文件,得到受保护的smali文件。
其中,所述文件头、非方法块包含了执行方法指令的必要信息,所以需要子写入新的smali文件;所述乱序后的链表中的内容不但包含了大量的垃圾指令,而且原始指令的顺序也发生了极大地变化,因此写入所述新的smali文件的内容是杂乱无序的,实现了对smali文件的保护。
本发明实施例提供的DEX文件的保护方法,通过在smali文件的原始方法指令间添加垃圾指令并打乱原始指令的顺序,使得处理后的smali文件的内容杂乱无章,从而增加了逆向破解者进行静态分析的难度和时间成本,提高了smali文件的安全性。
进一步地,在将所述方法块的指令存储到空链表的节点时,可以通过但不局限于以下的方法实现,该方法包括:将所述方法块中的每条指令存储到所述空链表的节点中,使得每个节点中存储有一条指令。也就是说,在将方法块的指令存储到空链表的节点中时,可以将方法块所包含的每条指令都分开到不同节点中,与一个节点中存储有多条指令的情况相比,在后续处理过程中可以明显增加垃圾指令的数量和节点间重新排序的复杂性,从而进一步提高smali文件的安全性。
进一步地,将所述方法指令中的指令存储到所述空链表的节点中,之后还包括:将需要保持绝对连接的指令所在的节点进行合并。具体地说,虽然在每个节点中只存入一条指令可以增加smali文件的安全性,但对于那些需要保持绝对连接的指令来说就会发生运行错误,如调用函数并得到函数返回值的指令就必须不能分开,否则就得到不正确的返回值。因此还需要保持绝对连接的指令所在的节点进行合并,在提高smali文件安全性的同时兼顾程序的稳定性。
进一步地,本发明具体实施例提供了一种将乱序节点间的顺序打乱的具体方法,如图3所示,该方法包括:
301、根据所述乱序节点的数量生成一个随机序列。
具体地,在根据所述乱序节点的数量生成一个随机序列时,可以根据现有乱序节点的个数,利用随机序列生成函数(如random函数)生成一个随机序列。
302、根据所述随机序列的数值顺序,将所述乱序节点重新排列。
具体地,在根据所述随机序列的数值顺序将所述乱序节点重新排列时,可以根据所述随机序列的具体数值顺序,将乱序节点间的顺序重新进行排列,得到新的乱序节点顺序。
通过随机序列对乱序节点进行排序,避免了采用固定重排方法的单一性,使得每次重排都没有规律可循,进一步增加了逆向破解的难度。
进一步地,本发明具体实施例提供了一种将smali文件中待保护的指令进行指令虚拟处理的具体方法,如图4所示,该方法包括:
401、遍历所述smali文件,根据预设指令规则获取待保护指令;
其中,所述预设指令规则可以用于指定特定的操作指令,以预设指令规则指定加减乘除操作为例:遍历所述smali文件,根据预设指令规则获取待保护指令就得到了所述smali文件中所有用于进行加减乘除的指令。
402、解析所述待保护指令的功能信息和参数信息。
具体地,在解析所述待保护指令的功能信息和参数信息时,可以通过解析所述待保护指令,得到所述待保护指令的功能信息和参数信息,功能信息用于表明指令所实现的具体操作,参数信息用于记载具体操作所使用的参数。
403、根据预设构建原则以及所述待保护指令的功能信息和参数信息,构造虚拟接口指令。
其中,预设构建规则是在进行指令虚拟处理前就已经设置好的,针对不同的指令功能定义了不同的虚拟接口指令。在构造虚拟接口指令时,根据待保护指令的功能信息在预设构建规则中的定义确定虚拟指令的形式,根据参数信息确定虚拟指令调用的参数,从而得到所需的虚拟接口指令。其中,所述虚拟接口指令可以指定一个二进制的动态链接库文件(例如SO文件),用来实现所述待保护指令的具体功能。
404、将所述待保护指令替换为所述虚拟接口指令。
具体地,在将所述待保护指令替换为所述虚拟接口指令时,可以将所述待保护指令从文件中删除,并在删除的位置写入所述虚拟接口指令,实现了虚拟接口指令对待保护指令的替换。
405、根据所述虚拟接口指令的参数信息,修正所述虚拟接口指令所在方法块的方法头,得到受保护的smali文件。
具体地,指令虚拟化后,虚拟接口指令的参数信息包括了其本身的参数信息以及待保护指令的参数信息,因此会导致虚拟接口指令所在方法块的寄存器数量发生变化。为了确保寄存器的个数不影响虚拟接口指令的执行,因此需要对当前方法块的方法头进行修改,最终得到受保护的smali文件。
本发明实施例提供的DEX文件的保护方法,通过在smali文件中构建虚拟接口指令替换待保护指令,将原始指令实现的功能提取到二进制文件中进行解释执行,使得分析者需要完整分析不同的指令格式才能获取完整的实现逻辑,增加了动态分析难度。
进一步地,所述指令虚拟处理的方法还包括:
将所述虚拟接口指令对应的动态链接库文件及接口类文件释放到所述虚拟接口指令指定的目录下,得到与所述受保护的smali文件相配套的动态链接库文件及接口类文件。
具体地,可以释放所述虚拟接口指令对应的动态链接库文件(如SO文件)到反汇编后的动态链接库文件夹中,释放所述动态链接库的接口类smali文件集合到所述虚拟接口指令指定的目录下。在执行所述虚拟接口指令时,首先获取所述虚拟接口指令的接口,然后通过所述接口调用所述动态链接库中的相应指令,从而实现所述待保护指令的功能。在对所述smali文件进行保护的同时,保证了程序的完整性和可实现性。
进一步地,本发明具体实施例提供了一种将smali文件中待保护的指令进行代码抽取处理的具体方法,如图5所示,该方法包括:
501、遍历所述smali文件,根据用户需求获取待抽取的代码块。
具体地,在根据用户需求获取待抽取的代码块时,首先可以根据用户的实际需求选定需要进行保护的代码块,进然后遍历所述smali文件,将用户指定的代码块抽取出来。
502、构建符合smali语法格式的空文件,将所述待抽取的代码块存储到所述空文件中,得到抽取文件。
具体地,首先构建一个符合smali语法格式的空文件,然后将所述待抽取的代码块存储到所述空文件中,得到抽取文件。由于所述空文件符合smali语法格式,因此所述待抽取的代码块所实现的功能就可以由所述抽取文件完成。
503、将所述待抽取的代码块替换为所述抽取文件的调用代码。
具体地,在将所述待抽取的代码块替换为所述抽取文件的调用代码时,可以将所述待抽取的代码块从所述smali文件中删除,并在删除的位置写入抽取文件的调用代码,实现了抽取文件对所述待抽取的代码块的替换。
504、根据所述调用代码的参数信息,修正所述调用代码所在方法块的方法头,得到受保护的smali文件。
具体地,由于代码块的长度不同,因此使用的寄存器数量也不一样,而替换后的抽取文件的调用代码具有固定的指令格式,使用寄存器的个数也是固定的,为了确保寄存器的个数不影响所述调用代码的执行,因此需要对当前调用代码所在方法块的方法头进行修改,最终得到受保护的smali文件。
本发明实施例提供的DEX文件的保护方法,通过将smali文件的代码块抽取出来然后存放在抽取文件中,增加了代码的保密层级,因此增大了逆向破解的难度,提高了程序的安全性。
进一步地,所述代码抽取方法还包括:
将所述抽取文件转换成JAVA文件包并存放在所述受保护的smali文件的资源文件夹中,得到与所述受保护的smali文件相配套的资源文件。也就是说,将所述抽取文件进行压缩加密处理后可以转换成JAVA文件包的形式,然后将所述JAVA文件包存放在smali文件的资源文件中,作为与所述受保护的smali文件相配套的资源文件。在执行所述抽取文件的调用代码时,可以通过自定义的加载类来加载所述相配套的资源文件即抽取文件,然后执行所述抽取文件中的代码,从而实现所述待抽取的代码的功能。在对所述smali文件进行保护的同时,保证了程序的完整性和可实现性。
进一步地,将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件还可以通过但不局限于以下的方法实现,该方法包括:
将所述smali文件中待保护的指令进行代码乱序处理和指令虚拟处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行代码乱序处理和代码抽取处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行指令虚拟处理和代码抽取处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行代码乱序处理、指令虚拟处理和代码抽取处理,得到受保护的smali文件。
也就是说,将所述smali文件中待保护的指令进行隐藏处理,可以对所述smali文件进行代码乱序处理、指令虚拟处理和代码抽取处理中的任意两种处理,也可以将三种处理方式都应用于所述smali文件。并且,由于每一个处理方式得到的受保护文件都是标准的smali文件,因此前一个处理得到的受保护的smali文件,可以直接作为下一个处理的所述待保护的smali文件,所以无论是选择两种方式依次处理还是三种方式依次处理,其处理的顺序是没有限制的。并且所述代码乱序处理、指令虚拟处理和代码抽取处理的其他描述,可以参考图1至图5相关部分的描述,本发明实施例在此将不再赘述。
本发明实例提供的DEX文件的保护方法,通过对待保护的smali文件进行代码乱序处理、指令虚拟处理和代码抽取处理的组合处理,增加了DEX文件保护方法的层次性和多样性,使得受保护的DEX文件可以同时对抗静态和动态逆向分析,极大地提高了程序代码的安全性。
本发明具体实施例提供了一种DEX文件的保护装置,如图6所示,该装置包括:反汇编模块61、隐藏模块62和汇编模块63。
反汇编模块61,用于将待保护的DEX文件进行反汇编处理,得到smali文件。
隐藏模块62,用于将所述反汇编模块61得到的smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件。
汇编模块63,用于将所述隐藏模块62得到的所述受保护的smali文件进行汇编处理,得到受保护的DEX文件,所述汇编处理与所述反汇编对应。
进一步地,如图7所示,所述隐藏模块62包括:代码乱序子模块621、指令虚拟子模块622或代码抽取子模块623。
代码乱序子模块621,用于将所述smali文件中待保护的指令进行代码乱序处理,得到受保护的smali文件。
指令虚拟子模块622,用于将所述smali文件中待保护的指令进行指令虚拟处理,得到受保护的smali文件。
代码抽取子模块623,用于将所述smali文件中待保护的指令进行代码抽取处理,得到受保护的smali文件。
进一步地,本发明具体实施例提供了一种代码乱序子模块,如图8所示,该子模块包括:获取单元71、存储单元72、第一乱序单元73、第二乱序单元74和写入单元75。
获取单元71,用于获取所述smali文件的文件头、非方法块和方法块。
存储单元72,用于将所述获取单元71获得的方法块的指令存储到空链表的节点中。
第一乱序单元73,用于将乱序信息写入所述节点中,得到乱序节点。
第二乱序单元74,用于将所述乱序节点间的顺序打乱,并将起始跳转节点插入到所述链表中的第一个节点前作为头节点,得到乱序后的链表。
写入单元75,用于将所述文件头、非方法指令以及所述乱序后的链表中的内容写入新的smali文件,得到受保护的smali文件。
进一步地,如图9所示,所述存储单元72包括:节点存储子单元721和节点合并子单元722。
节点存储子单元721,用于将所述方法块中的指令存储到所述空链表的节点中,使得每个节点中存储有一条指令。
节点合并子单元722,用于将需要保持绝对连接的指令所在的节点进行合并。
进一步地,如图10所示,所述第二乱序单元74包括:序列生成子单元741和顺序重排子单元742。
序列生成子单元741,用于根据所述乱序节点的数量生成一个随机序列。
顺序重排子单元742,用于根据所述序列生成子单元741生成的随机序列的数值顺序,将所述乱序节点重新排列。
进一步地,本发明具体实施例提供了一种指令虚拟子模块,如图11所示,该子模块包括:指令获取单81、指令解析单元82、指令构造单元83、指令替换单元84和第一修正单元85。
指令获取单81,用于遍历所述smali文件,根据预设指令规则获取待保护指令。
指令解析单元82,用于解析所述指令获取单元81得到的待保护指令的功能信息和参数信息。
指令构造单元83,用于根据预设构建原则以及所述指令解析单元82解析得到的待保护指令的功能信息和参数信息,构造虚拟接口指令。
指令替换单元84,用于将所述待保护指令替换为所述指令构造单元83构建的虚拟接口指令。
第一修正单元85,用于根据所述虚拟接口指令的参数信息,修正所述虚拟接口指令所在方法块的方法头,得到受保护的smali文件。
进一步地,所述指令虚拟子模块还包括:
文件释放单元,用于将所述虚拟接口指令对应的动态链接库文件及接口类文件释放到所述虚拟接口指令指定的目录下,得到与所述受保护的smali文件相配套的动态链接库文件及接口类文件。
进一步地,本发明具体实施例提供了一种代码抽取子模块,如图11所示,所述代码抽取模块包括:
代码块获取单元91,用于遍历所述smali文件,根据用户需求获取待抽取的代码块。
代码块抽取单元92,用于构建符合smali语法格式的空文件,将所述代码块获取单元91得到的待抽取的代码块存储到所述空文件中,得到抽取文件。
代码块替换单元93,用于将所述待抽取的代码块替换为所述抽取文件的调用代码。
第二修正单元94,用于根据所述调用代码的参数信息,修正所述调用代码所在方法块的方法头,得到受保护的smali文件。
进一步地,所述代码抽取子模块还包括:
文件转换单元,用于将所述抽取文件转换成JAVA文件包并存放在所述受保护的smali文件的资源文件夹中,得到与所述受保护的smali文件相配套的资源文件。
进一步地,本发明具体实施例提供了一种DEX文件的隐藏装置,所述隐藏模块包括:第一隐藏子模块、第二隐藏子模块、第三隐藏子模块或第四隐藏子模块。
第一隐藏子模块,用于将所述smali文件中待保护的指令进行代码乱序处理和指令虚拟处理,得到受保护的smali文件。
第二隐藏子模块,用于将所述smali文件中待保护的指令进行代码乱序处理和代码抽取处理,得到受保护的smali文件。
第三隐藏子模块,用于将所述smali文件中待保护的指令进行指令虚拟处理和代码抽取处理,得到受保护的smali文件。
第四隐藏子模块,用于将所述smali文件中待保护的指令进行代码乱序处理、指令虚拟处理和代码抽取处理,得到受保护的smali文件。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (22)
1.一种DEX文件的保护方法,其特征在于,所述方法包括:
将待保护的DEX文件进行反汇编处理,得到smali文件;
将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件;
将所述受保护的smali文件进行汇编处理,得到受保护的DEX文件,所述汇编处理与所述反汇编对应。
2.根据权利要求1所述的DEX文件的保护方法,其特征在于,将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件包括:
将所述smali文件中待保护的指令进行代码乱序处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行指令虚拟处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行代码抽取处理,得到受保护的smali文件。
3.根据权利要求2所述的DEX文件的保护方法,其特征在于,所述将所述smali文件中待保护的指令进行代码乱序处理,得到受保护的smali文件包括:
获取所述smali文件的文件头、非方法块和方法块;
将所述方法块的指令存储到空链表的节点中;
将乱序信息写入所述节点中,得到乱序节点;
将所述乱序节点间的顺序打乱,并将起始跳转节点插入到所述链表中的第一个节点前作为头节点,得到乱序后的链表;
将所述文件头、非方法指令以及所述乱序后的链表中的内容写入新的smali文件,得到受保护的smali文件。
4.根据权利要求3所述的DEX文件的保护方法,其特征在于,将所述方法块的指令存储到空链表的节点中包括:
将所述方法块中的指令存储到所述空链表的节点中,使得每个节点中存储有一条指令。
5.根据权利要求4所述的DEX文件的保护方法,其特征在于,将所述方法指令中的指令存储到所述空链表的节点中,之后还包括:
将需要保持绝对连接的指令所在的节点进行合并。
6.根据权利要求3-5任一项所述的DEX文件的保护方法,其特征在于,所述将所述乱序节点间的顺序打乱包括:
根据所述乱序节点的数量生成一个随机序列;
根据所述随机序列的数值顺序,将所述乱序节点重新排列。
7.根据权利要求2所述的DEX文件的保护方法,其特征在于,所述将所述smali文件中待保护的指令进行指令虚拟处理,得到受保护的smali文件包括:
遍历所述smali文件,根据预设指令规则获取待保护指令;
解析所述待保护指令的功能信息和参数信息;
根据预设构建原则以及所述待保护指令的功能信息和参数信息,构造虚拟接口指令;
将所述待保护指令替换为所述虚拟接口指令;
根据所述虚拟接口指令的参数信息,修正所述虚拟接口指令所在方法块的方法头,得到受保护的smali文件。
8.根据权利要求7所述的DEX文件的保护方法,其特征在于,还包括:
将所述虚拟接口指令对应的动态链接库文件及接口类文件释放到所述虚拟接口指令指定的目录下,得到与所述受保护的smali文件相配套的动态链接库文件及接口类文件。
9.根据权利要求2所述的DEX文件的保护方法,其特征在于,所述将所述smali文件中待保护的指令进行代码抽取处理,得到受保护的smali文件包括:
遍历所述smali文件,根据用户需求获取待抽取的代码块;
构建符合smali语法格式的空文件,将所述待抽取的代码块存储到所述空文件中,得到抽取文件;
将所述待抽取的代码块替换为所述抽取文件的调用代码;
根据所述调用代码的参数信息,修正所述调用代码所在方法块的方法头,得到受保护的smali文件。
10.根据权利要求9所述的DEX文件的保护方法,其特征在于,还包括:
将所述抽取文件转换成JAVA文件包并存放在所述受保护的smali文件的资源文件夹中,得到与所述受保护的smali文件相配套的资源文件。
11.根据权利要求1所述的DEX文件的保护方法,其特征在于,将所述smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件包括:
将所述smali文件中待保护的指令进行代码乱序处理和指令虚拟处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行代码乱序处理和代码抽取处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行指令虚拟处理和代码抽取处理,得到受保护的smali文件;
或将所述smali文件中待保护的指令进行代码乱序处理、指令虚拟处理和代码抽取处理,得到受保护的smali文件。
12.一种DEX文件的保护装置,其特征在于,所述装置包括:
反汇编模块,用于将待保护的DEX文件进行反汇编处理,得到smali文件;
隐藏模块,用于将所述反汇编模块得到的smali文件中待保护的指令进行隐藏处理,得到受保护的smali文件;
汇编模块,用于将所述隐藏模块得到的所述受保护的smali文件进行汇编处理,得到受保护的DEX文件,所述汇编处理与所述反汇编对应。
13.根据权利要求12所述的DEX文件的保护装置,其特征在于,所述隐藏模块包括:
代码乱序子模块,用于将所述smali文件中待保护的指令进行代码乱序处理,得到受保护的smali文件;
或指令虚拟子模块,用于将所述smali文件中待保护的指令进行指令虚拟处理,得到受保护的smali文件;
或代码抽取子模块,用于将所述smali文件中待保护的指令进行代码抽取处理,得到受保护的smali文件。
14.根据权利要求13所述的DEX文件的保护装置,其特征在于,所述代码乱序子模块包括:
获取单元,用于获取所述smali文件的文件头、非方法块和方法块;
存储单元,用于将所述获取单元获得的方法块的指令存储到空链表的节点中;
第一乱序单元,用于将乱序信息写入所述节点中,得到乱序节点;
第二乱序单元,用于将所述乱序节点间的顺序打乱,并将起始跳转节点插入到所述链表中的第一个节点前作为头节点,得到乱序后的链表;
写入单元,用于将所述文件头、非方法指令以及所述乱序后的链表中的内容写入新的smali文件,得到受保护的smali文件。
15.根据权利要求14所述的DEX文件的保护装置,其特征在于,所述存储单元包括:
节点存储子单元,用于将所述方法块中的指令存储到所述空链表的节点中,使得每个节点中存储有一条指令。
16.根据权利要求15所述的DEX文件的保护装置,其特征在于,所述存储单元包括还包括:
节点合并子单元,用于将需要保持绝对连接的指令所在的节点进行合并。
17.根据权利要求14-16任一项所述的DEX文件的保护装置,其特征在于,所述第二乱序单元包括:
序列生成子单元,用于根据所述乱序节点的数量生成一个随机序列;
顺序重排子单元,用于根据所述序列生成子单元生成的随机序列的数值顺序,将所述乱序节点重新排列。
18.根据权利要求13所述的DEX文件的保护装置,其特征在于,所述指令虚拟子模块包括:
指令获取单元,用于遍历所述smali文件,根据预设指令规则获取待保护指令;
指令解析单元,用于解析所述指令获取单元得到的待保护指令的功能信息和参数信息;
指令构造单元,用于根据预设构建原则以及所述指令解析单元解析得到的待保护指令的功能信息和参数信息,构造虚拟接口指令;
指令替换单元,用于将所述待保护指令替换为所述指令构造单元构建的虚拟接口指令;
第一修正单元,用于根据所述虚拟接口指令的参数信息,修正所述虚拟接口指令所在方法块的方法头,得到受保护的smali文件。
19.根据权利要求18所述的DEX文件的保护装置,其特征在于,还包括:
文件释放单元,用于将所述虚拟接口指令对应的动态链接库文件及接口类文件释放到所述虚拟接口指令指定的目录下,得到与所述受保护的smali文件相配套的动态链接库文件及接口类文件。
20.根据权利要求13所述的DEX文件的保护装置,其特征在于,所述代码抽取模块包括:
代码块获取单元,用于遍历所述smali文件,根据用户需求获取待抽取的代码块;
代码块抽取单元,用于构建符合smali语法格式的空文件,将所述代码块获取单元得到的待抽取的代码块存储到所述空文件中,得到抽取文件;
代码块替换单元,用于将所述待抽取的代码块替换为所述抽取文件的调用代码;
第二修正单元,用于根据所述调用代码的参数信息,修正所述调用代码所在方法块的方法头,得到受保护的smali文件。
21.根据权利要求20所述的DEX文件的保护装置,其特征在于,还包括:
文件转换单元,用于将所述抽取文件转换成JAVA文件包并存放在所述受保护的smali文件的资源文件夹中,得到与所述受保护的smali文件相配套的资源文件。
22.根据权利要求12所述的DEX文件的保护方法,其特征在于,所述隐藏模块包括:
第一隐藏子模块,用于将所述smali文件中待保护的指令进行代码乱序处理和指令虚拟处理,得到受保护的smali文件;
或第二隐藏子模块,用于将所述smali文件中待保护的指令进行代码乱序处理和代码抽取处理,得到受保护的smali文件;
或第三隐藏子模块,用于将所述smali文件中待保护的指令进行指令虚拟处理和代码抽取处理,得到受保护的smali文件;
或第四隐藏子模块,用于将所述smali文件中待保护的指令进行代码乱序处理、指令虚拟处理和代码抽取处理,得到受保护的smali文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410064826.4A CN104866734B (zh) | 2014-02-25 | 2014-02-25 | 一种dex文件的保护方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410064826.4A CN104866734B (zh) | 2014-02-25 | 2014-02-25 | 一种dex文件的保护方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104866734A true CN104866734A (zh) | 2015-08-26 |
CN104866734B CN104866734B (zh) | 2018-10-09 |
Family
ID=53912558
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410064826.4A Active CN104866734B (zh) | 2014-02-25 | 2014-02-25 | 一种dex文件的保护方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104866734B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105912893A (zh) * | 2016-01-19 | 2016-08-31 | 北京鼎源科技有限公司 | 一种基于Android系统微指令即时编译的加固方法 |
CN105930695A (zh) * | 2016-04-11 | 2016-09-07 | 江苏通付盾科技有限公司 | 一种软件开发工具包的保护方法及装置 |
CN105956425A (zh) * | 2016-04-28 | 2016-09-21 | 西北大学 | 一种基于smali代码混淆的Android应用保护方法 |
CN106529225A (zh) * | 2016-10-27 | 2017-03-22 | 努比亚技术有限公司 | 一种应用程序源代码保护装置及方法 |
CN106650428A (zh) * | 2015-11-03 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 用于优化应用代码的方法与设备 |
CN106650341A (zh) * | 2016-11-18 | 2017-05-10 | 湖南鼎源蓝剑信息科技有限公司 | 基于smali流程混淆技术的Android应用加固方法 |
CN107871065A (zh) * | 2016-09-27 | 2018-04-03 | 武汉安天信息技术有限责任公司 | 一种Dalvik模式下dex文件的保护方法及装置 |
CN108681457A (zh) * | 2018-05-11 | 2018-10-19 | 西北大学 | 基于代码下沉与残码解释的Android应用程序保护方法 |
CN109255235A (zh) * | 2018-09-17 | 2019-01-22 | 西安电子科技大学 | 基于用户态沙箱的移动应用第三方库隔离方法 |
CN110245467A (zh) * | 2019-05-13 | 2019-09-17 | 西北大学 | 基于Dex2C与LLVM的Android应用程序保护方法 |
CN112287306A (zh) * | 2020-10-29 | 2021-01-29 | 中国银联股份有限公司 | 一种应用程序安装包的保护方法、装置及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102760219A (zh) * | 2011-12-20 | 2012-10-31 | 北京安天电子设备有限公司 | 一种Android平台软件保护系统、方法及设备 |
KR101214893B1 (ko) * | 2011-12-16 | 2013-01-09 | 주식회사 안랩 | 어플리케이션의 유사성 검출 장치 및 방법 |
CN103324872A (zh) * | 2013-07-12 | 2013-09-25 | 上海交通大学 | 基于指令混淆的Android应用程序保护方法及系统 |
CN103544414A (zh) * | 2013-10-25 | 2014-01-29 | 苏州通付盾信息技术有限公司 | 一种Android系统应用的深度代码混淆方法 |
-
2014
- 2014-02-25 CN CN201410064826.4A patent/CN104866734B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101214893B1 (ko) * | 2011-12-16 | 2013-01-09 | 주식회사 안랩 | 어플리케이션의 유사성 검출 장치 및 방법 |
CN102760219A (zh) * | 2011-12-20 | 2012-10-31 | 北京安天电子设备有限公司 | 一种Android平台软件保护系统、方法及设备 |
CN103324872A (zh) * | 2013-07-12 | 2013-09-25 | 上海交通大学 | 基于指令混淆的Android应用程序保护方法及系统 |
CN103544414A (zh) * | 2013-10-25 | 2014-01-29 | 苏州通付盾信息技术有限公司 | 一种Android系统应用的深度代码混淆方法 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106650428A (zh) * | 2015-11-03 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 用于优化应用代码的方法与设备 |
CN105912893A (zh) * | 2016-01-19 | 2016-08-31 | 北京鼎源科技有限公司 | 一种基于Android系统微指令即时编译的加固方法 |
CN105930695A (zh) * | 2016-04-11 | 2016-09-07 | 江苏通付盾科技有限公司 | 一种软件开发工具包的保护方法及装置 |
CN105930695B (zh) * | 2016-04-11 | 2019-03-19 | 江苏通付盾科技有限公司 | 一种软件开发工具包的保护方法及装置 |
CN105956425B (zh) * | 2016-04-28 | 2018-07-24 | 西北大学 | 一种基于smali代码混淆的Android应用保护方法 |
CN105956425A (zh) * | 2016-04-28 | 2016-09-21 | 西北大学 | 一种基于smali代码混淆的Android应用保护方法 |
CN107871065B (zh) * | 2016-09-27 | 2019-12-20 | 武汉安天信息技术有限责任公司 | 一种Dalvik模式下dex文件的保护方法及装置 |
CN107871065A (zh) * | 2016-09-27 | 2018-04-03 | 武汉安天信息技术有限责任公司 | 一种Dalvik模式下dex文件的保护方法及装置 |
CN106529225A (zh) * | 2016-10-27 | 2017-03-22 | 努比亚技术有限公司 | 一种应用程序源代码保护装置及方法 |
CN106650341A (zh) * | 2016-11-18 | 2017-05-10 | 湖南鼎源蓝剑信息科技有限公司 | 基于smali流程混淆技术的Android应用加固方法 |
CN108681457A (zh) * | 2018-05-11 | 2018-10-19 | 西北大学 | 基于代码下沉与残码解释的Android应用程序保护方法 |
CN108681457B (zh) * | 2018-05-11 | 2020-09-01 | 西北大学 | 基于代码下沉与残码解释的Android应用程序保护方法 |
CN109255235A (zh) * | 2018-09-17 | 2019-01-22 | 西安电子科技大学 | 基于用户态沙箱的移动应用第三方库隔离方法 |
CN110245467A (zh) * | 2019-05-13 | 2019-09-17 | 西北大学 | 基于Dex2C与LLVM的Android应用程序保护方法 |
CN110245467B (zh) * | 2019-05-13 | 2023-02-07 | 西北大学 | 基于Dex2C与LLVM的Android应用程序保护方法 |
CN112287306A (zh) * | 2020-10-29 | 2021-01-29 | 中国银联股份有限公司 | 一种应用程序安装包的保护方法、装置及计算机可读存储介质 |
CN112287306B (zh) * | 2020-10-29 | 2024-04-26 | 中国银联股份有限公司 | 一种应用程序安装包的保护方法、装置及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104866734B (zh) | 2018-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104866734A (zh) | 一种dex文件的保护方法及装置 | |
CN103413073B (zh) | 一种保护java可执行程序的方法及设备 | |
CN103413075B (zh) | 一种通过虚拟机保护java可执行程序的方法及设备 | |
CN106126981B (zh) | 基于虚拟函数表替换的软件安全防护方法 | |
CN104091100B (zh) | 一种基于编译中间结果的软件保护方法 | |
EP3746921B1 (en) | Systems and methods for policy linking and/or loading for secure initialization | |
CN102831342B (zh) | 一种提高安卓系统中应用程序保护强度的方法 | |
CN103914637B (zh) | 一种安卓平台的可执行程序加密方法 | |
CN108932406A (zh) | 虚拟化软件保护方法和装置 | |
US8615735B2 (en) | System and method for blurring instructions and data via binary obfuscation | |
CN110210190A (zh) | 一种基于二次汇编的代码混淆方法 | |
CN103440201A (zh) | 动态污点分析装置及其在文件格式逆向解析中的应用 | |
CN110059455A (zh) | 代码加密方法、装置、电子设备和计算机可读存储介质 | |
CN110414261A (zh) | 一种数据脱敏方法、装置、设备及可读存储介质 | |
CN104834838B (zh) | 防止dex文件从内存中转存的方法及装置 | |
CN108491235A (zh) | 结合动态加载和函数Native化的DEX保护方法 | |
CN109948308A (zh) | 代码安全保护方法、装置、电子设备和计算机可读存储介质 | |
CN104408366A (zh) | 基于插装技术的安卓应用程序权限使用行为跟踪方法 | |
CN105653432A (zh) | 一种崩溃数据的处理方法和装置 | |
CN109697339A (zh) | 一种基于动态虚拟指令变换的Android应用安全保护方法 | |
CN103246848A (zh) | 保护软件安全的方法和设备 | |
CN105335151A (zh) | 安装文件的保护方法及装置 | |
CN107577925A (zh) | 基于双重ARM指令虚拟的Android应用程序保护方法 | |
CN105956425B (zh) | 一种基于smali代码混淆的Android应用保护方法 | |
Zhang et al. | Source code obfuscation for smart contracts |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |