一种Android加固脱壳的检测方法与流程

文档序号:11520152阅读:905来源:国知局
一种Android加固脱壳的检测方法与流程

本发明涉及android加固脱壳方法,尤其涉及一种android应用程序加固的检测方法,即通过一种系统文件替换的脱壳方法,检测经过加固处理后的apk(androidpackage的缩写,即android应用安装包)是否真正达到了加固保护的效果。



背景技术:

随着智能手机的热销,手机上网越来越流行,移动互联时代的爆发更是带动智能手机趋于全能化,伴随手机用户爆炸增长、手机上网愈加便利而来的是,手机安全隐患越来越多、问题越来越突出。根据中国互联网络信息中心(cnnic)发布《第28次中国互联网络发展状况统计报告》。报告显示,截至2012年6月底,中国手机网民规模首次超越台式电脑用户,达到3.88亿,较2011年底增加了约3270万人。手机网民在总体网民中的比例达65.5%。

目前,一方面,智能手机系统已被国外产品垄断:根据艾媒咨询发布的数据显示,2012第二季度,国外操作系统在我国智能手机中的占比已超过90%。其中,美国谷歌公司的android系统占比最高达63.1%;芬兰诺基亚公司的塞班系统占比19.9%,苹果公司的ios操作系统占比11.7%。因为android系统采取免费、开源的市场策略,导致众多山寨手机和平板电脑大量使用android系统,而这些充斥在市场之上的山寨机以及变成黑客、恶意程序眼中的“肉鸡”。

另一方面,智能手机信息防范能力弱:与传统手机相比智能手机功能强大,信息覆盖范围广,其操作系统依托于移动互联网,信息泄露隐患大。智能手机内部包含大量私人信息或涉密信息,如定位系统、账户密码、图像图片、通讯录、短信息、通话内容等。而智能手机的诸多功能需要时时连入互联网才能实现,对于很多手机来说在传输数据时缺乏有效保护和加密,从而导致黑客非法盗取用户信息也更为容易。以市场占有量最大的android系统为例,虽然众多手机厂商可以对系统进行“重新包装”,但是由于系统开源,api接口被广泛使用,通过一定的技术手段有意窃听通话记录或是窃取用户信息,完全没有技术障碍。

再者,应用软件缺乏安全审查机制:由于googleplay在中国地区的不稳定性,国内95%的用户都会选择从国内的第三方应用市场下载app程序。但是当下国内的第三方应用市场已经变成了鱼龙混杂,流氓、病毒软件丛生之地。在国内,第三方应用市场里比较几十家,知名的有安卓、安智、应用汇、机锋网等,国内的应用市场基本都是模仿苹果的应用商城,对外承诺有严格的审核机制,但事实是这些审核基本是空架子。

而在移动互联网安全领域,技术标准存在真空,更缺乏法律规范来保障用户的信息安全。互联网的高速发展,智能手机、平板电脑等各种便携移动设备已经充斥了人们的生活,各种移动应用迅速覆盖了包括出行就餐、日常起居,甚至金融理财等各个领域。然而,正所谓“玫瑰虽好,毒刺伤人”。安卓漏洞、app安全早已饱受诟病,诸如手机吸费、隐私盗取以及各类支付风险也都如鬼魅般如影随形。山寨app和广告插件加剧用户隐私暴露风险,木马病毒泛滥移动互联网安全形势严峻等问题已不可忽视。

由于移动互联网的发展迅速,随其而生的安全问题眼下也无法彻底解决。不断增长的手机用户让恶意软件获得了更多的生存的机会。

针对上述移动互联网应用的安全问题,一些android应用加固(加壳)产品为移动应用提供专业的加固保护方案,其中一种方法是对java文件进行加壳处理。但是,这些加固产品的加壳处理起到的保护作用是否有效,现有方法还难以进行检测。



技术实现要素:

本发明的目的是针对现有技术中的不足,提供一种android应用程序加固的检测方法,通过一种基于文件替换法把系统文件函数的android脱壳方法,检测经过加固处理后的apk(androidpackage的缩写,即android应用安装包)是否真正达到了加固保护的效果。

为实现上述目的,本发明公开了如下技术方案:

为了便于说明,本文约定:

“apk”是androidpackage的缩写,即android应用安装包;

“dalvik”是指google公司设计的用于android平台的java虚拟机;

“manifest”是指android程序运行清单(androidmanifest.xml)。

一种android加固脱壳的检测方法,包括如下步骤:

s1采用文件替换法,在模拟器上替换系统文件/system/bin/dex2oat,/system/bin/dex2oat是安卓系统源码编译生成的可执行文件,/system/bin/dex2oat文件对应源码文件位置是/art/dex2oat/dex2oat.cc;将dex2oat可执行文件替换系统相对应的文件后对/system/bin/dex2oat文件赋予可执行权限,至此完成脱壳工具的环境配置;

