CN106022130B - 加固应用程序的脱壳方法及装置 - Google Patents

加固应用程序的脱壳方法及装置 Download PDF

Info

Publication number
CN106022130B
CN106022130B CN201610340040.XA CN201610340040A CN106022130B CN 106022130 B CN106022130 B CN 106022130B CN 201610340040 A CN201610340040 A CN 201610340040A CN 106022130 B CN106022130 B CN 106022130B
Authority
CN
China
Prior art keywords
application program
application
heap
key functions
reinforcement
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
CN201610340040.XA
Other languages
English (en)
Other versions
CN106022130A (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.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
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 Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN201610340040.XA priority Critical patent/CN106022130B/zh
Publication of CN106022130A publication Critical patent/CN106022130A/zh
Application granted granted Critical
Publication of CN106022130B publication Critical patent/CN106022130B/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
    • 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/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Abstract

本发明公开了一种加固应用程序的脱壳方法及装置,本发明首先安装并运行加固应用程序,触发启动关键进程,并获取关键进程的进程标识号,暂停关键进程,之后利用进程标识号监控关键进程,定位关键函数,获取每个关键函数所在的内存段;再根据可执行文件的头部特征,对每个关键函数所在的内存段进行特征匹配,筛选出目的内存段;其中目的内存段对应于加固应用程序可执行文件所在的内存段;最后对目的内存段进行脱壳还原,得到加固前的原始应用程序的可执行文件。本发明适用于新的Android运行时环境,不需要考虑运行时动态修改可执行文件的情况,不需要修改Android系统源码,并且不依赖于不同加固服务厂商的加固特征,实现对加固应用程序的有效脱壳。

Description

加固应用程序的脱壳方法及装置
技术领域
本发明涉及移动设备信息安全领域,更具体涉及一种加固应用程序的脱壳方法及装置。
背景技术
随着移动互联网的不断发展,移动智能终端的应用加固技术逐渐普及。Android应用加固技术通常会对目标应用程序的Dex可执行文件进行加壳保护,使用一个壳程序对其进行包装,并在此基础上结合完整性校验、代码混淆等技术,实现对目标应用程序的整体加固。Android应用加固技术能够隐藏程序的真实逻辑,防范静态代码审查,增加动态分析的难度,有效防止应用程序被逆向、篡改和二次打包。
然而,Android平台上大量恶意程序也开始利用加固技术来保护自身,以绕过一些安全检测,增加恶意代码安全分析的难度。针对这种情况,需要一种有效的脱壳方法,对加固后的恶意应用进行脱壳和还原,恢复真实的程序代码,以便于对恶意程序进行进一步的安全检测及分析。
根据Android运行时环境的不同,现有的Android加固应用脱壳方法可以划分为两类:Dalvik运行模式下的脱壳方法和ART运行模式下的脱壳方法。
目前针对Dalvik运行模式的脱壳方法主要有两种:基于动态调试的内存dump方法以及基于Dalvik源码定制的脱壳方法。
基于动态调试的内存dump方法主要是在应用程序刚启动时,利用动态调试工具开启远程调试,在系统加载模块libdvm.so中找到Dalvik虚拟机用于加载Dex文件的关键函数dvmDexFileOpenPartial(),设置断点并进行追踪,从内存布局中找到Dex文件内容并输出,完成脱壳。这种基于动态调试的内存dump方法具有一定的局限性,因为在Dalvik虚拟机中,应用程序可以在运行时动态修改Dex文件的内容。该方法没有考虑到这一情况,导致其在应用运行初期通过dump内存所获得的Dex文件有可能是不完整的。
基于Dalvik源码定制的脱壳方法,通过修改Android系统源码对Dalvik虚拟机的实现部分进行改造。根据已有的加固特征库,识别该加固应用的加固服务厂商,据此在Dalvik虚拟机运行过程中找到目标应用的Dex文件内容。经过拼接、修复和重组,最终还原出完整的Dex文件内容。这种基于Dalvik源码定制的脱壳方法需要修改Androd系统源码,会破坏原生操作系统的完整性;在引入脱壳代码的同时,可能会带来新的缺陷和漏洞,危害系统安全;该方法的实现依赖于特征库,如果特征库没有随着加固服务厂商的变化而及时更新,就会导致脱壳失败。
此外,随着系统版本更新,Android 4.4版本开始引入新的应用运行模式ART,通过改变程序的运行机制来获得更好的操作系统使用体验。从Android 5.0版本起,ART则完全替代了原有的Dalvik虚拟机。因此,上述两种脱壳方法将不适用于新的ART运行模式。
ART运行模式下的脱壳方法:与基于Dalvik源码定制的脱壳方法类似,通过修改Android系统源码,对ART实现部分进行改造。根据已有的加固特征库,识别该应用程序的加固服务厂商,据此在ART运行过程中找到目标应用的Dex文件内容。经过必要的修复和重组,最终还原出完整的Dex文件内容。这种ART运行模式下的脱壳方法实现复杂,灵活性低;对Androd系统源码的修改会破坏原生操作系统的完整性,在引入脱壳代码的同时,可能会带来新的缺陷和漏洞,危害系统安全;该方法的实现依赖于特征库,如果特征库没有随着加固服务厂商的变化而及时更新,就会导致脱壳失败。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何在不修改Android系统源码、不依赖于加固特征库并且不受可执行文件运行时动态修改的前提下准确的脱壳加固应用程序。
(二)技术方案
为了解决上述技术问题,本发明提供了一种加固应用程序的脱壳方法,所述方法包括以下步骤:
S1、安装并运行加固应用程序,触发启动关键进程;
S2、获取所述关键进程的进程标识号,并暂停所述关键进程;
S3、利用所述进程标识号监控所述关键进程,定位关键函数,并获取每个所述关键函数所在的内存段;
S4、根据所述加固应用程序的可执行文件的头部特征,对每个所述关键函数所在的内存段进行特征匹配,从所述关键函数所在的内存中筛选出目的内存段,并将所述目的内存段保存在内存段文件中;其中所述目的内存段对应于加固应用程序的可执行文件所在的内存段;
S5、对所述内存段文件中存储的所述目的内存段进行脱壳还原,得到加固前的原始应用程序的可执行文件。
优选地,所述关键进程在运行所述加固应用程序时,首先将所述加固应用程序的可执行文件翻译成本地机器指令,并进行保存;
所述关键函数在所述加固应用程序的可执行文件被翻译成本地机器指令时,分配一段内存,将所述加固应用程序的可执行文件保存到该内存中。
优选地,所述关键进程为dex2oat,所述关键函数为malloc()。
优选地,所述步骤S3中利用动态调试工具远程附加所述关键进程,之后进行进程监控和地址空间遍历,获取每个所述关键函数所在的内存段。
优选地,所述步骤S3中还包括以下步骤:
将所获取的每个所述关键函数所在的内存段保存在一个集合中,其中所述集合中的每个元素分别对应于一个所述关键函数所在的内存段,每个所述元素包括对应的内存段的开始地址、结束地址以及内容。
优选地,所述步骤S5具体包括以下步骤:
S51、对于每个所述目的内存段,提取所述原始应用程序可执行文件的实际长度;
S52、对于该目的内存段,将从开始字节到所述实际长度对应的字节之间的内容保存为脱壳还原得到的所述原始应用程序可执行文件的内容,删除该目的内存段的所述实际长度对应的字节之后的字节。
优选地,所述实际长度保存于所述目的内存段的头部区域中。
一种加固应用程序脱壳装置,所述装置包括预处理模块、进程监控模块、检测分析模块以及脱壳模块;
所述预处理模块用于安装并运行加固应用程序,触发启动关键进程,并获取所述关键进程的进程标识号,暂停所述关键进程;
所述进程监控模块用于利用所述进程标识号监控所述关键进程,定位关键函数,并获取每个所述关键函数所在的内存段;
所述检测分析模块用于根据所述加固应用程序的可执行文件的头部特征,对每个所述关键函数所在的内存段进行特征匹配,从所述关键函数所在的内存中筛选出目的内存段,并将所述目的内存段保存在内存段文件中;其中所述目的内存段对应于所述加固应用程序的可执行文件所在的内存段;
所述脱壳模块用于对所述内存段文件中存储的所述目的内存段进行脱壳还原,得到所述原始应用程序的可执行文件。
优选地,所述关键进程为dex2oat,所述关键函数为malloc()。
优选地,所述脱壳模块包括提取子模块和脱壳子模块;
所述提取子模块用于提取所述原始应用程序可执行文件的实际长度;
所述脱壳子模块用于将从开始字节到所述实际长度对应的字节之间的内容保存为脱壳还原得到的所述原始应用程序的可执行文件的内容,并删除该目的内存段的所述实际长度对应的字节之后的字节。
(三)有益效果
本发明提供了一种加固应用程序的脱壳方法及装置,本发明中,首先安装并运行加固应用程序,触发启动关键进程,并获取关键进程的进程标识号,暂停关键进程,之后利用进程标识号监控关键进程,定位关键函数,并获取每个关键函数所在的内存段;再根据Android应用程序可执行文件的头部特征,对每个关键函数所在的内存段进行特征匹配,从关键函数所在的内存段中筛选出目的内存段,并将目的内存段保存在内存段文件中;其中目的内存段对应于加固应用程序的可执行文件所在的内存段;最后对内存段文件中存储的目的内存段进行脱壳还原,得到加固前的原始应用程序的可执行文件。本发明适用于新的Android运行时环境,不需要考虑运行时动态修改可执行文件的情况,不需要修改Android系统源码,并且不依赖于不同加固服务厂商的加固特征,可以在Android ART运行模式下实现对加固应用程序的有效脱壳,还原出包装在壳程序内的原始应用程序,暴露出程序实现逻辑中的恶意特征,有利于对恶意程序的安全检测和分析,使得采用加固技术的恶意应用无处遁形。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的一个较佳实施例的加固应用程序的脱壳方法的流程图;
图2是本发明的另一个较佳实施例的加固应用程序的脱壳方法的流程图;
图3是本发明中内存段文件的结构示意图;
图4是本发明的另一个较佳实施例中脱壳步骤的流程图;
图5是本发明的再一个较佳实施例的加固应用程序的脱壳装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步详细描述。以下实施例用于说明本发明,但不能用来限制本发明的范围。
一种加固应用程序的脱壳方法,如图1所示,所述方法包括以下步骤:
S1、安装并运行加固应用程序,触发启动关键进程;
S2、获取所述关键进程的进程标识号,并暂停所述关键进程;
S3、利用所述进程标识号监控所述关键进程,定位关键函数,并获取每个所述关键函数所在的内存段;
S4、根据所述加固应用程序,例如Android应用程序的可执行文件的头部特征,对每个所述关键函数所在的内存段进行特征匹配,从所述关键函数所在的内存段中筛选出目的内存段,并将所述目的内存段保存在内存段文件中;其中所述目的内存段对应于加固应用程序的可执行文件所在的内存段;
S5、对所述内存段文件中存储的所述目的内存段进行脱壳还原,得到加固前的原始应用程序的可执行文件。
上述方法适用于新的Android运行时环境,不需要考虑运行时动态修改Dex可执行文件的情况,不需要修改Android系统源码,并且不依赖于不同加固服务厂商的加固特征,可以在Android ART运行模式下实现对加固应用程序的有效脱壳,还原出包装在壳程序内的原始应用程序,暴露出程序实现逻辑中的恶意特征,有利于对恶意程序的安全检测和分析,使得采用加固技术的恶意应用无处遁形。
进一步地,所述关键进程在运行所述加固应用程序时,首先将所述加固应用程序的可执行文件翻译成本地机器指令,并进行保存;所述关键函数在所述加固应用程序的可执行文件被翻译成本地机器指令时,分配一段内存,将所述加固应用程序的可执行文件保存到该内存中。优选地,所述关键进程为dex2oat,所述关键函数为malloc()。
本发明根据Android ART模式的特征,选择监控进程dex2oat。该进程由AndroidART启动,用于将应用程序安装包中的可执行文件classes.dex翻译成本地机器指令。应用程序运行时,系统直接将这些本地机器指令加载到内存中执行。因此,在Android ART模式中,dex2oat进程只会执行一次翻译工作,确保了翻译阶段该进程所使用的可执行文件classes.dex具备完整性和正确性。同时,也决定了本发明所述脱壳方案的唯一时间点,是在关键进程dex2oat的运行时间区间内。
本发明根据所监控进程dex2oat的工作原理,选择在该进程内存空间中定位关键函数malloc(),从中筛选出classes.dex文件所在的内存段。这是由于dex2oat进程在执行翻译工作之前,必然会先调用malloc()函数分配一段内存空间,随后再将应用程序安装包中的可执行文件classes.dex加载到这段内存空间中。因此,定位关键函数malloc()所在的内存段,再根据特征匹配进行筛选,就能够找出符合条件的内存段。
进一步地,所述步骤S3中利用动态调试工具远程附加所述关键进程,之后进行进程监控和地址空间遍历,获取每个所述关键函数所在的内存段。
所述步骤S3中还包括以下步骤:
将所获取的每个所述关键函数所在的内存段保存在一个集合中,其中所述集合中的每个元素分别对应于一个所述关键函数所在的内存段,每个所述元素包括对应的内存段的开始地址、结束地址以及内容。
进一步地,所述步骤S5具体包括以下步骤:
S51、对于每个所述目的内存段,提取所述原始应用程序的可执行文件的实际长度;
S52、对于该目的内存段,将从开始字节到所述实际长度对应的字节之间的内容保存为脱壳还原得到的原始应用程序的可执行文件的内容,删除该目的内存段的所述实际长度对应的字节之后的字节。其中,所述实际长度保存于所述目的内存段的头部区域中。
对应于上述方法本发明还公开了一种加固应用程序脱壳装置,所述装置包括预处理模块、进程监控模块、检测分析模块以及脱壳模块;
所述预处理模块用于安装并运行加固应用程序,触发启动关键进程,并获取所述关键进程的进程标识号,暂停所述关键进程;
所述进程监控模块用于利用所述进程标识号监控所述关键进程,定位关键函数,并获取每个所述关键函数所在的内存段;
所述检测分析模块用于根据所述加固应用程序,例如Android应用程序可执行文件的头部特征,对每个所述关键函数所在的内存段进行特征匹配,从所述关键函数所在的内存段中筛选出目的内存段,并将所述目的内存段保存在内存段文件中;其中所述目的内存段对应于加固应用程序的可执行文件所在的内存段;
所述脱壳模块用于对所述内存段文件中存储的所述目的内存段进行脱壳还原,得到加固前的原始应用程序的可执行文件。
进一步地,所述脱壳模块包括提取子模块和脱壳子模块;
所述提取子模块用于提取所述原始应用程序的可执行文件的实际长度;
所述脱壳子模块用于将从开始字节到所述实际长度对应的字节之间的为内容保存为脱壳还原得到的所述原始应用程序可执行文件的内容,并删除该目的内存段的所述实际长度对应的字节之后的字节。
由于上述装置的脱壳步骤与上述方法一一对应,所以这里不再对重复部分赘述。
下面通过具体的实施例对上述方法和装置进行详细说明。
如图2所示,本实施的方法包括以下步骤:
步骤一:
在Android设备上安装、运行加固后的应用程序,即加固应用程序,触发AndroidART启动关键进程dex2oat。
具体地,Android设备的系统版本应该在Android 5.0及以上,因为ART模式自Android 5.0版本起才正式取代了Dalvik虚拟机。
应用程序在安装后、初次运行前,Android ART会从应用程序安装包中提取出可执行文件classes.dex并进行处理,启动进程dex2oat将其翻译成本地机器指令,保存为一个oat文件。应用程序运行时,系统直接将该oat文件加载到内存中执行。Android ART“一次翻译,多次加载执行”的特点,确保了翻译阶段使用的可执行文件classes.dex具备完整性和正确性。同时,也决定了本发明所述脱壳方案的唯一时间点,是在关键进程dex2oat的运行时间区间内。
步骤二:
获取dex2oat进程标识号,暂停该进程。
具体地,启动ADB Shell(Android调试工具命令行终端),输入命令“ps|grep'/system/bin/dex2oat'”,可以获得进程dex2oat的进程标识号,记为PID;输入命令“kill-STOP PID”,可以暂停该进程。
步骤三:
监控dex2oat进程,遍历该进程的地址空间,定位关键函数malloc()。
具体地,可以借助动态调试工具IDA Pro远程附加进程dex2oat,进行进程监控和地址空间遍历,获得该进程全部malloc()函数所在的内存段,保存为集合A。每个内存段表示为{开始地址,结束地址,内容},作为集合的元素a。
选择malloc()作为关键函数的原因是,Android ART在将应用程序安装包中的可执行文件classes.dex翻译为本地机器指令的过程中,首先会调用malloc()函数分配一段内存空间,随后将classes.dex加载到这段内存空间中。因此,定位关键函数malloc()所在的内存段,再根据特征匹配进行筛选,就能够找出符合条件的内存段。
步骤四:
对关键函数malloc()内存段进行特征匹配,筛选出classes.dex所在的内存段,将其内容保存为dump.dex文件,即内存段文件。
具体地,根据classes.dex文件头部特征,对集合A中的所有元素的内容进行特征匹配,筛选出符合特征的集合元素a,将其内容保存为dump.dex文件。如果集合A内没有符合特征的集合元素,则脱壳失败,通过人工分析找出失败原因。
classes.dex文件头部特征是:必须以“64 65 78 0a 30 33 35 00”,即“dex.035.”作为内存段的起始内容,以标识这是一个Dex文件。这一特征是由Dex文件结构决定的。
步骤五:
对dump.dex文件脱壳还原,得到origin.dex文件,即为原始应用程序的可执行文件。
具体地,由步骤四得到的dump.dex表示的是malloc()内存段存储的内容,并不是规范的Dex可执行文件。其文件结构如图3所示,主要包含三个部分:头部区域(Dexheader)、主体区域(Dex body)和其它数据区域(Other data)。其中,头部区域由magic、checksum、signature、file_size等头部字段组成:
magic字段:占8字节,其内容是一个固定的常量值:64 65 78 0a30 33 35 00,转换为字符串是“dex.035.”,用来声明这是一个Dex文件。
checksum字段:占4字节,存放校验值。
signature字段:占20字节,存放SHA-1签名值。
file_size字段:占4字节,表示Dex文件的实际长度。
头部区域和主体区域包含了原始应用程序的Dex内容;其它数据区域则存放了额外附加的内容。由此可知,根据file_size字段即可从dump.dex文件中截取出头部区域和主体区域,剔除掉额外附加的其它数据区域,从而实现脱壳还原,得到原始应用程序的可执行文件。具体做法如下如图4所示:
1、从dump.dex文件开头起找到第32个字节(即file_size字段的起始位置),得到其后的4字节内容,记为a。
2、从dump.dex文件开头起,找到第a个字节。
3、将第a个字节到dump.dex文件末尾的数据删除。
4、将删除后的内容保存为origin.dex文件,即为原始应用程序的可执行文件。
根据上面的步骤完成了对程序的脱壳。
图5是本发明的再一个较佳实施例的加固应用程序的脱壳装置的结构示意图,该实施例的装置主要包括四个模块:预处理模块、进程监控模块、检测分析模块以及脱壳模块。该装置的各个模块与加固应用程序、Android ART以及dex2oat进程之间的工作流程如下:
预处理模块负责安装并运行加固应用程序,触发Android ART加载加固应用程序并启动dex2oat进程;负责获取dex2oat进程标识号并将其暂停。进程监控模块负责监控dex2oat进程,遍历该进程的地址空间,定位关键函数malloc()并获得内存段具体信息,将结果返回给检测分析模块进行下一步处理。检测分析模块负责接收进程监控模块传递的malloc()内存段信息;负责对这些信息进行特征匹配,筛选出classes.dex所在的内存段,并将其内容保存为dump.dex文件,传递给脱壳模块进行下一步处理。脱壳模块负责接收检测分析模块传递来的dump.dex文件,进行脱壳处理,还原出原始应用程序的可执行文件。
以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

Claims (8)

1.一种加固应用程序的脱壳方法,其特征在于,所述方法包括以下步骤:
S1、安装并运行加固应用程序,触发启动关键进程;
S2、获取所述关键进程的进程标识号,并暂停所述关键进程;
S3、利用所述进程标识号监控所述关键进程,定位关键函数,并获取每个所述关键函数所在的内存段;所述关键进程为dex2oat,所述关键函数为malloc();
S4、根据所述加固应用程序的可执行文件的头部特征,对每个所述关键函数所在的内存段进行特征匹配,从所述关键函数所在的内存段中筛选出目的内存段,并将所述目的内存段保存在内存段文件中;其中所述目的内存段对应于加固应用程序的可执行文件所在的内存段;
S5、对所述内存段文件中存储的所述目的内存段进行脱壳还原,得到加固前的原始应用程序的可执行文件。
2.根据权利要求1所述的脱壳方法,其特征在于,所述关键进程在运行所述加固应用程序时,首先将所述加固应用程序的可执行文件翻译成本地机器指令,并进行保存;
所述关键函数在所述固应用程序的可执行文件被翻译成本地机器指令时,分配一段内存,将所述加固应用程序的可执行文件保存到该内存中。
3.根据权利要求1所述的脱壳方法,其特征在于,所述步骤S3中利用动态调试工具远程附加所述关键进程,之后进行进程监控和地址空间遍历,获取每个所述关键函数所在的内存段。
4.根据权利要求3所述的脱壳方法,其特征在于,所述步骤S3中还包括以下步骤:
将所获取的每个所述关键函数所在的内存段保存在一个集合中,其中所述集合中的每个元素分别对应于一个所述关键函数所在的内存段,每个所述元素包括对应的内存段的开始地址、结束地址以及内容。
5.根据权利要求1所述的脱壳方法,其特征在于,所述步骤S5具体包括以下步骤:
S51、对于每个所述目的内存段,提取所述原始应用程序可执行文件的实际长度;
S52、对于该目的内存段,将从开始字节到所述实际长度对应的字节之间的内容保存为脱壳还原得到的所述原始应用程序可执行文件的内容,删除该目的内存段的所述实际长度对应的字节之后的字节。
6.根据权利要求 5所述的脱壳方法,其特征在于,所述实际长度保存于所述目的内存段的头部区域中。
7.一种加固应用程序脱壳装置,其特征在于,所述装置包括预处理模块、进程监控模块、检测分析模块以及脱壳模块;
所述预处理模块用于安装并运行加固应用程序,触发启动关键进程,并获取所述关键进程的进程标识号,暂停所述关键进程;
所述进程监控模块用于利用所述进程标识号监控所述关键进程,定位关键函数,并获取每个所述关键函数所在的内存段;所述关键进程为dex2oat,所述关键函数为malloc();
所述检测分析模块用于根据所述加固应用程序的可执行文件的头部特征,对每个所述关键函数所在的内存段进行特征匹配,从所述关键函数所在的内存段中筛选出目的内存段,并将所述目的内存段保存在内存段文件中;其中所述目的内存段对应于所述加固应用程序的可执行文件所在的内存段;
所述脱壳模块用于对所述内存段文件中存储的所述目的内存段进行脱壳还原,得到原始应用程序的可执行文件。
8.根据权利要求7所述的装置,其特征在于,所述脱壳模块包括提取子模块和脱壳子模块;
所述提取子模块用于提取原始应用程序可执行文件的实际长度;
所述脱壳子模块用于将从开始字节到所述实际长度对应的字节之间的内容保存为脱壳还原得到的原始应用程序的可执行文件的内容,并删除该目的内存段的所述实际长度对应的字节之后的字节。
CN201610340040.XA 2016-05-20 2016-05-20 加固应用程序的脱壳方法及装置 Active CN106022130B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610340040.XA CN106022130B (zh) 2016-05-20 2016-05-20 加固应用程序的脱壳方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610340040.XA CN106022130B (zh) 2016-05-20 2016-05-20 加固应用程序的脱壳方法及装置

Publications (2)

Publication Number Publication Date
CN106022130A CN106022130A (zh) 2016-10-12
CN106022130B true CN106022130B (zh) 2019-03-22

Family

ID=57096390

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610340040.XA Active CN106022130B (zh) 2016-05-20 2016-05-20 加固应用程序的脱壳方法及装置

Country Status (1)

Country Link
CN (1) CN106022130B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106650426A (zh) * 2016-12-09 2017-05-10 哈尔滨安天科技股份有限公司 一种动态提取可执行文件内存映像的方法及系统
CN106778247B (zh) * 2016-12-15 2020-09-08 江苏通付盾科技有限公司 应用程序动态分析的方法及装置
CN106709287B (zh) * 2016-12-15 2020-04-03 江苏通付盾科技有限公司 应用脱壳的方法及装置
CN106778271B (zh) * 2016-12-15 2019-05-14 华中科技大学 一种安卓加固插件的逆向处理方法
CN107066886A (zh) * 2017-04-13 2017-08-18 深圳海云安网络安全技术有限公司 一种Android加固脱壳的检测方法
CN107742078A (zh) * 2017-05-04 2018-02-27 四川大学 一种通用的dex自动脱壳方法与系统
CN107392018B (zh) * 2017-06-30 2020-09-15 阿里巴巴集团控股有限公司 应用程序脱壳方法及装置
CN108154011A (zh) * 2018-01-12 2018-06-12 广州汇智通信技术有限公司 基于art模式的脱壳方法、系统、设备及可读存储介质
CN108446186B (zh) * 2018-01-30 2022-05-13 国家计算机网络与信息安全管理中心 从加壳Android应用程序中恢复Dex源文件的方法
CN108985015A (zh) * 2018-06-29 2018-12-11 江苏通付盾信息安全技术有限公司 应用文件的脱壳方法及装置
CN108846280B (zh) * 2018-06-29 2021-04-02 江苏通付盾信息安全技术有限公司 应用文件的脱壳方法及装置
CN110096853B (zh) * 2019-04-12 2022-10-21 福建天晴在线互动科技有限公司 基于Mono的Unity安卓应用加固方法、存储介质
CN112948819B (zh) * 2019-12-10 2024-01-26 中国电信股份有限公司 应用文件脱壳方法和装置、计算机可读存储介质
CN111522699B (zh) * 2020-04-14 2023-05-23 杭州斯凯数据科技集团有限公司 针对vmp指令引发目标内存变化的检测方法
WO2021248315A1 (zh) * 2020-06-09 2021-12-16 深圳市欢太科技有限公司 一种脱壳处理方法、装置、设备及存储介质
CN112883374B (zh) * 2021-02-02 2022-07-01 电子科技大学 一种基于ART环境下的Android平台应用程序通用脱壳方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102184363A (zh) * 2011-05-21 2011-09-14 电子科技大学 基于综合处理的软件壳自动脱壳方法
CN105068932A (zh) * 2015-08-25 2015-11-18 北京安普诺信息技术有限公司 一种Android应用程序加壳的检测方法
CN105574411A (zh) * 2015-12-25 2016-05-11 北京奇虎科技有限公司 一种动态脱壳方法、装置和设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102184363A (zh) * 2011-05-21 2011-09-14 电子科技大学 基于综合处理的软件壳自动脱壳方法
CN105068932A (zh) * 2015-08-25 2015-11-18 北京安普诺信息技术有限公司 一种Android应用程序加壳的检测方法
CN105574411A (zh) * 2015-12-25 2016-05-11 北京奇虎科技有限公司 一种动态脱壳方法、装置和设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Android应用防篡改机制的研究;李萍;《天津中德职业技术学院学报》;20151031;第2015年卷(第5期);第67-70页 *
一种ART模式下应用加固方案;张洪睿 等;《软件》;20151231;第36卷(第12期);176-179 *

Also Published As

Publication number Publication date
CN106022130A (zh) 2016-10-12

Similar Documents

Publication Publication Date Title
CN106022130B (zh) 加固应用程序的脱壳方法及装置
CN109491695B (zh) 一种集成安卓应用的增量更新方法
US9940225B2 (en) Automated error checking system for a software application and method therefor
CN108229148B (zh) 一种基于Android虚拟机的沙箱脱壳方法及系统
KR101740604B1 (ko) 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹
US9626170B2 (en) Method and computer program product for disassembling a mixed machine code
CN107480476B (zh) 一种基于ELF感染的Android本地层指令编译虚拟化加壳方法
CN105574411A (zh) 一种动态脱壳方法、装置和设备
CN103793248B (zh) 一种应用程序升级的方法及装置
US11113050B2 (en) Application architecture generation
US20220197777A1 (en) System and methods for live debugging of transformed binaries
US20030041315A1 (en) Debugger with automatic detection of control points influencing program behavior
US20130055217A1 (en) Breakpoint synchronization for modified program source code
US9639343B2 (en) Method for altering execution of a program, debugger, and computer-readable medium
CN104503778A (zh) 一种应用程序的安装方法和装置
US9098355B2 (en) Method and apparatus for substituting compiler built-in helper functions with machine instructions
CN109960511B (zh) 基于虚拟化技术的动态库下发方法、存储介质及智能终端
CN109472135A (zh) 一种检测进程注入的方法、装置及存储介质
CN112214266A (zh) 欺骗调用链安卓脱壳方法、装置、存储介质及计算机设备
US11720474B2 (en) System and methods for post mortem debugging of transformed binaries
CN111880804A (zh) 应用程序代码的处理方法及装置
Martorell et al. Improving adaptiveness of autosar embedded applications
US20190102279A1 (en) Generating an instrumented software package and executing an instance thereof
CN102902564B (zh) 安装补丁的方法及装置
Schütte et al. lios: Lifting ios apps for fun and profit

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