CN105631335A - 一种动态脱壳方法、装置和设备 - Google Patents
一种动态脱壳方法、装置和设备 Download PDFInfo
- Publication number
- CN105631335A CN105631335A CN201511000441.2A CN201511000441A CN105631335A CN 105631335 A CN105631335 A CN 105631335A CN 201511000441 A CN201511000441 A CN 201511000441A CN 105631335 A CN105631335 A CN 105631335A
- Authority
- CN
- China
- Prior art keywords
- dex file
- hook
- application process
- intended application
- module
- 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
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/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/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种动态脱壳方法、装置和设备,涉及计算机领域。所述方法包括:在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;由所述修复模块根据所述dex文件信息对所述dex文件进行修复。本发明解决了带病毒的应用被加壳后,由于dex文件被隐藏,而导致很难解析dex文件,从而很难辨析病毒的问题,取得了可以方便的对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件的有益效果。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种动态脱壳方法、一种动态脱壳装置和一种动态脱壳设备。
背景技术
随着智能技术的发展,出现了多种支持智能手机的系统。比如Android(安卓)系统。Android是一种以Linux为基础的开放源码操作系统,主要使用于手机等移动终端。Android平台由操作系统、中间件、用户界面和应用软件组成。
随着Android系统的市场占有率的增加,越来越多的开发者基于Android系统开发APP(Application,应用),使用户使用Android手机更方便。
而且,出于安全或保密等因素的原因,越来越多的应用会被加壳,其中的加壳可以理解为,利用特殊的算法,对应用的dex文件(DalvikExecutable文件,Dalvik虚拟机可执行文件)里的资源进行压缩,改变其原来的特征码,隐藏一些字符串等等,使一些资源编辑软件不能正常打开或者修改。对于加壳后的应用,其中dex文件中包含的代码不能全部可见。
但是在实际应用中,可能在应用的dex文件中存在病毒等对系统有危害的代码,若该应用被加壳,则其dex文件被隐藏,从而其中的病毒可能很难被辨识。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种动态脱壳方法、相应的一种动态脱壳装置和一种动态脱壳设备。
依据本发明的一个方面,提供了一种动态脱壳方法,包括:
在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
优选地,所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息包括:
由所述钩取模块钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息,和/或由所述钩取模块钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息。
优选地,所述钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息包括:
钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器;
从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
优选地,所述钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息包括:
钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
优选地,由所述修复模块根据所述dex文件信息对所述dex文件进行修复包括:
分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
优选地,所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
优选地,当所述破坏方式为损坏dex偏移值和/或破坏header时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
优选地,当所述破坏方式为抽取code时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
优选地,当所述破坏方式为添加乱码时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
删除所述乱码。
优选地,当所述破坏方式为打散结构时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块;
在同一个内存中,将各dex文件块拼接为一个dex文件。
优选地,所述在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程包括:
运行控制模块以向系统服务进程注入用于关闭活动管理服务与原孵化器的连接的关断模块;
由所述控制模块利用原孵化器构造子孵化器;
由所述控制模块接收在系统服务进程注册的活动管理服务的为运行目标应用程序而发起的请求,并将其传递给所述子孵化器;
由所述子孵化器响应于该请求而孵化目标应用进程,并将钩取模块的代码和修复模块的代码注入目标应用进程。
根据本发明的另一方面,提供了一种动态脱壳装置,包括:
注入模块,适于在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
钩取模块,适于在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
修复模块,适于由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
优选地,所述钩取模块,包括:
第一钩取子模块,适于由所述钩取模块钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息,和/或
第二钩取子模块,适于由所述钩取模块钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息。
优选地,所述第一钩取子模块,包括:
类加载器获取子模块,适于钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器;
第一dex缓存信息获取子模块,适于从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
优选地,所述第二钩取子模块,包括:
第二dex缓存信息获取子模块,适于钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
优选地,所述修复模块,包括:
修复子模块,适于分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
优选地,所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
优选地,当所述破坏方式为损坏dex偏移值和/或破坏header时,所述修复子模块,包括:
第一数据获取子模块,适于根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
优选地,当所述破坏方式为抽取code时,所述修复子模块,包括:
第二数据获取子模块,适于遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
优选地,当所述破坏方式为添加乱码时,所述修复子模块,包括:
删除子模块,适于删除所述乱码。
优选地,当所述破坏方式为打散结构时,所述修复子模块,包括:
dex文件块获取子模块,适于根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块;
dex文件块拼接子模块,适于在同一个内存中,将各dex文件块拼接为一个dex文件。
优选地,所述注入模块包括:
运行模块,适于运行控制模块以向系统服务进程注入用于关闭活动管理服务与原孵化器的连接的关断模块;
控制模块,适于利用原孵化器构造子孵化器;接收在系统服务进程注册的活动管理服务的为运行目标应用程序而发起的请求,并将其传递给所述子孵化器;
第一注入模块,适于由所述子孵化器响应于该请求而孵化目标应用进程,并将钩取模块的代码和修复模块的代码注入目标应用进程。
根据本发明的另一方面,提供了一种动态脱壳设备,包括:
存储器,加载有多条可执行指令;
处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
根据本发明的一种动态脱壳方法,可以在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;由所述修复模块根据所述dex文件信息对所述dex文件进行修复。由此解决了带病毒的应用被加壳后,由于dex文件被隐藏,而导致很难解析dex文件,从而很难辨析病毒的问题,取得了可以方便的对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件的有益效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图;
图2示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图;
图3示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框图;
图4示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框图;
图5示出了根据本发明一个实施例的一种设备实施例的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
参照图1,示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图,具体可以包括如下步骤:
步骤110,在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程。
在实际应用中,一个应用的所有代码都在一个dex文件里面。每一个应用都运行在一个Dalvik虚拟机实例里,而每一个Dalvik虚拟机实例都是一个独立的进程空间。在实际应用中,dex文件是可以直接在Dalvik虚拟机中加载运行的文件。经过复杂的编译,可以把java源代码转换为dex文件。dex文件中共用了很多类(class)名称、常量字符串,使它的体积比较小,运行效率也比较高。
在实际应用中,因为安全或者其他因素,很多应用是被加壳的,其中的加壳可以理解为,利用特殊的算法,对dex文件里的资源进行压缩,改变其原来的特征码,隐藏一些字符串等等,使一些资源编辑软件不能正常打开或者修改,加壳后的dex文件可以独立运行。可以看出,加壳后的dex文件中的全部代码或者部分代码不可见。但是,现在对于应用中可能存在病毒等对存在安全隐患的代码,若该应用进行加壳,则其中的病毒代码则可能不可被辨识为病毒并拦截,从而导致感染手机等移动设备,给手机等移动设备的用户造成损害。
在本发明实施例中,针对此类被加壳的应用,可以修复其dex文件,即为本发明所述的动态脱壳。另外,在本发明实施例中,其中的目标应用同样适用于手机病毒,对手机病毒进行去壳处理,从而可以进行病毒分析,以进行病毒破解等。对此,本发明实施例不加以限定。
本发明实施例是针对有Root权限的目标应用的动态脱壳。众所周知,Root权限是指Unix类操作系统(包括Linux、Android)的系统管理员权限,类似于Windows(视窗)系统中的Administrator(管理员)权限;Root权限可以访问和修改用户的移动设备中几乎所有的文件(Android系统文件及用户文件,不包括ROM)。
本发明的实现依赖于Android操作系统的固有原理,因而,有必要先介绍以下内容:
一、Zygote启动过程:
Android系统在启动时首先会启动Linux基础系统,然后引导加载LinuxKernel并启动初始化进程(Init)。接着启动Linux守护进程。在启动Linux守护进程的同时还需要启动Zygote进程。
Zygote在业内被形象地称为孵化器,Zygote进程启动后,首先初始化一个DalvikVM(虚拟机)实例,然后为它加载资源与系统共享库,并开启Socket监听服务,当收到创建DalvikVM实例请求时,会通过COW(copyonwrite)技术最大程度地复用自己,生成一个新的DalvikVM实例。DalvikVM实例的创建方法基于Linux系统的fork原理。Zygote进程在系统运行期间,通过Socket监听端口接收到创建虚拟机请求时,通过调用fork函数,从自身孵化出DalvikVM实例,可以将其理解为孵化出了用于运行目标应用程序的进程空间。
在Zygote进程启动完成之后,Init进程会启动Runtime进程。Runtime进程首先初始化服务管理器(ServiceManager),并把它注册为绑定服务(Binderservices)的默认上下文管理器,负责绑定服务的注册与查找。然后Runtime进程会向Zygote进程发送启动系统服务组件(SystemServer)的请求,Zygote进程收到请求后,会“孵化”出一个新的DalvikVM实例并启动系统服务进程。
SystemServer会首先启动两个本地服务(由C或C++编写的native服务),SurfaceFlinger和AudioFlinger,这两个本地系统服务向服务管理器注册成为IPC服务对象,以便在需要它们的时候很容易查找到。然后SystemServer会启动一些Android系统管理服务,包括硬件服务和系统框架核心平台服务,其中也包括活动管理服务(ActivityManagerService,AMS),并将它们注册为IPC服务对象。
当SystemServer加载了所有的系统服务后就意味着系统就准备好了,它会向所有服务发送一个系统准备完毕(systemReady)广播。当需要启动一个Android应用程序时,ActivityManagerService会通过Socket进程间通信机制,发送请求通知Zygote进程为这个应用程序创建一个新的进程。
二、AMS响应应用程序启动过程:
Android应用程序框架层中,是由ActivityManagerService组件负责为Android应用程序创建新的进程的,它本来也是运行在一个独立的进程之中,不过这个进程是在系统启动的过程中创建的。ActivityManagerService组件一般会在以下情况下为应用程序创建一个新的进程:当系统决定要在一个新的进程中启动一个Activity或者Service时,AMS就会试图去创建一个新进程,然后在这个新的进程中启动这个Activity或者Service。
当ActivityManagerService启动一个应用程序的时候,就会通过Socket与Zygote进程进行通信,请求它fork一个子进程出来作为这个即将要启动的应用程序的进程。在前面的介绍中可以看到,系统中的两个重要服务PackageManagerService和ActivityManagerService,都是由SystemServer进程来负责启动的,而SystemServer进程本身是Zygote进程在启动的过程中fork出来的。
可以看出,Zygote与AMS之间,是基于socket套接口实现通信的。Zygote在启动之前由init创建socket套接口文件,存储于系统目录/dev/socket之下,并且通常所创建的套接口文件,其文件名与Zygote进程名称是相同的,因而,通过这一机制,在上述系统目录处查看套接口文件,即可验证系统是否创建了新的孵化器。该文件存储关于该socket套接口的设置数据。AMS正是通过读取一个这样的套接口文件来建立其与Zygote的直接通信机制的。后续本发明即将揭示的基于socket的通信机制,均与此处同理实现。
三、向系统服务进程SystemServer注入功能模块的参考技术:
如前所述,Zygote启动后,第一件事便是从自身fork出SystemServer,使其成为系统服务进程,通过该系统服务进程而加载AMS、PMS等服务进程。因此,现有技术中广泛使用注入技术来将需要实现特定功能的功能函数注入到SystemServer中,使之得以执行,实现目的。
例如现有技术中的一种实现系统服务进程代码注入的过程为:
步骤1:查找Android系统中com.android.phone,system_server,/system/bin/meidaserver三个进程的进程号ProcessID,即PID;
步骤2:根据所述的PID分别对所述的三个进程的运行状态进行修改,执行加载监视器模块指令,开辟内存空间并将用来加载监视器模块的指令写入其中;
步骤3:分别更改所述的三个进程的寄存器状态,使CPU跳转执行所述的指令;
步骤4:根据所述的指令,加载监视器模块到注入器模块的内存空间中,所述的监视器模块开始初始化操作;
步骤5:监视器模块在初始化结束后,查找当前进程的libbinder.so的初始地址,并定位ioctl函数在libbinder.so的全局对象列表GlobalOjectsTable中对应的表项的地址,即GOT中对应的表项的地址;
步骤6:修改ioctl对应的GOT表项的内容,使用钩子函数hooked_ioctl的地址进行替换;
步骤7:软件执行敏感行为时,会通过ioctl与com.android.phone,system_server,/system/bin/mediaserver三个进程的一个或者多个进行通信和数据交换,钩子函数hooked_ioctl读取并解析软件的敏感行为类型;
步骤8:所述的监视器模块写入敏感行为的发起者和时间到日志文件中,得到软件敏感行为监控记录;
步骤9:所述的监视器模块监控到敏感行为时,发送消息给用户,同时使敏感行为的操作暂停;
步骤10:所述的用户决定是否运行敏感行为的执行,返回同意或者拒绝命令给所述的监视器模块;
步骤11:所述的监视器模块获取所述的用户选择的结果,若用户选择同意则使敏感行为继续执行;若用户选择拒绝则终止敏感行为的继续执行。
现有技术中能够实现类似上述的注入的方案不胜枚举,对此,本发明实施例不加以限定。
四、基于Linux可执行文件ELF的感染接触原理
ELF(ExcutableLinkingFormat)文件是Linux的可执行文件,用于存放可执行代码。ELF感染接触原理是一种现有技术,通过复制程序的可执行代码,向其中插入实现某种企图的新增代码,然后执行修改后的可执行代码,从而实现对程序进行修改的目的。
所以在本发明实施例中,可以利用ELF感染接触技术,实现在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程。
其中,钩取模块的代码可以实现钩取相关函数获取目标应用的dex文件信息,其中包含钩子(Hook)函数,可以钩取上述的相关函数;修复模块的代码可以对获取的dex文件进行修复。
步骤120,在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息。
其中,加载dex文件的函数,包括可以加载dex文件相关信息的函数,例如OnAttach函数、openDEXfile函数等。
在目标应用进程启动后,钩取模块可以钩取目标应用进程对上述的加载dex文件的函数的调用,同时钩子函数可以继续执行所钩取的函数,从而可以获取到dex文件信息。
例如,可以利用钩取模块中的钩子函数,分别钩取上述的OnAttach函数、openDEXfile函数,然后钩子函数可以继续执行上述OnAttach函数、openDEXfile函数的功能,从而可以分别获取OnAttach函数和openDEXfile函数加载的dex文件相关信息。
步骤130,由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
如前述,经步骤120获取的dex文件信息中的代码(code)是被加壳的,不完全可见的。其加壳的具体方式可以有很多种,例如,dex文件的偏移值被损坏、其中的部分代码被抽取、dex文件的结构被打散等情况。
在本发明实施例中,可以利用修复模块根据获取的dex文件信息对dex文件进行修复。
在具体实施过程中,对dex文件的修复方法可以为:针对dex文件的加壳方式,利用与各加壳方式对应的修复方式相对应地破解其加壳方式。例如,若某dex文件的加壳的具体方式为dex文件的偏移值被损坏,则可以利用恢复偏移值的修复方式,对该dex文件进行修复;若某dex文件的加壳的具体方式为其中的部分代码被抽取,则可以利用恢复代码的修复方式,查找出其被抽取的代码段及位置,然后该dex文件进行修复。
在本发明实施例中,可以在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;由所述修复模块根据所述dex文件信息对所述dex文件进行修复。由此解决了带病毒的应用被加壳后,由于dex文件被隐藏,而导致很难解析dex文件,从而很难辨析病毒的问题,取得了可以方便的对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件的有益效果。
实施例二
参照图2,示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图,具体可以包括如下步骤:
步骤210,在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程。
优选地,步骤210,包括:
子步骤211,运行控制模块以向系统服务进程注入用于关闭活动管理服务与原孵化器的连接的关断模块。
在本发明实施例中,关断模块中包含用于实现关闭AMS与Zygote之间Socket连接的相关函数,可被实现于如前一示例所揭示的共享库文件libbinder.so中,在这种情况下,通过对该动态库文件进行反向,可以至少部分地了解实现本发明的函数的实现细节。
基于已获Root权限为前提,利用例如前述的公知的注入方法,向系统服务进程注入本发明的关断模块。这一部分,既包括前述的共享库文件libbinder.so,也包括对诸如地址表的修改等一切便于实现成功注入的操作,以便借此实现关闭AMS与Zygote之间的Socket连接。
子步骤212,由所述控制模块利用原孵化器构造子孵化器。
需要注意的是,这一步骤的实现,与步骤213中部分子步骤可以根据实际情况调整顺序执行。
本步骤可细分为如下步骤:
1、复制原孵化器Zygote的可执行代码;
2、向该可执行代码中插入用于实现外部调用的调用指令;该调用指令包括向目标应用进程注入钩取模块的代码和修复模块的代码;
3、向该可执行代码插入可用于实现子孵化器的程序自校验的代码,使得子孵化器不易被攻击;
4、运行修改后的可执行代码,从而使所述子孵化器得以成功构造,待命用于为活动管理服务ActivityManagerService的请求孵化新进程。
需要强调的是,上述步骤2与步骤3可以更换顺序实现。
子步骤213,由所述控制模块接收在系统服务进程注册的活动管理服务的为运行目标应用程序而发起的请求,并将其传递给所述子孵化器。
本发明实现向系统服务进程SystemServer的注入之后,控制模块即可搭建起新的系统架构,其搭建过程详见如下步骤:
a、利用原孵化器的套接口建立控制模块与原孵化器的连接。
前文述及,原孵化器Zygote的套接口文件/dev/socket/zygote是建立套接口连接的基础。在本步骤中,控制模块读取该套接口文件,建立与原孵化器的连接。因此,可以优先考虑在本子步骤之后执行前述子步骤212,将更符合程序实现逻辑。
b、执行关断模块以关闭活动管理服务(进程)基于所述原孵化器套接口所维持的连接。
结合前文可知,AMS进程维持着其与原孵化器Zygote的socket连接,本步骤通过注入到systemserver进程的关断模块,获得android.os.process类的sZygoteSocket成员,调用该成员的close方法例如socket.close()关闭AMS与Zygote的socket连接,使得原孵化器不能直接响应于AMS的孵化进程的请求,以便进一步获取更大的控制权。可以看出,前述子步骤211应于步骤b之前实施,既可以将子步骤211置于步骤a与步骤b之间实施,也可以将步骤b置于子步骤211之后紧接实施。本领域技术人员可以据此变化出本发明的多个实施例。
c、利用所述原孵化器的套接口监听所述活动管理服务的为运行应用进程而发起的请求。
在前述的步骤中,在控制模块的控制下,已经实现了所述子孵化器的构造,因此,依照init函数创建Zygote的逻辑,子孵化器将创建/dev/socket/stepzygote套接口文件,当然该套接口文件可以存储于本地他处,也未必需与子孵化器的进程名称相同。在本步骤中,控制模块通过该套接口建立与该子孵化器的socket连接,与此同时,开始监听原孵化器的套接口,以便监听AMS发起的孵化进程的请求,以便在后续由控制模块向原孵化器或子孵化器中转该请求。
在本步骤中,控制模块以上述子步骤实现了新的系统架构的搭建,为了进一步实现更为智能化的管理,控制模块还实现了类似路由的功能。具体而言,当控制模块接收到AMS发起的所述的请求时,需要对其做出传递给何种孵化器的判断,这一判断的逻辑依据可以有多种实施方式。在前述有关本发明的孵化控制装置的揭示中已经给出的预设置数据与已知设置数据及其相关辅助逻辑,便是本方法的执行基础。
为了实现这种类路由的控制功能,所述控制模块将按照如下过程来处理其所监听到的AMS请求:
所述控制模块,在控制模块接收所述AMS的请求之后,从该请求中提取应用程序特征信息,例如前文所述的UID、包名等信息,基于该些特征信息从本地或远程已知设置数据(例如存储于本地的或远程的数据库中)中检验该特征信息所对应的应用程序是否应被限制或被禁止,当其为应被限制或应被禁止的应用程序时,由控制模块负责将该请求中转至所述原孵化器之外的其余子孵化器或不中转该请求至任何孵化器。该已知设置数据可以存储各个UID到子孵化器之间的映射关系,以及是否被限制或被禁止的信息。显然,经控制模块的这一处理过程,能够提供更安全有效的控制管理效果,通过配置所述的已知设置数据,尤其在该已知设置数据能够得到及时的远程的更新时,可以借助这类数据来及时控制移动终端的恶意应用程序的运行。
本发明的控制模块在建立好与其他部件的socket连接之后,实际上已经发挥着路由器的作用。因此,控制模块需要一张类似路由表的预设置数据,这一预设置数据既可以与前述的已知设置数据一致,甚至合二为一,也可以是独立的,这种情况下相关数据便成为控制模块实现其路由功能的依据,特别适用于具有多个子孵化器的情况。
通过上述的分析可以看出,一个或多个子孵化器与原孵化器如何利用,既可取决于程序提供的安全策略,也可取决于用户的按需选定;既可以利用数据库技术来实现,也可以利用参数的形式来实现,不管依据如何,本发明的控制模块均能实现有效的进程孵化控制和调度效果。
子步骤214,由所述子孵化器响应于该请求而孵化目标应用进程,并将钩取模块的代码和修复模块的代码注入目标应用进程。
如前所述,经过所述控制模块的控制,当控制模块将AMS的请求进行中转后,其中转目标是确定的,如果不是中转给系统的原孵化器,则转给由本发明构造的一个子孵化器。需要注意的是,这里所称的中转,不仅包括形式与构造上与AMS发起的原请求一致的指令,还包括经过所述控制模块按照与子孵化器协议(例如通过在构造子孵化器时向可执行代码插入相关代码)的既定规则进行加工转换、能被所述子孵化器依照该协议而读取的指令。
所述子孵化器接收到控制模块中转过来的源自AMS的请求后,按照其继承自原孵化器Zygote的固有机制,利用其fork()函数复制出新进程,将进程PID返回给AMS。
AMS获得进程入口之后,便将所述目标应用程序加载到所述新进程的进程空间中,使所述目标应用程序成功运行。当该目标应用程序结束运行时,由系统依其机制回收虚拟机空间即可。
如上所述,本发明提供的应用程序进程孵化控制方法能够对应用程序而言起到更为安全的防护效果。
步骤220,由所述钩取模块钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息。
在实际应用中,目标应用进程通过调用OnAttach函数,可以获取dex文件信息。而且,Android系统中的每个应用进程都会调用OnAttach函数。
所以,在本发明实施例中,可以利用钩取模块,钩取目标应用进程对OnAttach函数的调用,然后该钩取模块可以继续执行与OnAttach函数一致的操作,从而可以获取到调用OnAttach函数所获取的dex文件信息。
优选地,步骤220,包括:
子步骤221,钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器。
其中的类加载器(ClassLoader)的作用包括加载当前目标应用的类到Java虚拟机中。在本发明实施例中,所有属于当前目标应用的类(Class)都是用与之对应的类加载器加载到本发明实施例的Dalvik虚拟机中。
在实际应用中,各应用进程调用OnAttach函数的过程中,会传输给OnAttach函数一定的参数。所以,在本发明实施例中,钩取OnAttach函数,利用OnAttach函数接收到的参数,从而可以获取类加载器。
子步骤222,从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
其中的cookie信息可以记录操作痕迹信息,在本发明实施例中,从某个类加载器获取的cookie信息中记录该类加载器的操作痕迹,例如,对各种类的加载等操作痕迹。
如前述,dex文件中包括全部应用代码,其中有很多类。所以,在cookie信息包括dex缓存信息。通过从类加载器中获取cookie信息,进而可以获取dex缓存信息。
步骤230,由所述钩取模块钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息。
在实际应用中,在实际应用中,可能会通过一个dex文件加载一个第三方的dex文件,进而启动该第三方的dex文件对应的应用。则在第三方的dex文件加载的过程中,会调用openDEXfile函数以从Android系统内存中加载第三方的dex文件。
所以,在本发明实施例中,利用钩取模块钩取目标应用进程对openDEXfile函数的调用,然后钩取模块继续执行与openDEXfile函数同样的操作,从而可以获取dex文件信息。
优选地,步骤230,包括:
子步骤231,钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
同样,在实际应用中,各应用进程调用openDEXfile函数的过程中,会传输给openDEXfile函数一定的参数。所以在本发明实施例中,可以钩取openDEXfile函数,根据目标应用进程传输给openDEXfile函数的参数,将dex文件信息加载到缓存中,然后从缓存中获取dex缓存信息。
当然,也可以不将dex文件信息加载到缓存中,而直接获取dex文件信息,对此,本发明实施例不加以限定。
步骤240,分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
在实际应用中,dex文件的破坏方式可能有很多种。优选地,在本发明实施例中,破坏方式包括:损坏dex偏移值、破坏header(头文件)、抽取code(代码)、打散结构、添加乱码。
其中,损坏dex偏移值是指dex文件的偏移值被改变,在实际应用中,可以通过解析dex文件的偏移值信息,判断dex偏移值是否被损坏。
header是dex文件中的头文件,其中包含dex偏移值和size(长度)信息等,所以,在本发明实施例中,可以通过判断dex偏移值是否被损坏进而判断header是否被破坏。
抽取code,包括dex文件中的部分代码被转存到其他地方,例如被转存在系统内存中。在实际应用中,可以通过判断Codeoff的指针是否指向dex文件,进而确定其中的code是否被抽取。若Codeoff的指针不指向dex文件,而指向内存中,则可确定其中的code被抽取。
打散结构,包括dex文件的组成部分并是集中存储在内存的某一处。此时dex文件的有些偏移值指向内存中的其他地方,但是dex文件的偏移值都是正确的。
添加乱码,包括在原始的dex文件中添加乱码。在实际应用中,可以通过对内存进行反编译发现添加乱码的信息,例如添加乱码的位置与乱码的内容等。
所以,在本发明实施例中,可以分析dex文件的破坏方式,然后针对不同的破坏方式,采用相应的修复方式对所述dex文件进行修复。
优选地,当所述破坏方式为损坏dex偏移值和/或破坏header时,步骤240,包括:
子步骤241,根据所述header里面size(长度)信息重新计算偏移,并根据所述偏移获取真实的数据。
在实际应用中,若破坏方式为损坏dex偏移值和/或破坏header,其中的偏移值都会被改变,但是对于此类两种破坏方式,header里面的size信息是不会发生变化的,因此,在本发明实施例中,可以基于header里面size信息重新计算偏移值,从而可以对破坏方式为损坏dex偏移值和/或破坏header的dex文件进行修复。
优选地,当所述破坏方式为抽取code时,步骤240,包括:
子步骤242,遍历每个类并在DVM(DalvikVirtualMachine,Dalvik虚拟机)虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
若dex文件的破坏方式为抽取code,则在本发明实施例中,可以遍历每个类并在Dalvik虚拟机中实例化,从而可以获取被抽取的code信息,例如被抽取的code的位置及内容等,进而可以从DVM虚拟机中获取原始dex文件真实的code数据。
其中,可以利用任何一种现有的遍历方法实现对每个类的遍历,对此,本发明实施例不加以限定。另外,在Dalvik虚拟机中对类进行实例化使本领域的公知技术,在此不再赘述。
优选地,当所述破坏方式为添加乱码时,步骤240,包括:
子步骤243,删除所述乱码。
在本发明实施例中,可以通过对内存进行反编译,查找出在目标应用的dex文件中添加的乱码,然后对乱码进行删除。
当然,也可以通过其他现有的技术查找所添加的乱码,对此本发明实施例不加以限定。
优选地,当所述破坏方式为打散结构时,步骤240,包括:
子步骤244,根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块。
如前述,若破坏方式为打散结构,则其dex文件可能被拆分为多个dex文件块,存储在不同的内存中。
在本发明实施例中,可以通过指向不同内存中的dex文件块的指针,从各内存中获取各dex文件块。
子步骤245,在同一个内存中,将各dex文件块拼接为一个dex文件。
在获取了属于同一dex文件的各dex文件块后,可以在同一个内存中,将各dex文件块拼接为一个dex文件,即可以获得原始的dex文件。
其中的同一个内存,可以为存储属于该dex文件的各dex文件块的任一各内存,也可以另外选择一个新的内存,对此,本发明实施例不加以限定。
在本发明实施例中,同样可以在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;由所述修复模块根据所述dex文件信息对所述dex文件进行修复。从而实现了对dex文件的修复,避免了各应用所在的手机等移动终端被病毒感染,对移动终端用户造成损失。
另外,在本发明实施例中,会利用钩取模块分别钩取目标应用进程对OnAttach函数和openDEXfile函数的调用,从而获取dex文件信息,然后分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复从而可以进一步地提高对dex文件的修复的准确性和全面性,从而为辨识病毒提供可操作的条件的有益效果。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
实施例三
参照图3,示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框图,具体可以包括如下模块:
注入模块310,适于在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程。
钩取模块320,适于在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息。
修复模块330,适于由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
在本发明实施例中,可以在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;由所述修复模块根据所述dex文件信息对所述dex文件进行修复。从而实现了对dex文件的修复,避免了各应用所在的手机等移动终端被病毒感染,对移动终端用户造成损失。
实施例四
参照图4,示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框图,具体可以包括如下模块:
注入模块410,适于在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程。
优选地,注入模块410,包括:
运行模块,适于运行控制模块以向系统服务进程注入用于关闭活动管理服务与原孵化器的连接的关断模块。
控制模块,适于利用原孵化器构造子孵化器;接收在系统服务进程注册的活动管理服务的为运行目标应用程序而发起的请求,并将其传递给所述子孵化器。
第一注入模块,适于由所述子孵化器响应于该请求而孵化目标应用进程,并将钩取模块的代码和修复模块的代码注入目标应用进程。
钩取模块420,适于在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息。具体包括:
第一钩取子模块421,适于由所述钩取模块钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息。
优选地,第一钩取子模块421,包括:
类加载器获取子模块,适于钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器。
第一dex缓存信息获取子模块,适于从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
第二钩取子模块422,适于由所述钩取模块钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息。
优选地,第二钩取子模块422,包括:
第二dex缓存信息获取子模块,适于钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
修复模块430,适于由所述修复模块根据所述dex文件信息对所述dex文件进行修复。具体包括:
修复子模块431,适于分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
优选地,所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
优选地,当所述破坏方式为损坏dex偏移值和/或破坏header时,所述修复子模块431,包括:
第一数据获取子模块,适于根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
优选地,当所述破坏方式为抽取code时,所述修复子模块431,包括:
第二数据获取子模块,适于遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
优选地,当所述破坏方式为添加乱码时,所述修复子模块431,包括:
删除子模块,适于删除所述乱码。
优选地,当所述破坏方式为打散结构时,所述修复子模块431,包括:
dex文件块获取子模块,适于根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块。
dex文件块拼接子模块,适于在同一个内存中,将各dex文件块拼接为一个dex文件。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在本发明实施例中,同样可以在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;由所述修复模块根据所述dex文件信息对所述dex文件进行修复。从而实现了对dex文件的修复,避免了各应用所在的手机等移动终端被病毒感染,对移动终端用户造成损失。
另外,在本发明实施例中,会利用钩取模块分别钩取目标应用进程对OnAttach函数和openDEXfile函数的调用,从而获取dex文件信息,然后分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。从而可以进一步地提高对dex文件的修复的准确性和全面性,从而可以进一步地提高避免各应用所在的手机等移动终端被病毒感染,对移动终端用户造成损失的有效性。
实施例五
参照图5,示出了根据本发明一个实施例的一种设备实施例的结构框图,所述设备500具体可以包括如下模块:
存储器510,加载有多条可执行指令;
处理器520,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的动态脱壳设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种动态脱壳方法,包括:
在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
A2、如A1所述的方法,所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息包括:
由所述钩取模块钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息,和/或由所述钩取模块钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息。
A3、如A2所述的方法,所述钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息包括:
钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器;
从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
A4、如A2所述的方法,所述钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息包括:
钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
A5、如A1-A4其中之一所述的方法,由所述修复模块根据所述dex文件信息对所述dex文件进行修复包括:
分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
A6、如A5所述的方法,
所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
A7、如A6所述的方法,当所述破坏方式为损坏dex偏移值和/或破坏header时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
A8、如A6所述的方法,当所述破坏方式为抽取code时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
A9、如A6所述的方法,当所述破坏方式为添加乱码时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
删除所述乱码。
A10、如A6所述的方法,当所述破坏方式为打散结构时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块;
在同一个内存中,将各dex文件块拼接为一个dex文件。
A11、如A6所述的方法,所述在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程包括:
运行控制模块以向系统服务进程注入用于关闭活动管理服务与原孵化器的连接的关断模块;
由所述控制模块利用原孵化器构造子孵化器;
由所述控制模块接收在系统服务进程注册的活动管理服务的为运行目标应用程序而发起的请求,并将其传递给所述子孵化器;
由所述子孵化器响应于该请求而孵化目标应用进程,并将钩取模块的代码和修复模块的代码注入目标应用进程。
本发明还公开了B12、一种动态脱壳装置,包括:
注入模块,适于在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
钩取模块,适于在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
修复模块,适于由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
B13、如B12所述的装置,所述钩取模块,包括:
第一钩取子模块,适于由所述钩取模块钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息,和/或
第二钩取子模块,适于由所述钩取模块钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息。
B14、如B13所述的装置,所述第一钩取子模块,包括:
类加载器获取子模块,适于钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器;
第一dex缓存信息获取子模块,适于从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
B15、如B13所述的装置,所述第二钩取子模块,包括:
第二dex缓存信息获取子模块,适于钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
B16、如B12-B15其中之一所述的装置,所述修复模块,包括:
修复子模块,适于分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
B17、如B16所述的装置,
所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
B18、如B17所述的装置,当所述破坏方式为损坏dex偏移值和/或破坏header时,所述修复子模块,包括:
第一数据获取子模块,适于根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
B19、如B17所述的装置,当所述破坏方式为抽取code时,所述修复子模块,包括:
第二数据获取子模块,适于遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
B20、如B17所述的装置,当所述破坏方式为添加乱码时,所述修复子模块,包括:
删除子模块,适于删除所述乱码。
B21、如B17所述的装置,当所述破坏方式为打散结构时,所述修复子模块,包括:
dex文件块获取子模块,适于根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块;
dex文件块拼接子模块,适于在同一个内存中,将各dex文件块拼接为一个dex文件。
B22、如B17所述的装置,所述注入模块包括:
运行模块,适于运行控制模块以向系统服务进程注入用于关闭活动管理服务与原孵化器的连接的关断模块;
控制模块,适于利用原孵化器构造子孵化器;接收在系统服务进程注册的活动管理服务的为运行目标应用程序而发起的请求,并将其传递给所述子孵化器;
第一注入模块,适于由所述子孵化器响应于该请求而孵化目标应用进程,并将钩取模块的代码和修复模块的代码注入目标应用进程。
本发明还公开了C23,一种动态脱壳设备,包括:
存储器,加载有多条可执行指令;
处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
Claims (10)
1.一种动态脱壳方法,包括:
在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
2.根据权利要求1所述的方法,其特征在于,所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息包括:
由所述钩取模块钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息,和/或由所述钩取模块钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息。
3.根据权利要求2所述的方法,其特征在于,所述钩取目标应用进程对OnAttach函数的调用,以获取dex文件信息包括:
钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器;
从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
4.根据权利要求2所述的方法,其特征在于,所述钩取目标应用进程对openDEXfile函数的调用,以获取dex文件信息包括:
钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
5.根据权利要求1-4其中之一所述的方法,其特征在于,由所述修复模块根据所述dex文件信息对所述dex文件进行修复包括:
分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
6.根据权利要求5所述的方法,其特征在于,
所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
7.根据权利要求6所述的方法,其特征在于,当所述破坏方式为损坏dex偏移值和/或破坏header时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
8.根据权利要求6所述的方法,其特征在于,当所述破坏方式为抽取code时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
9.一种动态脱壳装置,包括:
注入模块,适于在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
钩取模块,适于在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
修复模块,适于由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
10.一种动态脱壳设备,包括:
存储器,加载有多条可执行指令;
处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
在目标应用进程孵化时,将钩取模块的代码和修复模块的代码注入目标应用进程;
在目标应用进程启动后,由所述钩取模块钩取目标应用进程对加载dex文件的函数的调用,以获取dex文件信息;
由所述修复模块根据所述dex文件信息对所述dex文件进行修复。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511000441.2A CN105631335B (zh) | 2015-12-25 | 2015-12-25 | 一种动态脱壳方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511000441.2A CN105631335B (zh) | 2015-12-25 | 2015-12-25 | 一种动态脱壳方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105631335A true CN105631335A (zh) | 2016-06-01 |
CN105631335B CN105631335B (zh) | 2018-10-09 |
Family
ID=56046259
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511000441.2A Active CN105631335B (zh) | 2015-12-25 | 2015-12-25 | 一种动态脱壳方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105631335B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648755A (zh) * | 2016-11-29 | 2017-05-10 | 北京奇虎科技有限公司 | 一种在安卓art环境中动态加载dex的方法及装置 |
CN106778088A (zh) * | 2016-11-28 | 2017-05-31 | 四川长虹电器股份有限公司 | 基于Hook技术的动态加载方法 |
CN108229148A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 一种基于Android虚拟机的沙箱脱壳方法及系统 |
CN108491235A (zh) * | 2018-03-21 | 2018-09-04 | 北京理工大学 | 结合动态加载和函数Native化的DEX保护方法 |
CN108846280A (zh) * | 2018-06-29 | 2018-11-20 | 江苏通付盾信息安全技术有限公司 | 应用文件的脱壳方法及装置 |
CN108985015A (zh) * | 2018-06-29 | 2018-12-11 | 江苏通付盾信息安全技术有限公司 | 应用文件的脱壳方法及装置 |
CN109684846A (zh) * | 2018-12-28 | 2019-04-26 | 微梦创科网络科技(中国)有限公司 | 一种文件提取方法及装置 |
CN112040239A (zh) * | 2020-09-14 | 2020-12-04 | 国网重庆市电力公司电力科学研究院 | 一种基于avi格式文件结构的文件修复方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8892876B1 (en) * | 2012-04-20 | 2014-11-18 | Trend Micro Incorporated | Secured application package files for mobile computing devices |
CN104376255A (zh) * | 2014-11-28 | 2015-02-25 | 北京奇虎科技有限公司 | 应用程序运行控制方法与装置 |
CN104462880A (zh) * | 2014-11-28 | 2015-03-25 | 北京奇虎科技有限公司 | 应用程序加壳配置方法与装置 |
-
2015
- 2015-12-25 CN CN201511000441.2A patent/CN105631335B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8892876B1 (en) * | 2012-04-20 | 2014-11-18 | Trend Micro Incorporated | Secured application package files for mobile computing devices |
CN104376255A (zh) * | 2014-11-28 | 2015-02-25 | 北京奇虎科技有限公司 | 应用程序运行控制方法与装置 |
CN104462880A (zh) * | 2014-11-28 | 2015-03-25 | 北京奇虎科技有限公司 | 应用程序加壳配置方法与装置 |
Non-Patent Citations (1)
Title |
---|
JACK_JIA: "《blog.csdn.net/androidsecurity/article/details/9428861》", 10 August 2013 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778088A (zh) * | 2016-11-28 | 2017-05-31 | 四川长虹电器股份有限公司 | 基于Hook技术的动态加载方法 |
CN106648755A (zh) * | 2016-11-29 | 2017-05-10 | 北京奇虎科技有限公司 | 一种在安卓art环境中动态加载dex的方法及装置 |
CN108229148A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 一种基于Android虚拟机的沙箱脱壳方法及系统 |
CN108229148B (zh) * | 2016-12-21 | 2022-06-21 | 武汉安天信息技术有限责任公司 | 一种基于Android虚拟机的沙箱脱壳方法及系统 |
CN108491235A (zh) * | 2018-03-21 | 2018-09-04 | 北京理工大学 | 结合动态加载和函数Native化的DEX保护方法 |
CN108846280A (zh) * | 2018-06-29 | 2018-11-20 | 江苏通付盾信息安全技术有限公司 | 应用文件的脱壳方法及装置 |
CN108985015A (zh) * | 2018-06-29 | 2018-12-11 | 江苏通付盾信息安全技术有限公司 | 应用文件的脱壳方法及装置 |
CN108846280B (zh) * | 2018-06-29 | 2021-04-02 | 江苏通付盾信息安全技术有限公司 | 应用文件的脱壳方法及装置 |
CN109684846A (zh) * | 2018-12-28 | 2019-04-26 | 微梦创科网络科技(中国)有限公司 | 一种文件提取方法及装置 |
CN112040239A (zh) * | 2020-09-14 | 2020-12-04 | 国网重庆市电力公司电力科学研究院 | 一种基于avi格式文件结构的文件修复方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105631335B (zh) | 2018-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105631335A (zh) | 一种动态脱壳方法、装置和设备 | |
CN105427096B (zh) | 支付安全沙箱实现方法及系统与应用程序监控方法及系统 | |
CN111033468B (zh) | 实施不同类型的区块链合约的系统和方法 | |
CN102332072B (zh) | 用于检测恶意软件和管理恶意软件相关信息的系统和方法 | |
CN103679029A (zh) | 一种修复山寨应用程序的方法及装置 | |
CN104008340B (zh) | 病毒查杀方法及装置 | |
CN102999720B (zh) | 程序鉴别方法和系统 | |
CN105574411B (zh) | 一种动态脱壳方法、装置和设备 | |
US7634806B2 (en) | Peer assembly inspection | |
US20150371040A1 (en) | Method, Device And System For Processing Notification Bar Message | |
CN103632096A (zh) | 一种对设备进行安全检测方法和装置 | |
CN108229107B (zh) | 一种Android平台应用程序的脱壳方法及容器 | |
US9384364B1 (en) | System and method of controlling access of a native image of a machine code to operating system resources | |
CN104517054A (zh) | 一种检测恶意apk的方法、装置、客户端和服务器 | |
CN103001947A (zh) | 一种程序处理方法和系统 | |
CN110084064B (zh) | 基于终端的大数据分析处理方法及系统 | |
CN104573497B (zh) | 一种启动项的处理方法和装置 | |
CN114065204A (zh) | 一种无文件木马查杀方法及装置 | |
CN105205398B (zh) | 一种基于apk加壳软件动态行为的查壳方法 | |
US9367686B1 (en) | System and method for antivirus checking of native images of software assemblies | |
CN114282212A (zh) | 流氓软件识别方法、装置、电子设备及存储介质 | |
CN101950339B (zh) | 一种电脑安全防护方法和系统 | |
CN102999721B (zh) | 一种程序处理方法和系统 | |
CN103713945B (zh) | 游戏的识别方法和装置 | |
CN104484598A (zh) | 一种保护智能终端安全的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220725 Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015 Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Patentee before: Qizhi software (Beijing) Co.,Ltd. |