s2安装加固处理后的apk文件;

s3利用步骤s1中的文件替换法,对安卓系统文件/system/bin/dex2oat进行替换,并运行带壳的app,使用脱壳工具脱壳后得到classes.dex文件,对系统文件/system/bin/dex2oat进行修改,具体包括如下步骤:

s31若通过加固工具本身提供的解壳程序解壳出的文件是classes.dex文件,在art模式下apk第一次运行时classes.dex是需要经过/system/bin/dex2oat优化的,此时可以得到classes.dex文件;

s32文件替换法脱壳处理dexfile数据结构并输出脱壳后的文件classes.dex,归还dexfile数据结构,使程序能够继续原来的步骤;

s4文件替换法脱壳得到的classes.dex文件与未加固的classes.dex文件进行对比;检测是否脱壳成功,从而得到加固处理是否达到加固保护效果的结果;

s5对步骤s3中输出的classes.dex文件进行修复,操作执行结束。

进一步的,所述步骤s2安装时apk文件被解压缩,获取apk文件结构;所述apk文件结构包括文件夹meta-inf\、文件夹res\、文件androidmanifest.xml、文件classes.dex、文件resources.arsc、assets文件夹和lib文件夹;apk文件解压后的所述文件classes.dex在android平台中由dalvikvm执行。

进一步的,所述步骤s4进行对比时,利用逆向工具将所述dex文件还原为jar文件,通过查看jar源码文件来对比文件替换法进行脱壳得到的classes.dex文件与未加固的classes.dex文件的源码。

进一步的,所述逆向工具为apktool或dex2jar。

进一步的,所述步骤s4中,检测是否脱壳成功的方法为人工检查输出的dex文件,具体为对加固前的、加固后的以及脱壳后的dex文件进行分析,利用apktool逆向工具查看dex,将dex还原为jar包,再利用apktool逆向工具查看源码;若加固后的dex文件无法得到源码,加固前以及脱壳后的dex文件能够查看到源码,说明脱壳成功。

本发明公开的一种android加固脱壳的检测方法,具有以下有益效果:

本发明可以验证一些利用了现有的apk加固工具进行加固后的应用的加固效果,也是一种新型检测apk文件安全的方法,对业界apk加固以及风险评估市场有很好的促进作用,除了有很大的商业价值之外,也对移动应用安全方面有很大的促进作用。

附图说明

图1是本发明提供脱壳检测方法中的脱壳工具(替换的文件)的实现流程框图。

图2是本发明实施例1执行操作的流程框图。

图3是本发明实施例2执行操作的流程框图。

具体实施方式

下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的核心是提供一种android加固脱壳的检测方法,基于文件替换法把系统文件函数的android脱壳方法,检测经过加固处理后的apk是否真正达到了加固保护的效果。

本发明中修改源码编译后的dex2oat文件主要功能是优化安卓应用程序的dex文件为oat文件,如果解壳程序还原的是dex文件,利用artandroidruntime应用运行模式加载执行dex文件优化,art会执行函数dex2oat对dex进行优化处理,所以替换dex2oat,解析dexfile数据结构,当执行该函数时让系统去执行脱壳处理程序,即保存在本地的核心方法,主要实现输出脱壳后的classes.dex文件功能。

请参见图1。本发明一种android加固脱壳的检测方法的步骤如下:s1采用文件替换法,在模拟器上替换系统文件/system/bin/dex2oat,/system/bin/dex2oat是安卓系统源码编译生成的可执行文件,/system/bin/dex2oat文件对应源码文件位置是/art/dex2oat/dex2oat.cc;将dex2oat可执行文件替换系统相对应的文件后对/system/bin/dex2oat文件赋予可执行权限,至此完成脱壳工具的环境配置;

s2安装加固处理后的apk文件;

加固处理后的apk文件主要是对apk中的java编译后的classes.dex文件进行加壳,artandroidruntime一种应用运行模式加载执行dex文件优化,此时的dex文件中包含加固工具提供的对应的解壳程序,通过该解壳程序对加壳的dex文件进行还原处理,处理后得到的文件可能是dex文件;

对apk文件加壳即是对classes.dex加壳,市场上存在的apk加固工具是利用对classes.dex文件进行加壳处理,实现对apk文件的加壳处理;

