CN105574411B - 一种动态脱壳方法、装置和设备 - Google Patents

一种动态脱壳方法、装置和设备 Download PDF

Info

Publication number
CN105574411B
CN105574411B CN201510997647.0A CN201510997647A CN105574411B CN 105574411 B CN105574411 B CN 105574411B CN 201510997647 A CN201510997647 A CN 201510997647A CN 105574411 B CN105574411 B CN 105574411B
Authority
CN
China
Prior art keywords
dex
file
function
information
application
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.)
Active
Application number
CN201510997647.0A
Other languages
English (en)
Other versions
CN105574411A (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 Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing 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 Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201510997647.0A priority Critical patent/CN105574411B/zh
Publication of CN105574411A publication Critical patent/CN105574411A/zh
Application granted granted Critical
Publication of CN105574411B publication Critical patent/CN105574411B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities

Abstract

本发明实施例提供了一种动态脱壳方法、装置和设备,涉及计算机领域。所述方法包括:反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;根据所述dex文件信息对所述dex文件进行修复。本发明解决了带病毒的应用被加壳后,由于dex文件被隐藏,而导致很难解析dex文件,从而很难辨析病毒的问题,取得了可以在免Root的情况下对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件的有益效果。

Description

一种动态脱壳方法、装置和设备
技术领域
本发明涉及计算机技术领域,特别是涉及一种动态脱壳方法、一种动态脱壳装置和一种动态脱壳设备。
背景技术
随着智能技术的发展,出现了多种支持智能手机的系统。比如Android(安卓)系统。Android是一种以Linux为基础的开放源码操作系统,主要使用于手机等移动终端。Android平台由操作系统、中间件、用户界面和应用软件组成。
随着Android系统的市场占有率的增加,越来越多的开发者基于Android系统开发APP(Application,应用),使用户使用Android手机更方便。
而且,出于安全或保密等因素的原因,越来越多的应用会被加壳,其中的加壳可以理解为,利用特殊的算法,对应用的dex文件(Dalvik Executable文件,Dalvik虚拟机可执行文件)里的资源进行压缩,改变其原来的特征码,隐藏一些字符串等等,使一些资源编辑软件不能正常打开或者修改。对于加壳后的应用,其中dex文件中包含的代码不能全部可见。
但是在实际应用中,可能在应用的dex文件中存在病毒等对系统有危害的代码,若该应用被加壳,则其dex文件被隐藏,从而其中的病毒可能很难被辨识。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种动态脱壳方法和相应的一种动态脱壳装置。
依据本发明的一个方面,提供了一种动态脱壳方法,包括:
反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;
根据所述dex文件信息对所述dex文件进行修复。
优选地,所述当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息包括:
当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息;和/或当监控到目标应用程序调用openDEXfile函数,则钩取所述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文件信息对所述dex文件进行修复。
优选地,所述钩取模块,包括:
第一钩取子模块,适于当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息;
和/或,第二钩取子模块,适于当监控到目标应用程序调用openDEXfile函数,则钩取所述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文件被隐藏,而导致很难解析dex文件,从而很难辨析病毒的问题,取得了可以在免Root的情况下对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件的有益效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图;
图2示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图;
图3示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框图;
图4示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框 图;
图5示出了根据本发明一个实施例的一种设备实施例的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
参照图1,示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图,具体可以包括如下步骤:
本领域技术人员应当知晓,本发明实施例是基于免Root提权而提出的,然而,提权操作只是Android系统所实施的权限管理控制,本发明也当然地适用于已经Root提权的Android操作系统中。
本发明实施例是基于沙箱原理而提出的,故而,本领域技术人员得以结合公知的沙箱实现原理来理解本发明的实施。沙箱的作用是为目标应用程序的提供相对封闭的运行环境,使应用程序对系统的资源访问,借助沙箱安全策略的应用,而被限制在规定的范围之内。因而,本发明的实质在于提供一种沙箱实例,从两个方面来实现,第一方面是提供构造目标应用程序的解决方案,第二方面是提供与前者相应的运行控制方案。这两个方面可以被集成到一个沙箱实现软件中,利用其第一方面的实现对目标应用程序进行加工,进而利用其第二方面的实现,为目标应用程序提供安全的沙箱运行环境。
有鉴于此,在本发明实施例中,首先介绍应用程序加壳配置方法,主要体现沙箱实例的第一方面,用于加工适配于相应的沙箱运行环境的目标应用程序,该方法包括如下步骤:
1、解析所述应用程序原安装包,获得其内部文件。
这里所称的应用程序,即前文所称的目标应用程序。由于本发明基于免Root需求而提出,根据Android固有的原理,所述目标应用程序一般为用户 自行安装的第三方应用。
另外,本发明所述的应用程序,是经过加壳后的应用程序,即其对应的dex文件是需要修复的,需要注意的是此处的加壳与即将介绍的应用程序加壳配置方法的由宿主应用程序对应用程序进行的加壳是两个概念。
例如,若某一开发者获取应用的原始安装包为A,其可能对该A进行了修改,比如添加了病毒,然后对该A进行加壳,得到的应用程序原安装包A1,那么A1为本步骤的解析的应用程序原安装包。而本发明实施例采用宿主应用程序对应用程序加壳配置方法是对A1进行加壳,变成A2。另外,利用本发明所述的动态脱壳方法,将A1进行脱壳,将其中的dex文件恢复成原始的安装包A中的dex文件。
本发明可以通过接管安装器,来实现对第三方应用的安装控制。具体而言,可以由用户通过本发明提供的沙箱应用程序下载并安装该第三方应用而获得所述原安装包,或者,也可由该沙箱应用程序从/data/app中获取相应安装包文件。对于已装应用,可以本发明处理完毕之后,诱导用户卸载旧应用,安装新应用。
解析应用程序的原安装包的手段,为本领域技术人员所熟知。安装包APK文件本质上是利用ZIP压缩技术结合签名技术实现的压缩包,因此,一方面可以通过解压技术释放其内部文件,另一方面还可通过Apktool之类的工具软件获取其内部文件(在这种情况下其代码文件会被反向为.smali文件)。本领域技术人员均能娴熟地利用这些公知技术在一个给定目录中对原安装包进行处理,从而通过内存操作(非文件操作)的方式来获得其中的内部文件。
Android安装包的内部文件,参阅下表1所示:
表1 APK文件内部的文件结构
本发明通过解析所述目标应用程序的原安装包,可以获得表中所附的目录和文件,在此基础上,参照实现作为宿主应用程序的加壳安装包,详见后一步骤。
2、构造集合所述原安装包与所述内部文件的加壳安装包。
以下先结合表1对本发明构造所述加壳安装包所需的内部文件进行介绍。
表1所列的各种属于安装包的内部文件中,MATA-INF目录是在对其他文件打包后签名而生成的,因此,后续生成加壳安装包时,会有加壳安装包自身的签名而产生相同的目录结构和文件,故而原安装包的相应目录结构和文件不会被置入加壳安装包中。
res\目录及其下包含的资源,是目标应用程序运行过程中需引用的资源,目标应用程序在运行时可以通过ID进行访问。因而,可以结合程序实现的难度考虑,而考虑是否将其中的部分资源文件置入后续的加壳安装包中。本实施例关注其中的主图标文件例如icon.png文件,该文件即目标应用程序的 图标文件,目标应用程序的安装包正常安装时,会在桌面显示该图标文件作为其快捷图标。本实施例中,对该图标的图样进行局部修改,例如为其图样右下角附加一锁头样式,使其成为带特定标记的图标,并将修改后的图标文件作为加壳安装包的图标文件,存放于加壳安装包的res\目录下。由此,加壳安装包安装后,用户可以通过其图标认知该程序已被进行沙箱防护。当然,也可以考虑将res\目录下的其它资源文件作为构造加壳安装包的内部文件引入,但在后续反射调用该目标应用程序时,需进行资源引用重定向,以便目标应用能够正常引用到正确资源。
assets\目录用于存放广义的资源文件,例如安装包文件、字体文件等不可压缩的文件,可以通过路径来访问该目录中的资源。本实施例中,不将原安装包的assets\目录的文件引入,是为了减小加壳安装包的体积,在加壳安装包的assets\目录中,存放将被反射调用的目标应用程序的原安装包。
resources.arsc文件主要是建立对安装包所指向的应用程序的索引,在本实施例中也不在加壳安装包中使用原安装包的同名文件。
lib\目录下的文件,主要是存放.so动态库文件,该原安装包的动态库文件是否被一同集合到加壳安装包中,同理,可以结合程序实现复杂度加以考虑,按需选用。本实施例中不考虑将其移置于加壳安装包中。
在本发明一种实施例中,可以预先配置加壳安装包与原安装包的包名相同,其具体过程如下:
Androidmanifest.xml文件,是安装包中较为重要的全局配置文件,其负责向系统注册Android系统的四大组件,以及向系统申请权限等。在加壳安装包中,将其作为需要加入加壳安装包的重要内部文件进行考虑,以与原安装包完全一致的副本被包含到加壳安装包中。由于加壳安装包中的Androidmanifest.xml文件即为原安装包的同名文件,其包名相同,从而加壳安装包在系统中安装运行宿主应用程序之后,以Androidmanifest.xml向系统注册各个组件和申请系统权限,以此便建立了各个组件的入口,使经反射调用的目标应用程序的各个组件均可以结合所述逆向规则而被ActivityManagerService调用,而不必为所述各个组件构造ActivityThread和 提供相应的LoadedAPK对象,省去运行上下文环境的程序实现环节。同理,反射调用所导致的PackageManagerService对各大组件是否合法注册进行校验的问题,也将因Androidmanifest.xml的注册结合所述的逆向规则而被克服。
相应的,classes.dex为安装包中的代码文件(二进制代码可执行文件)。在本发明中,将被预构造的同名文件所替换,但该同名文件与其他文件一起被集合到所述加壳安装包中。本发明所提供的classes.dex,植入有加载模块stub(),通过该加载模块,可以进一步启动一监控模块,该监控模块用于监控经反射调用的整个目标应用程序的活动过程,因此,一般先于所述目标应用程序而加载。该监控模块便是沙箱运行环境的实现者,负责实现两方面的功能,一方面通过监控目标应用程序对资源的访问,对资源引用进行重定向,使目标应用程序进程能够实现对正确资源的正常引用。具体而言,如果相关资源是被反射调用的原安装包的资源,则通过反射调用机制调用该原安装包的资源供引用,实现重定向。如果是系统资源或者指向宿主应用程序的已安装资源,则可允许其默认引用保证其正常引用关系。如果是I/O操作,也可以藉此进行重定向。另一方面通过监控目标应用程序对系统资源的访问,例如是否请求发送短信息,来依据安全策略确定是否允许其操作,当不允许这种实施这种行为时,可以向相关调用指令返回自定义数据,例如返回空值,从而确保能杜绝一些非法操作。所述监控模块的技术实现,采用Hook技术,利用钩子函数对相关调用指令的入口点进行监视,截获此一调用指令,转向执行相应的钩子函数,由该钩子函数依据沙箱自身逻辑来应答该调用指令,从而达到前述的目的。
或者,在本发明一种实施例中,可以预先配置加壳安装包的包名不同于目标应用程序的包名,其具体过程如下:
对该Androidmanifest.xml配置文件进行修改。修改的内容主要是因应加壳安装包的包名不同于目标应用程序的包名,故而,加壳安装包中的Androidmanifest.xml文件以原安装包的同名文件为蓝本,将其中涉及包名的 字符串,修改成加壳安装包的包名。具体涉及有关四大组件(Activity,Service,Broacast Receiver,Content Provider)及相关动作(Action)的声明中对包名的引用处。本发明的推荐实施例中,是在原安装包的包名基础上附加前缀,例如,原安装包的包名是com.apk,则加壳安装包的包名可以是apphost.com.apk。诚然,本领域技术人员可以灵活改变这一改名规则,只要在程序运行过程中可以构造利用逆向规则将两个包名建立对应进而实现重定向即可。因此,同样地,加壳安装包在系统中安装运行宿主应用程序之后,以Androidmanifest.xml向系统注册各个组件和申请系统权限,以此便建立了各个组件的入口,使经反射调用的目标应用程序的各个组件均可以结合所述逆向规则而被ActivityManagerService调用,而不必为所述各个组件构造ActivityThread和提供相应的LoadedAPK对象,省去运行上下文环境的程序实现环节。同理,反射调用所导致的PackageManagerService对各大组件是否合法注册进行校验的问题,也将因Androidmanifest.xml的注册结合所述的逆向规则而被克服。
相应地,classes.dex为安装包中的代码文件(二进制代码可执行文件)。在本发明中,将被预构造的同名文件所替换,但该同名文件与其他文件一起被集合到所述加壳安装包中。本发明所提供的classes.dex,植入有加载模块stub(),通过该加载模块,可以进一步启动一监控模块,该监控模块用于监控经反射调用的整个目标应用程序的活动过程,因此,监控模块先于所述目标应用程序而加载。该监控模块便是沙箱运行环境的实现者,负责实现两方面的功能,一方面通过监控目标应用程序对资源的访问,这一资源包括原安装包res\、assets\的资源,也包括涉及包名调用的Intent,还包括系统资源等广义资源。通过对资源引用进行重定向,使目标应用程序进程能够实现对正确资源的正常引用。具体而言,如果相关资源是被反射调用的原安装包的资源,则通过反射调用机制调用该原安装包的资源供引用,实现重定向。如果是系统资源或者指向宿主应用程序的已安装资源,则可允许其默认引用保证其正常引用关系。如果是I/O操作,也可以藉此进行重定向。需要注意的是,当这种广义资源引 用涉及宿主应用程序与目标应用程序之间的包名差异时,如前所述,应当利用所述的逆向规则来确保目标应用程序所引用的资源正确无误。另一方面通过监控目标应用程序对系统资源的访问,例如是否请求发送短信息,来依据安全策略确定是否允许其操作,当不允许这种实施这种行为是,可以向相关调用指令返回自定义数据,例如返回空值,从而确保能杜绝一些非法操作。
所述监控模块的技术实现,采用Hook技术,利用钩子函数对相关调用指令的入口点进行监视,截获此一调用指令,转向执行相应的钩子函数,由该钩子函数依据沙箱自身逻辑来应答该调用指令,从而达到前述的目的。
这里需要补充的是:术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子hook函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。本实施例即可采用钩子hook函数接管所述应用程序运行时所需的安装自校验操作。
准备好上述的内部文件和原安装包后,本发明进一步将上述选定的内部文件和原安装包进行打包,打包后再行签名,即完成所述加壳安装包的构造,原安装包位于加壳安装包的assets\目录中,成为加壳安装包的附带资源。进一步可通过下一步骤安装该加壳安装包,从而安装宿主应用程序。
考虑到所生成的加壳安装包的文件将大于原安装包,本发明进而可以对加壳安装包中的代码文件进行压缩,生成压缩文件和用于还原所述压缩文件为代码文件的附加文件,这一压缩过程同理适用于所述原安装包中。只要后续安装过程中依据逆向算法,利用附加文件对所述压缩文件在内存中进行还原,即可使宿主应用程序和目标应用程序实现正常运行。经过压缩的安装包,其增量接近于零甚至小于零,因此效率较高。
3、安装该加壳安装包。
如前所述,本发明的实施场景之一,未获Root权限,因此,这种场景中,并不能通过本发明实现静默安装。这种情况下,本发明优先通过调用系统安装器,以启动安装界面,指导用户完成该加壳安装包的安装。
若加壳安装包的包名与目标应用程序的包名相同,则宿主应用程序即指所述加壳安装包安装后的程序,而所述安装包即指存放于加壳安装包的assets\目录下的应用程序原安装包。安装后,宿主应用程序反射调用的目标应用程序的安装包,属于宿主应用程序的已安装资源文件。反射调用该安装包,即意味着运行所述目标应用程序。
加壳安装包的包名不同于目标应用程序的包名,则安装该加壳安装包后,其中的Androidmanifest.xml中的文件便完成向系统的注册,若宿主应用程序所使用的包名与目标应用程序的包名不同,但后续可通过利用所述逆向规则实现的程序克服,故宿主应用程序能够通过ActivityManagerService找到经反射调用而运行的目标应用程序的组件的入口,并且,目标应用程序的组件也能顺利通过系统PackageManagerService的查验,程序实现难度大减,而且应用程序的运行效率也将大大提高。
步骤110,反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序。
本发明所采用的反射机制可以为Java反射机制,Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象的方法的功能即为JAVA语言的反射机制。
在本发明推荐的一个实例中,所述宿主应用程序将首先找到其安装后的由其assets携带的安装包APK文件,然后通过一个代理组件(Activity)去执行APK中的Activity,从而实现对目标应用程序的反射调用。宿主应用程序实施反射调用首先需要通过类加载器来实现,具体是通过DexClassLoader()来实现。利用这一类加载器来实现对安装包中的活动组件的调用是本领域技术人员所掌握的手段,恕不赘述。程序实现时,通过一个Proxy方法来让宿主应用程序接管目标应用程序的执行,一旦被接管以后,目标应用程序所有的执行均通过proxy实现,且Context也变成了宿主程序的Context。宿主应用程序其实就是个空壳,它只是把原安装包apk加载到自己的内部去执行。这种情况下,尽管宿主应用程序已经采用目标应用程序的Androidmanifest.xml向系统注册,由于运行上下文环境context可能不同,仍可能会导致出现资源访问上的困难,有时甚至会发现不能访问安装包中的资源的情况。而这种困难的程度,取决于前述应用配置方法中,被构造到加壳应用程序中的资源的多寡,当然也关系到包名相同或者不同的问题。不管如何,本领域技术人员可以借助后续揭示的方式加以克服。
目标应用程序的运行将涉及到对资源的引用,这种引用的处理技巧虽为本领域技术人员所知晓,但也较为繁杂,因此本发明将尽量通过示例辅助本领域技术人员快速理解本发明所提供的若干实例。
诚然,如果目标应用程序要访问的资源已经被已安装的宿主应用程序注册到系统中,例如前文所述的主图标文件,则其对资源的引用将非常直接,通过对宿主应用程序的已安装资源的调用即可满足目标应用程序的资源访问。除此之外,则需要附加一些额外考虑。
如果由于构造加壳安装包导致宿主应用程序的Context不能被目标应用程序正常访问,可以考虑改进这一问题,向原安装包借用资源。由于目标应用程序安装包APK没有安装,因此就无法通过宿主应用程序的Context去取得APK中的资源,比如图片、文本等。APK在被加载运行时所采用的上下文是宿主应用程序的上下文,用别人的Context是无法得到自己的资源的。由此可知,宿主应用程序除了要能加载应用程序中的各组件外,还要为应用程序构造其所需的运行环境。
Android应用程序在运行的过程中,是通过一个称为AssetsManager资源管理器来读取打包在APK文件里面的资源文件的。应用程序的每一个Activity组件都关联一个ContextImpl对象,这个ContextImpl对象就是用来描述activity组件的运行上下文环境的。调用这个ContextImpl对象的成员函数init来执行初始化Activity组件运行上下文环境的工作,其中就包括创建用来访问应用程序资源的Resources对象和AssetsManager对象的工作。其中, ContextImpl.init函数就定义在文件frameworks/base/core/java/android/app/ContextImpl.java中。ContextImpl.init函数中的参数packageInfo指向的是一个loadedApk对象,这个loadedApk对象描述的是当前正在启动组件所属的Apk。用来访问应用程序资源的Resources对象是通过调用参数packageInfo所指向的是一个loadedApk对象的成员函数getResources来创建的。由此可知,为了创建Resources对象,以提取或访问应用程序资源,如果出于访问安装包Apk中的资源的需要,本实施例还可以分别为应用中的各组件构建一个loadedAPK对象。
同理,适应具体的加壳安装包的配置,根据需要,可以考虑对资源Resources类的构造函数中的成员变量mResource、mAssets进行修改,以在启动各所述组件时通过所述mResource、mAssets来调取相应的资源。
同理,也可考虑对资源管理器AssetsManager中的AssetsPath函数进行修改,修改后的所述AssetsPath函数指向所述目标应用程序安装包中的资源文件(通常指assets\),以在启动各所述组件时通过所述AssetsManager调取所述AssetsPath函数来获取所述资源文件中的对应资源。
其中,Resources类的构造函数定义在文件frameworks/base/core/java/android/content/res/Resources.java中。因为Resources类的构造函数将参数assets所指向的一个AssetManager对象保存在成员变量mAssets中,即mAssets=assets,使得Resources类的构造函数可以通过mAssets来访问应用程序的资源。因此,本实施例可通过对资源类的构造函数中的成员变量mAssets进行修改,来实现通过mAssets调取应用程序所需的资源。诚然,上述实现方式也采用反射机制来实现。
当然,本实施例还可对资源管理器AssetsManager中的AssetsPath函数进行修改,如通过AssetsManager对象的成员函数addAssetsPath来添加指定的应用程序资源文件路径(如:路径为/data/app/com.qihoo.box-1.apk)到AssetsPath函数中。由于addAssetsPath是隐藏API我们无法直接调用,所以只能通过反射机制来实现。
在本发明实施例中,还需要在加载模块中实现类加载器,以加载各所述 组件中的相应加载类。可采用如下方式实现:一种方式是将所述应用程序的路径添加到类加载器中的路径列表pathList中,构造根据所述应用程序路径查找加载类的类加载器;另一种方式是对类加载器中的成员变量进行修改,构造首先用super找加载类的类加载器。由于利用类加载器动态加载应用程序的技术已为本领域技术人员所熟知,故此处仅给出示例性说明,恕不赘述。
在本发明另一实施例中,对于包名不同的上述过程与包名类似,但是:在程序运行过程中,如前所述,需要考虑所述利用逆向规则来规避宿主应用程序与目标应用程序包名差异的问题。可以将逆向规则实现为一个供调度的函数,结合本发明所述的监控模块所实现的有关资源重定向的方面,对相关可能涉及包名引用的调用指令进行监控,当出现包名引用时,便可调度前述利用逆向规则实现的函数来修改所引用的包名,从而使两者建立一一对应关系,实现资源的正常引用。这里所称的调用的指令,也即监控模块利用钩子函数所挂钩的指令,包括诸如startActivity、startService、loadClass、sentBroacast、bindServer等。通常这些指令利用意图即Intent进行参数传递,而Intent中包含对包名的引用,这种情况下,钩子函数即发挥其作用,对包名进行修改,使这些调用指令能够调用到正确的资源。例如,目标应用程序要调用其自身的一个Activity,在Intent中包含活动组件com.apk.activty,通过startActivity来调用,钩子函数截获这一调用指令,然后利用所述逆向规则所实现的函数,将其包名进行修改,对应到已经注册的活动组件apphost.com.apk.activity,由此便可由宿主应用程序做进一步去反射调用目标应用程序的相应组件。诚然,尽管包名不同,宿主应用程序在反射调用时,其进行类加载时,也会遵守同一规则去调用正确的目标应用程序中的资源。以上也顺便揭示了后续即将揭示的监控模块所实现的一方面功能,故而后续有关监控模块的功能实现的介绍将被简化。
步骤120,由宿主应用程序调用监控模块,对目标应用程序的活动进行监控。
用户可以通过本发明提供的沙箱应用程序下载并安装该第三方应用而获得所述原安装包,或者,也可由该沙箱应用程序从/data/app中获取相应安 装包文件。对于已装应用,可以本发明处理完毕之后,诱导用户卸载旧应用,安装新应用。
沙箱是一种按照安全策略限制程序行为的执行环境,目前已经广泛实用于各种操作系统中。
解析应用程序的原安装包的手段,为本领域技术人员所熟知。安装包APK文件本质上是利用ZIP压缩技术结合签名技术实现的压缩包,因此,一方面可以通过解压技术释放其内部文件,另一方面还可通过Apktool之类的工具软件获取其内部文件(在这种情况下其代码文件会被反向为.smali文件)。本领域技术人员均能娴熟地利用这些公知技术在一个给定目录中对原安装包进行处理,从而获得其中的内部文件。需要强调的是,本发明所称获得其内部文件,推荐以公知的内存操作的方式而获得,而非指文件操作。
作为一个沙箱实例,使目标应用程序运行于沙箱运行环境中,通常通过所述加载模块先于所述目标应用程序的反射调用而优先调用监控模块
在本发明实施例中,监控模块是沙箱运行环境的核心实现者,负责实现两方面的功能,一方面通过监控目标应用程序对资源的访问,对资源引用进行重定向,使目标应用程序进程能够实现对正确资源的正常引用。具体而言,如果相关资源是被反射调用的原安装包的资源,则通过反射调用机制调用该原安装包的资源供引用,实现重定向。如果是系统资源或者指向宿主应用程序的已安装资源,则可允许其默认引用保证其正常引用关系。如果是I/O操作,也可以藉此进行重定向。例如,上述有关对目标应用程序的安装包的资源进行的引用,既可以通过对上述的AssetsManager的修改来实现,也可以通过监控具体调用资源的具体调用指令,利用Hook技术来实现。另一方面通过监控目标应用程序对系统资源的访问,例如是否请求发送短信息,来依据安全策略确定是否允许其操作,当不允许这种实施这种行为时,可以向相关调用指令返回自定义数据,例如返回空值,从而确保能杜绝一些非法操作。所述监控模块被注册为服务进程,以钩子函数关联目标应用程序活动进程的调用指令以实现对所述目标应用程序的活动监控。所述监控模块利用钩子函数对相关调用指令的入口点进行监视,截获此一调用指令,转向执行相应的 钩子函数,由该钩子函数依据沙箱自身逻辑来应答该调用指令,从而达到前述的目的。涉及到监控模块对于监视活动的处理,尤其是安全控制方面,将在后文中给出更为具体的实例进行说明。
步骤130,当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息。
其中,加载dex文件的函数,包括可以加载dex文件相关信息的函数,例如OnAttach函数、openDEXfile函数等。
在目标应用进程启动后,钩取模块可以钩取目标应用进程对上述的加载dex文件的函数的调用,同时钩子函数可以继续执行所钩取的函数,从而可以获取到dex文件信息。
例如,可以利用钩取模块中的钩子函数,分别钩取上述的OnAttach函数、openDEXfile函数,然后钩子函数可以继续执行上述OnAttach函数、openDEXfile函数的功能,从而可以分别获取OnAttach函数和openDEXfile函数加载的dex文件相关信息。
步骤140,根据所述dex文件信息对所述dex文件进行修复。
如前述,经步骤130获取的dex文件信息中的代码(code)是被加壳的,不完全可见的。其加壳的具体方式可以有很多种,例如,dex文件的偏移值被损坏、其中的部分代码被抽取、dex文件的结构被打散等情况。
在本发明实施例中,可以利用修复模块根据获取的dex文件信息对dex文件进行修复。
在具体实施过程中,对dex文件的修复方法可以为:针对dex文件的加壳方式,利用与各加壳方式对应的修复方式相对应地破解其加壳方式。例如,若某dex文件的加壳的具体方式为dex文件的偏移值被损坏,则可以利用恢复偏移值的修复方式,对该dex文件进行修复;若某dex文件的加壳的具体方式为其中的部分代码被抽取,则可以利用恢复代码的修复方式,查找出其被抽取的代码段及位置,然后该dex文件进行修复。
在本发明实施例中,可以反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标 应用程序;由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;根据所述dex文件信息对所述dex文件进行修复。由此可以在免Root的情况下对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件。
实施例二
参照图2,示出了根据本发明一个实施例的一种动态脱壳方法实施例的步骤流程图,具体可以包括如下步骤:
步骤210,反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序。
步骤220,由宿主应用程序调用监控模块,对目标应用程序的活动进行监控。
步骤230,当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息。
在实际应用中,目标应用进程通过调用OnAttach函数,可以获取dex文件信息。而且,Android系统中的每个应用进程都会调用OnAttach函数。
所以,在本发明实施例中,可以利用钩取模块,钩取目标应用进程对OnAttach函数的调用,然后该钩取模块可以继续执行与OnAttach函数一致的操作,从而可以获取到调用OnAttach函数所获取的dex文件信息。
优选地,步骤230,包括:
子步骤231,钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器。
其中的类加载器(ClassLoader)的作用包括加载当前目标应用的类到Java虚拟机中。在本发明实施例中,所有属于当前目标应用的类(Class)都是用与之对应的类加载器加载到本发明实施例的Dalvik虚拟机中。
在实际应用中,各应用进程调用OnAttach函数的过程中,会传输给OnAttach函数一定的参数。所以,在本发明实施例中,钩取OnAttach函数,利用OnAttach函数接收到的参数,从而可以获取类加载器。
子步骤232,从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
其中的cookie信息可以记录操作痕迹信息,在本发明实施例中,从某个类加载器获取的cookie信息中记录该类加载器的操作痕迹,例如,对各种类的加载等操作痕迹。
如前述,dex文件中包括全部应用代码,其中有很多类。所以,在cookie信息包括dex缓存信息。通过从类加载器中获取cookie信息,进而可以获取dex缓存信息。
步骤240,当监控到目标应用程序调用openDEXfile函数,则钩取所述openDEXfile函数以获取dex文件信息。
在实际应用中,在实际应用中,可能会通过一个dex文件加载一个第三方的dex文件,进而启动该第三方的dex文件对应的应用。则在第三方的dex文件加载的过程中,会调用openDEXfile函数以从Android系统内存中加载第三方的dex文件。
所以,在本发明实施例中,利用钩取模块钩取目标应用进程对openDEXfile函数的调用,然后钩取模块继续执行与openDEXfile函数同样的操作,从而可以获取dex文件信息。
需要说明的是,在本发明实施例中,步骤230和步骤240可能只存在一个,对此,本发明实施例不加以限定。若两者都存在,则步骤240也可以在步骤230之前执行,对此,本发明实施例也不加以限定。
子步骤241,钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
同样,在实际应用中,各应用进程调用openDEXfile函数的过程中,会传输给openDEXfile函数一定的参数。所以在本发明实施例中,可以钩取openDEXfile函数,根据目标应用进程传输给openDEXfile函数的参数,将dex文件信息加载到缓存中,然后从缓存中获取dex缓存信息。
当然,也可以不将dex文件信息加载到缓存中,而直接获取dex文件信 息,对此,本发明实施例不加以限定。
步骤250,分析dex的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
在实际应用中,dex文件的破坏方式可能有很多种。优选地,在本发明实施例中,破坏方式包括:损坏dex偏移值、破坏header(头文件)、抽取code(代码)、打散结构、添加乱码。
其中,损坏dex偏移值是指dex文件的偏移值被改变,在实际应用中,可以通过解析dex文件的偏移值信息,判断dex偏移值是否被损坏。
header是dex文件中的头文件,其中包含dex偏移值和size(长度)信息等,所以,在本发明实施例中,可以通过判断dex偏移值是否被损坏进而判断header是否被破坏。
抽取code,包括dex文件中的部分代码被转存到其他地方,例如被转存在系统内存中。在实际应用中,可以通过判断Code off的指针是否指向dex文件,进而确定其中的code是否被抽取。若Code off的指针不指向dex文件,而指向内存中,则可确定其中的code被抽取。
打散结构,包括dex文件的组成部分并是集中存储在内存的某一处。此时dex文件的有些偏移值指向内存中的其他地方,但是dex文件的偏移值都是正确的。
添加乱码,包括在原始的dex文件中添加乱码。在实际应用中,可以通过对内存进行反编译发现添加乱码的信息,例如添加乱码的位置与乱码的内容等。
所以,在本发明实施例中,可以分析dex文件的破坏方式,然后针对不同的破坏方式,采用相应的修复方式对所述dex文件进行修复。
优选地,当所述破坏方式为损坏dex偏移值和/或破坏header时,步骤250,包括:
子步骤251,根据所述header里面size(长度)信息重新计算偏移,并根据所述偏移获取真实的数据。
在实际应用中,若破坏方式为损坏dex偏移值和/或破坏header,其中的 偏移值都会被改变,但是对于此类两种破坏方式,header里面的size信息是不会发生变化的,因此,在本发明实施例中,可以基于header里面size信息重新计算偏移值,从而可以对破坏方式为损坏dex偏移值和/或破坏header的dex文件进行修复。
优选地,当所述破坏方式为抽取code时,步骤250,包括:
子步骤252,遍历每个类并在DVM(Dalvik Virtual Machine,Dalvik虚拟机)虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
若dex文件的破坏方式为抽取code,则在本发明实施例中,可以遍历每个类并在Dalvik虚拟机中实例化,从而可以获取被抽取的code信息,例如被抽取的code的位置及内容等,进而可以从DVM虚拟机中获取原始dex文件真实的code数据。
其中,可以利用任何一种现有的遍历方法实现对每个类的遍历,对此,本发明实施例不加以限定。另外,在Dalvik虚拟机中对类进行实例化使本领域的公知技术,在此不再赘述。
优选地,当所述破坏方式为添加乱码时,步骤250,包括:
子步骤253,删除所述乱码。
在本发明实施例中,可以通过对内存进行反编译,查找出在目标应用的dex文件中添加的乱码,然后对乱码进行删除。
当然,也可以通过其他现有的技术查找所添加的乱码,对此本发明实施例不加以限定。
优选地,当所述破坏方式为打散结构时,步骤250,包括:
子步骤254,根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块。
如前述,若破坏方式为打散结构,则其dex文件可能被拆分为多个dex文件块,存储在不同的内存中。
在本发明实施例中,可以通过指向不同内存中的dex文件块的指针,从各内存中获取各dex文件块。
子步骤255,在同一个内存中,将各dex文件块拼接为一个dex文件。
在获取了属于同一dex文件的各dex文件块后,可以在同一个内存中,将各dex文件块拼接为一个dex文件,即可以获得原始的dex文件。
其中的同一个内存,可以为存储属于该dex文件的各dex文件块的任一各内存,也可以另外选择一个新的内存,对此,本发明实施例不加以限定。
在本发明实施例中,同样可以反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;根据所述dex文件信息对所述dex文件进行修复。由此可以在免Root的情况下加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件。
另外,在本发明实施例中,会利用钩取模块分别钩取目标应用进程对OnAttach函数和openDEXfile函数的调用,从而获取dex文件信息,然后分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复从而可以进一步地提高对dex文件的修复的准确性和全面性,从而为辨识病毒提供可操作的条件的有益效果。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
实施例三
参照图3,示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框图,具体可以包括如下模块:
反射调用模块310,适于反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序。
监控模块320,适于由宿主应用程序调用监控模块,对目标应用程序的 活动进行监控。
钩取模块330,适于当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息。
修复模块340,适于根据所述dex文件信息对所述dex文件进行修复。
在本发明实施例中,可以反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;根据所述dex文件信息对所述dex文件进行修复。由此可以在免Root的情况下对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件。
实施例四
参照图4,示出了根据本发明一个实施例的一种动态脱壳装置实施例的结构框图,具体可以包括如下模块:
反射调用模块410,适于反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序。
监控模块420,适于由宿主应用程序调用监控模块,对目标应用程序的活动进行监控。
钩取模块430,适于当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息。具体包括:
第一钩取子模块431,适于当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息。
优选地,第一钩取子模块431,包括:
类加载器获取子模块,适于钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器。
第一dex信息获取子模块,适于从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
第二钩取子模块432,适于当监控到目标应用程序调用openDEXfile函数,则钩取所述openDEXfile函数以获取dex文件信息。
优选地,第二钩取子模块432,包括:
第二dex信息获取子模块,适于钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
修复模块440,适于根据所述dex文件信息对所述dex文件进行修复。具体包括:
修复子模块441,适于分析dex的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
优选地,所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
优选地,当所述破坏方式为损坏dex偏移值和/或破坏header时,所述修复子模块441,包括:
第一数据获取子模块,适于根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
优选地,当所述破坏方式为抽取code时,所述修复子模块441,包括:
第二数据获取子模块,适于遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
优选地,当所述破坏方式为添加乱码时,所述修复子模块441,包括:
删除子模块,适于删除所述乱码。
优选地,当所述破坏方式为打散结构时,所述修复子模块441,包括:
dex文件块获取子模块,适于根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块。
dex文件块拼接子模块,适于在同一个内存中,将各dex文件块拼接为一个dex文件。
在本发明实施例中,同样可以反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的 目标应用程序;由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;根据所述dex文件信息对所述dex文件进行修复。由此可以在免Root的情况下对加壳的应用进行脱壳,从而可以还原隐藏的dex文件,为辨识病毒提供可操作的条件。
另外,在本发明实施例中,会利用钩取模块分别钩取目标应用进程对OnAttach函数和openDEXfile函数的调用,从而获取dex文件信息,然后分析dex文件的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复从而可以进一步地提高对dex文件的修复的准确性和全面性,从而为辨识病毒提供可操作的条件的有益效果。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
实施例五
参照图5,示出了根据本发明一个实施例的一种设备实施例的结构框图,所述设备500具体可以包括如下模块:
存储器510,加载有多条可执行指令;
处理器520,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;
根据所述dex文件信息对所述dex文件进行修复。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容, 并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当 理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的动态脱壳设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种动态脱壳方法,包括:
反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;
根据所述dex文件信息对所述dex文件进行修复。
A2、如A1所述的方法,所述当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息包括:
当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息;和/或当监控到目标应用程序调用openDEXfile函数,则钩取所述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文件。
本发明还公开了B11、一种动态脱壳装置,包括:
反射调用模块,适于反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
监控模块,适于由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
钩取模块,适于当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;
修复模块,适于根据所述dex文件信息对所述dex文件进行修复。
B12、如B11所述的装置,所述钩取模块,包括:
第一钩取子模块,适于当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息;
和/或,第二钩取子模块,适于当监控到目标应用程序调用openDEXfile函数,则钩取所述openDEXfile函数以获取dex文件信息。
B13、如B12所述的装置,所述第一钩取模块,包括:
类加载器获取子模块,适于钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器;
第一dex信息获取子模块,适于从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
B14、如B12所述的装置,所述第二钩取子模块包括:
第二dex信息获取子模块,适于钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
B15、如B11-B14其中之一所述的装置,所述修复模块包括:
修复子模块,适于分析dex的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
B16、如B15所述的装置,
所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
B17、如B16所述的装置,当所述破坏方式为损坏dex偏移值和/或破坏header时,所述修复子模块包括:
第一数据获取子模块,适于根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
B18、如B16所述的装置,当所述破坏方式为抽取code时,所述修复子模块包括:
第二数据获取子模块,适于遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
B19、如B16所述的装置,当所述破坏方式为添加乱码时,所述修复子模块包括:
删除子模块,适于删除所述乱码。
B20、如B16所述的装置,当所述破坏方式为打散结构时,所述修复子模块包括:
dex文件块获取子模块,适于根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块;
dex文件块拼接子模块,适于在同一个内存中,将各dex文件块拼接为一个dex文件。
本发明还公开了C21,一种动态脱壳设备,包括:
存储器,加载有多条可执行指令;
处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;
根据所述dex文件信息对所述dex文件进行修复。

Claims (21)

1.一种动态脱壳方法,包括:
反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;其中,所述加载dex文件的函数,包括:加载dex文件信息的函数;
根据所述dex文件信息对所述dex文件进行修复。
2.根据权利要求1所述的方法,其特征在于,所述当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息包括:
当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息;和/或当监控到目标应用程序调用openDEXfile函数,则钩取所述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.根据权利要求6所述的方法,其特征在于,当所述破坏方式为添加乱码时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
删除所述乱码。
10.根据权利要求6所述的方法,其特征在于,当所述破坏方式为打散结构时,根据所述破坏方式采用相应的修复方式对所述dex文件进行修复包括:
根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块;
在同一个内存中,将各dex文件块拼接为一个dex文件。
11.一种动态脱壳装置,包括:
反射调用模块,适于反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
监控模块,适于由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
钩取模块,适于当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;其中,所述加载dex文件的函数,包括:加载dex文件信息的函数;
修复模块,适于根据所述dex文件信息对所述dex文件进行修复。
12.根据权利要求11所述的装置,其特征在于,所述钩取模块,包括:
第一钩取子模块,适于当监控到目标应用程序调用OnAttach函数,则钩取所述OnAttach函数以获取dex文件信息;
和/或,第二钩取子模块,适于当监控到目标应用程序调用openDEXfile函数,则钩取所述openDEXfile函数以获取dex文件信息。
13.根据权利要求12所述的装置,其特征在于,所述第一钩取子模块,包括:
类加载器获取子模块,适于钩取OnAttach函数,根据目标应用进程传输给所述OnAttach函数的参数,获取类加载器;
第一dex信息获取子模块,适于从所述类加载器获取cookie信息;所述cookie信息包括dex缓存信息。
14.根据权利要求12所述的装置,其特征在于,所述第二钩取子模块包括:
第二dex信息获取子模块,适于钩取openDEXfile函数,根据目标应用进程传输给所述openDEXfile函数的参数将dex文件信息加载到缓存中,并从所述缓存中获取dex缓存信息。
15.根据权利要求11-14其中之一所述的装置,其特征在于,所述修复模块包括:
修复子模块,适于分析dex的破坏方式,并根据所述破坏方式采用相应的修复方式对所述dex文件进行修复。
16.根据权利要求15所述的装置,其特征在于,
所述破坏方式包括:损坏dex偏移值、破坏header、抽取code、打散结构、添加乱码。
17.根据权利要求16所述的装置,其特征在于,当所述破坏方式为损坏dex偏移值和/或破坏header时,所述修复子模块包括:
第一数据获取子模块,适于根据所述header里面size信息重新计算偏移,并根据所述偏移获取真实的数据。
18.根据权利要求16所述的装置,其特征在于,当所述破坏方式为抽取code时,所述修复子模块包括:
第二数据获取子模块,适于遍历每个类并在DVM虚拟机中实例化,并从所述DVM虚拟机中获取真实的code数据。
19.根据权利要求16所述的装置,其特征在于,当所述破坏方式为添加乱码时,所述修复子模块包括:
删除子模块,适于删除所述乱码。
20.根据权利要求16所述的装置,其特征在于,当所述破坏方式为打散结构时,所述修复子模块包括:
dex文件块获取子模块,适于根据指向不同内存指向dex文件块的指针,从各内存中获取dex文件块;
dex文件块拼接子模块,适于在同一个内存中,将各dex文件块拼接为一个dex文件。
21.一种动态脱壳设备,包括:
存储器,加载有多条可执行指令;
处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
反射调用与宿主应用程序具有相同包名或不同包名的作为宿主应用程序附带资源的安装包,以加载该安装包所实现的目标应用程序;
由宿主应用程序调用监控模块,对目标应用程序的活动进行监控;
当监控到目标应用程序调用加载dex文件的函数,则钩取所述加载dex文件的函数以获取dex文件信息;其中,所述加载dex文件的函数,包括:加载dex文件信息的函数;
根据所述dex文件信息对所述dex文件进行修复。
CN201510997647.0A 2015-12-25 2015-12-25 一种动态脱壳方法、装置和设备 Active CN105574411B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510997647.0A CN105574411B (zh) 2015-12-25 2015-12-25 一种动态脱壳方法、装置和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510997647.0A CN105574411B (zh) 2015-12-25 2015-12-25 一种动态脱壳方法、装置和设备

Publications (2)

Publication Number Publication Date
CN105574411A CN105574411A (zh) 2016-05-11
CN105574411B true CN105574411B (zh) 2018-12-28

Family

ID=55884530

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510997647.0A Active CN105574411B (zh) 2015-12-25 2015-12-25 一种动态脱壳方法、装置和设备

Country Status (1)

Country Link
CN (1) CN105574411B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106022130B (zh) * 2016-05-20 2019-03-22 中国科学院信息工程研究所 加固应用程序的脱壳方法及装置
CN106066803B (zh) * 2016-05-25 2019-12-13 北京奇虎科技有限公司 应用程序运行控制的方法及装置
CN107784204B (zh) * 2016-08-31 2021-10-22 百度在线网络技术(北京)有限公司 应用脱壳方法和装置
CN106775843B (zh) * 2016-11-30 2020-04-28 四川长虹电器股份有限公司 基于内存加载的dalvik字节码优化方法
CN108229107B (zh) * 2016-12-21 2021-06-25 武汉安天信息技术有限责任公司 一种Android平台应用程序的脱壳方法及容器
CN106844532B (zh) * 2016-12-29 2020-12-11 北京奇虎科技有限公司 一种应用程序获取方法和装置以及一种终端设备
CN107392018B (zh) * 2017-06-30 2020-09-15 阿里巴巴集团控股有限公司 应用程序脱壳方法及装置
CN108920220B (zh) * 2018-06-06 2021-11-30 北京奇虎科技有限公司 一种函数调用的方法、装置及终端
CN108846280B (zh) * 2018-06-29 2021-04-02 江苏通付盾信息安全技术有限公司 应用文件的脱壳方法及装置
CN109214148A (zh) * 2018-09-03 2019-01-15 平安普惠企业管理有限公司 一种dex文件抽取方法、系统及终端设备
CN109684846A (zh) * 2018-12-28 2019-04-26 微梦创科网络科技(中国)有限公司 一种文件提取方法及装置
CN113051122B (zh) * 2019-12-26 2023-09-15 百度在线网络技术(北京)有限公司 性能数据获取方法、装置、电子设备和介质
WO2021248315A1 (zh) * 2020-06-09 2021-12-16 深圳市欢太科技有限公司 一种脱壳处理方法、装置、设备及存储介质
CN112131193B (zh) * 2020-09-17 2023-04-07 上海上讯信息技术股份有限公司 一种应用程序压缩的方法及设备
CN113641426A (zh) * 2021-08-31 2021-11-12 福建省天奕网络科技有限公司 一种安卓端基于源码修改的脱壳查找与实现方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014101393A1 (zh) * 2012-12-26 2014-07-03 腾讯科技(深圳)有限公司 应用实现方法及装置
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 北京奇虎科技有限公司 应用程序加壳配置方法与装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
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
WO2014101393A1 (zh) * 2012-12-26 2014-07-03 腾讯科技(深圳)有限公司 应用实现方法及装置
CN104376255A (zh) * 2014-11-28 2015-02-25 北京奇虎科技有限公司 应用程序运行控制方法与装置
CN104462880A (zh) * 2014-11-28 2015-03-25 北京奇虎科技有限公司 应用程序加壳配置方法与装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Android DEX安全攻防战;Jack_Jia;《blog.csdn.net/androidsecurity/article/details/9428861》;20130810;正文第二部分 *

Also Published As

Publication number Publication date
CN105574411A (zh) 2016-05-11

Similar Documents

Publication Publication Date Title
CN105574411B (zh) 一种动态脱壳方法、装置和设备
Wei et al. Jn-saf: Precise and efficient ndk/jni-aware inter-language static analysis framework for security vetting of android applications with native code
Davis et al. I-arm-droid: A rewriting framework for in-app reference monitors for android applications
JP5108789B2 (ja) オブジェクトへの制御されたアクセスを有するソフトウェアシステム
Agten et al. JSand: complete client-side sandboxing of third-party JavaScript without browser modifications
Davis et al. Retroskeleton: Retrofitting android apps
Bartel et al. Static analysis for extracting permission checks of a large scale framework: The challenges and solutions for analyzing android
CN104885092B (zh) 用于操作系统的安全系统和方法
Magazinius et al. Safe wrappers and sane policies for self protecting JavaScript
CN105893839B (zh) 一种安卓应用的广播的代理处理方法和装置
US9871800B2 (en) System and method for providing application security in a cloud computing environment
CN109255235B (zh) 基于用户态沙箱的移动应用第三方库隔离方法
CN111400757B (zh) 防止安卓第三方库中native代码泄露用户隐私的方法
US20070169065A1 (en) Computer program with metadata management function
Armando et al. Enabling BYOD through secure meta-market
Hedin et al. Information-flow security for JavaScript and its APIs
Lim et al. An Android Application Protection Scheme against Dynamic Reverse Engineering Attacks.
Cho et al. Anti-debugging scheme for protecting mobile apps on android platform
CN109784039B (zh) 移动终端安全运行空间的构建方法、电子设备、存储介质
Ahmad et al. StaDART: addressing the problem of dynamic code updates in the security analysis of android applications
CN106897607A (zh) 一种应用程序监控方法及装置
US11531763B1 (en) Automated code generation using analysis of design diagrams
CN112214267A (zh) 一种安卓脱壳加速方法、装置、存储介质及计算机设备
CN103970574B (zh) office程序的运行方法及装置、计算机系统
Tran et al. Jate: Transparent and efficient javascript confinement

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

Effective date of registration: 20220715

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: Room 112, block D, No. 28, Xinjiekou outer street, Xicheng District, Beijing 100088 (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.

TR01 Transfer of patent right