android应用恶意代码静态注入的研究_第1页
android应用恶意代码静态注入的研究_第2页
android应用恶意代码静态注入的研究_第3页
android应用恶意代码静态注入的研究_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

android应用恶意代码静态注入的研究

1android平台成为恶意程序的“思维场”andr是基于linux内核的软件平台和操作系统。这是google于2007年11月5日发布的。它最初是由google开发的,然后由开放移动联盟(openhadle彝ance)开发的。最新版本是androiddroid4.3(jellidleybe5an)。自问世短短数年以来,Android发展速度异常迅速。根据Kantar公司的市场调研,2013年Android操作系统占全球智能手机市场份额的64%,在智能移动终端盛行的今天稳坐头把交椅。在Android系统日趋火爆的同时,基于Android的应用程序数量也呈爆炸式增长。2012年年底,Google宣布,搭载Android系统的移动设备可供下载的应用程序总数已经达到70万余款。到目前为止,其应用程序数量应该已达到百万级别。与此同时,由于Android生态环境的开放性,使得Android用户接触非官方市场应用的机会更多,而这些应用很容易被黑客利用。根据《2013年上半年网秦全球手机安全报告》数据显示,2013年上半年,Android平台依然是手机恶意软件感染的重点平台,Android平台感染比例高达95%,第三方应用商店仍是病毒传播的重要途径。因此,对Android平台及其应用程序的安全性进行深入研究很有意义。2android应用程序结构介绍对Android应用程序进行静态恶意代码注入,必须先要了解Android应用程序内部结构,这里对此进行简要介绍。2.1android应用程序文件上传APK是AndroidPackage的缩写,它是Android应用的安装包文件。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex(DalvikVMexecutes)文件,即Android虚拟机可执行程序,是Dalvik字节码。2.2android库(1)源文件,源文件都在src目录中。(2)R.java文件,在该文件中Android对下文即将介绍的资源进行了全局索引,如果res文件夹中的内容发生了改变,R.java会重新编译。(3)AndroidLibrary,这个是应用运行的Android库。(4)assets目录,放置多媒体等文件。(5)res目录,放置应用到的资源文件:drawable里面放置用到的图片资源;layout里面放置用到的布局文件,这些文件都是xml格式;values里面放置字符串文件(strings.xml)、颜色文件(colors.xml)、数组文件(arrays.xml)。(6)AndroidManifest.xml是应用的配置文件,包括程序使用的各类组件的声明:Activity、Service等;程序的入口点,一般是包含ent.action.MAIN的Activity;程序使用受保护API或订阅特定广播消息时所需权限的声明等。3android应用漏洞利用Android应用的恶意代码注入基本上有两种方法。一种是利用Android应用程序开发者在设计或者编写代码时存在的漏洞,在应用运行时通过某种方式进行漏洞利用(exploit)。由于Android应用程序数量极其庞大,这种方式需要针对每一个应用进行相应的漏洞挖掘,而且难度很大,漏洞利用技术门槛较高。另一种是对应用程序APK文件进行逆向分析,在其中注入恶意代码并伪装成正常应用进行发布和传播,这是黑客们攻击使用的最主要方式,也是本文阐述的主要内容,即Android应用程序恶意代码静态注入方法。3.1恶意代码静态注入点3.1.1原程序入口点actity的静态注入点每个应用程序都存在程序入口,在Android应用中,程序运行后的第一个Activity就是其应用程序入口点。在Android应用中替换原程序入口点Activity的做法,是恶意代码静态注入最常见的方式。AndroidManifest.xml文件中描述了Android应用程序运行时的入口点,一般是包含ent.actionMAIN的Activity。如果我们把此配置文件中的入口点Activity替换成精心编写的恶意Activity,便可以执行在恶意Activity中设计的威胁代码,达到盗取信息甚至是破坏系统的目的。3.1.2基于android应用程序的注册Android系统的广播机制是,使系统或者应用程序产生的消息通过广播的方式通知给注册接收广播的应用程序,应用程序收到广播消息后,根据消息内容决定如何进行后续处理。在Android系统中,BroadcastReceiver组件用于监听被广播的消息或事件(Intent),为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:(1)静态注册在AndroidManifest.xml的application中,定义BroadcastReceiver,设置要接收的action。如:其中,ReceiverName为BroadcastReceiver的子类,重写了onReceiver方法,并在onReceiver方法中对广播进行处理。这里<intent-filter>标签设置过滤器,接收短信广播。静态注册方式的特点是,不管该应用程序是否处于活动状态,都会进行监听。(2)动态注册动态注册方式在Activity里面调用函数来注册。动态注册方式特点是,在代码中进行注册后,当应用程序关闭后,就不再进行监听。静态注册的广播机制也给我们另一种恶意代码静态注入的思路,即通过在AndroidManifest.xml中静态注册BroadcastReceiver,并声明所需权限监听特定消息触发恶意代码的执行。4恶意代码的反编译我们以基于程序入口点的方式对静态注入恶意代码进行实验。注入的流程可以归纳如下:首先,利用APK反编译工具将源应用APK文件拆解成Smali中间代码和AndroidManifest.xml配置文件。查找其中action属性为ent.action.MAIN的Activity,即程序入口点,将其名称替换为我们要注入的恶意Activity名字。然后,修改应用程序源代码,在其中插入恶意代码。接下来,将修改后的程序重新编译、签名,生成新的APK文件,如图1所示。由于Smali文件使用的是AndroidDavlik虚拟机的寄存器语言,Smali文件的代码通常情况下比较长,而且指令繁多,很难阅读和编写,因此编写合乎Smali语法规则的恶意代码难度很大也很费时。对此,我们可以反向思考,使用Java语言编写包含恶意代码的Android应用程序,生成APK文件,然后对其进行反编译,得到相应的Smali文件即是我们要插入到源程序中的恶意代码文件。这样可以节省大量时间,提高了恶意代码Smali文件的生成速度。我们选择Android论坛中排名靠前的“中华万年历”应用程序进行注入。我们的实验希望在“中华万年历”应用的初始化界面前添加一个我们编写的包含“Jacktohack”文字的欢迎界面。第一步,根据前面的论述,我们可以反编译“中华万年历”的APK文件,修改AndroidManifest.xml文件中的配置项,将其中ent.action.MAIN的名为cn.etouch.ecalendar.ECalendar的Activity,替换成我们精心设计的恶意的名为InsertActivity的Activity。现在遇到一个问题,如何修改一个应用程序的AndroidManifest.xml文件,这会使用到逆向工程的相关思想和技术。我们知道,应用程序APK是个压缩文件,但是直接用Winrar等解压缩工具解压后的文件是不可读的,因此需要使用APK反编译工具。例如Google提供的Apktools工具,我们这里使用Virtuous团队开发制作的VirtuousTenStudio(VTS),这是一个集成的可视化的APK、JAR编辑工具,使用方便快捷、功能强大。如图2所示,将其APK文件反编译后得到其目录结构和相关配置文件,并进行相关操作。第二步,新建一个Android工程,编写要插入的恶意Activity代码。这里,我们使用Google推荐的Eclipse+ADT插件环境进行恶意代码编写。需要注意的是,新建的工程包名要和源程序包名一致,都是cn.etouch.ecalendar。这是因为如果包名不一致,在将恶意Activity的Smali代码注入到源程序后,源程序会找不到加入的恶意代码。为了方便演示,我们的恶意代码仅仅加了一个界面,界面上有一个“去看看”的按钮和一个文本框显示“JacktoHack”,如图3所示。编写完成后编译生成包含的恶意代码APK文件Fake_login.apk。第三步,将Fake_login.apk用VTS工具进行反编译。将得到的InsertActivity.smali文件和res目录下的布局文件activity_fake.xml放入中华万年历程序反编译后的相应目录中,如图4所示。还需要注意的是,将activity_fake.xml中使用的string加入到源程序的string.xml中。第四步,进行后期代码整合、重编译签名工作。仅仅将恶意代码文件加入到源程序目录中是不够的,还需要将恶意代码和源程序代码深度整合到一起。主要是资源编号的处理,AndroidADK为每一个资源分配了一个编号,例如我们的恶意程序中的activity_fake.xml资源,会分配一个编号以索引这个xml文件。然而,在InsertActivity.smali中这个编号是Fake_login.apk中的编号,与源程序不一致。因此,我们需要在源程序的R$layout.smali文件中手动加一个编号,修改InsertActivity.smali中的编号使其与之一致。第五步,重新对注入后的代码进行编译、签名,可以得到新的APK。安装后显示我们注入的界面,如图5所示。5静态注入攻击实验中的恶意代码仅仅实现了一个显示界面,但是足以显示这种攻击是行之有效的。通过静态注入恶意代码,黑客可以进行钓鱼攻击、盗取用户信息等危

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论