s3利用步骤s1中的文件替换法,对安卓系统文件/system/bin/dex2oat进行替换(主要是对位于/system/bin/dex2oat中的dex2oat文件函数进行替换处理),并运行带壳的app,当函数dex2oat执行dex文件时会输出保存到本地,该替换的文件为本发明方法提供的解壳程序(本发明称为脱壳工具),使用脱壳工具处理dex2oat函数中的dexfile数据结构;由于此时由加固软件添加的解壳程序已经将加壳的classes.dex文件进行解壳,因此此时传入的dexfile数据结构便包含已经解壳后的classes.dex文件数据。该脱壳工具通过获取dexfile数据结构指针,并调用write函数,将dexfile结构中的成员baseaddr指向的内存数据,写入本地文件,即可得到脱壳后的classes.dex文件;输出的dex文件即本发明方案输出的结果,与apk未加固前的dex文件进行对比;

s4文件替换法脱壳得到的classes.dex文件与未加壳的classes.dex文件进行对比;人工检查输出的dex文件也可以检测出是否对加固后的dex文件脱壳成功,主要是对加固前的、加固后的以及利用了本发明方案提供的脱壳工具进行脱壳后的dex文件进行分析,利用apktool逆向工具查看dex,将dex还原为jar包,再利用apktool逆向工具查看源码;若加固后的dex文件无法得到源码,加固前以及利用本发明的脱壳方法进行脱壳后的dex文件可以查看到源码,说明利用本发明方案脱壳成功,加壳后的dex文件利用逆向工具是无法查看到源码的,这也是加壳的目的;即检测到经过加固处理后的apk或者没有输出才真正达到了加固保护的效果。

若脱壳(解壳)成功,即检测验证了:经过相应的加固工具进行加壳后,利用本发明方案的脱壳方法,可获得源码并能进一步分析源码。

s5对步骤s3中输出的classes.dex文件进行修复,操作执行结束。

需要说明的是,所述步骤s2安装时apk文件被解压缩,获取apk文件结构;所述apk文件结构包括文件夹meta-inf\、文件夹res\、文件androidmanifest.xml、文件classes.dex、文件resources.arsc、assets文件夹和lib文件夹;apk文件解压后的所述文件classes.dex在android平台中由dalvikvm执行。

需要说明的是,所述步骤s4进行对比时,利用逆向工具将所述dex文件还原为jar文件,通过查看jar源码文件来对比文件替换法进行脱壳得到的classes.dex文件与未加固的classes.dex文件的源码。

需要说明的是,所述逆向工具为apktool或dex2jar。

实施例1

请参见图2。

假定一个用java语言编写的android应用检测系统中,利用本发明方案对加固后的apk应用进行检测,检测加固后apk应用是否产生效用。

设定加固后的应用名称为apk。检测的具体步骤如下(如图3):

1)在模拟器中替换系统文件dex2oat;

2)对系统函数dex2oat赋可以执行权限;

3)模拟器安装apk;

4)运行脱壳处理程序(脱壳工具),主要是处理dex2oat函数中的dexfile数据结构。此时加壳软件添加的解壳程序已经将加壳的classes.dex文件进行解壳,因此,此时的dexfile数据结构中包含已经解壳后的classes.dex文件数据;获取dexfile数据结构指针,并调用write函数,将dexfile结构中的成员baseaddr指向的内存数据,写入本地文件,即可得到脱壳后的classes.dex文件;归还dexfile数据结构,还原系统原来步骤;

5)取出输出的classes.dex;

6)对比未加壳前的classes.dex文件,输出的classes.dex与未加壳前的classes.dex,进行修复;

7)如果输出的classes.dex文件通过逆向工具,还原为jar包后,通过查看源码工具对比未加壳前的源码与本发明方案得到的源码,如果人工分析后,本发明方案得到的源码与未加固的源码基本一致,并且可以进一步分析源码,说明本发明方案可以对该方式的加壳进行解壳。

实施例2

请参见图3。

假定一个用java语言编写的android应用检测系统中,利用该发明方案对加固后的apk应用进行检测,检测加固后apk应用是否产生效用,设定加固后的应用名称为apk。具体步骤如下:

1)在模拟器中替换系统文件/system/bin/dex2oat;

2)安装加固后的android应用apk;

3)art优化加固的apk的classes.dex文件;

4)未得到classes.dex文件;

5)本发明方案不可以对该方式的加固进行脱壳。

经过相应的加固工具进行加固后,利用本发明方案的脱壳方法,可获得源码并能进一步分析源码;说明该加固工具的加固无效;若脱壳(解壳)不成功,即经过相应的加固工具进行加固后,利用本发明方案的脱壳方法无法获得源码,则说明该加固工具的加固是真正有效的。上述实施例1采用的加壳工具真正达到了加壳效果;而实施例2采用的加壳工具则未达到加壳保护的效果。

以上所述仅是本发明的优选实施方式,而非对其限制;应当指出,尽管参照上述各实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,其依然可以对上述各实施例所记载的技术方案进行修改,或对其中部分或者全部技术特征进行等同替换;而这些修改和替换,并不使相应的技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1