《移动智能终端安全》课件第13章.pptx

上传人(卖家):momomo 文档编号:7608579 上传时间:2024-04-17 格式:PPTX 页数:103 大小:5.17MB
下载 相关 举报
《移动智能终端安全》课件第13章.pptx_第1页
第1页 / 共103页
《移动智能终端安全》课件第13章.pptx_第2页
第2页 / 共103页
《移动智能终端安全》课件第13章.pptx_第3页
第3页 / 共103页
《移动智能终端安全》课件第13章.pptx_第4页
第4页 / 共103页
《移动智能终端安全》课件第13章.pptx_第5页
第5页 / 共103页
点击查看更多>>
资源描述

1、第13章 恶意代码的植入13.1 反编译反编译13.1.1 反编译反编译Dalvik字节码文件字节码文件Google于2007年底正式发布了Android SDK,作为Android系统的重要特性,Dalvik 虚拟机第一次进入了人们的视野。Dalvik 虚拟机作为Android 平台的核心组件,具有如下特点:第13章 恶意代码的植入(1)体积小,占用内存空间小。(2)专用的DEX可执行文件格式,体积更小,执行速度更快。(3)常量池采用32位索引值,寻址类方法名、字段名、常量更快。(4)基于寄存器架构,拥有完整的指令系统。(5)提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾

2、回收等重要功能。所有的Android 程序都运行在Android 系统进程里,每个进程对应一个Dalvik 虚拟机实例。第13章 恶意代码的植入APK是Android PacKage的缩写,即Android安装包。将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件是zip格式,但后缀名被修改为apk,在Windows上可以通过WinRar等程序直接解压查看。解压APK后,其目录结构如表13-1所示。第13章 恶意代码的植入第13章 恶意代码的植入资源文件在逆向解析过程中十分重要,其相关资源文件如表13-2所示。第13章 恶意代码的植入第13章 恶意代码的植入

3、第13章 恶意代码的植入1.Dalvik虚拟机字节码的指令格式虚拟机字节码的指令格式在Android 4.0源码Dalvik/docs目录下提供了一份文档instruction-forma-ts.html,里面详细列举了Dalvik虚拟机字节码指令的所有格式,表13-3列出了部分虚拟机字节码的指令格式,详细情况请查阅该文档。第13章 恶意代码的植入第13章 恶意代码的植入2.Dalvik虚拟机字节码的类型、方法和字段的表示方法虚拟机字节码的类型、方法和字段的表示方法1)类型Dalvik字节码有两种类型,即基本类型和引用类型。对象和数组是引用类型,其他是基本类型,如表13-4所示。第13章 恶意

4、代码的植入2)方法方法调用的表示格式是:Lpackage/name/ObjectName;-MethodName(III)Z“Lpackage/name/ObjectName;”表示类型,MethodName是方法名,III为参数(在此是三个整型参数),Z是返回类型(bool型)。函数的参数是一个接一个的,中间没有隔开。下面是一个更复杂的例子:method(IIILjava/lang/String;Ljava/lang/Object;)Ljava/lang/String;在Java中则为:String method(int,int,int,String,Object)第13章 恶意代码的植入3

5、)字段字段即Java中类的成员变量,表示格式如下:Lpackage/name/ObjectName;-FieldName:Ljava/lang/String;即包名、字段名和字段类型,字段名与字段类型之间以“:”分隔。第13章 恶意代码的植入3.Dalvik虚拟机字节码指令解析虚拟机字节码指令解析为了能够顺利阅读逆向的smail代码片段,需要熟悉各个指令的功能与格式,具体可查阅相关文档。下面先介绍Dalvik虚拟机字节码中寄存器的命名法。第13章 恶意代码的植入在Dalvik虚拟机字节码中,寄存器的命名法主要有两种:v命名法和p命名法。假设一个函数使用M个寄存器,并且该函数有N个入参,根据Da

6、lvik虚拟机参数传递方式中的规定:在入参使用的最后N个寄存器中,局部变量使用从v0开始的前MN个寄存器。比如:某函数A使用了五个寄存器,两个显式的整型参数,如果函数A是非静态方法,函数被调用时会传入一个隐式的对象引用,因此实际传入的参数个数是三个。根据传参规则,局部变量将使用前两个寄存器,参数会使用后三个寄存器。第13章 恶意代码的植入在实际的smali文件中,几乎都是使用p命名法,原因是使用p命名法能够通过寄存器的名字前缀,判断寄存器到底是局部变量还是函数的入参。在smali语法中,在调用非静态方法时需要传入该方法所在对象的引用,因此此时p0表示的是传入的隐式对象引用,从p1开始才是实际传

7、入的入参。但在调用静态方法时,由于静态方法不需要构建对象的引用,因而不需要传入该方法所在对象的引用,此时从p0开始就是实际传入的入参。第13章 恶意代码的植入在Dalvik 指令中使用“v加数字”的方法来索引寄存器,如v0、v1、v15、v255,但每条指令使用的寄存器索引范围都有限制(因为Dalvik 指令字节码必须字节对齐)。此处使用大写字母表示四位数据宽度的取值范围,如指令“move vA,vB”表示目的寄存器vA可使用v0v15的寄存器,源寄存器vB可以使用v0v15的寄存器。再如指令“move/from16 vAA,vBBBBB”表示目的寄存器vAA可使用v0v255的寄存器,源寄存

8、器vB可以使用v0v65535的寄存器。简而言之,当目的寄存器和源寄存器中有一个寄存器的编号大于15时,即需要加上“/from16”指令才能得到正确运行。第13章 恶意代码的植入4.smali格式结构格式结构1)文件格式无论是普通类、抽象类、接口类还是内部类,在反编译出的代码中,都以单独的smali文件来存放。每个smali文件头三行描述了当前类的一些信息,格式如下:.class 修饰关键字.super.source 第13章 恶意代码的植入打开HelloWorld.smali 文件,头三行代码如下:.class public LHelloWorld;.super Landroid/app/A

9、ctivity;.source HelloWorld.java第13章 恶意代码的植入2)类的结构无论是普通类、抽象类、接口类还是内部类,反编译时会为每个类单独生成一个Smali文件,但是内部类存在相对比较特殊的地方。(1)内部类的文件以“外部类$内部类.smali”的形式命名,匿名内部类文件以“外部类$数字.smali”来命名。(2)内部类访问外部类的私有方法和变量时,通过编译器生成的“合成方法”来间接访问。第13章 恶意代码的植入(3)编译器会将外部类的引用作为第一个参数插入到内部类的构造器参数列表中。(4)内部类的构造器中先保存外部类的引用到一个“合成变量”,再初始化外部类,最后初始化自

10、身。第13章 恶意代码的植入具有Dalvik文件结构及smail相关基本知识后,即可使用apktool反编译工具将.apk文件反编译为smail代码进行分析,具体步骤如下:第一步,apktool工具下载。第二步,apktool工具安装。第三步,对.apk文件进行反编译。按下Windows+R打开cmd窗口,运行“apktool”命令出现apktool的版本号和指导的命令,如图13-1所示。第13章 恶意代码的植入图13-1 apktool参数列表第13章 恶意代码的植入找一个apk,尝试反编译,运行“apktool d-f c:test.apk-o c:test”命令,将test.apk反编译

11、,将反编译后的文件放入C盘下的test文件中,如图13-2所示。图13-2 apktool反编译过程第13章 恶意代码的植入反编译的文件结构如图13-3所示,反编译后文件夹所存储的内容如表13-5所示。图13-3 反编译的文件结构第13章 恶意代码的植入第13章 恶意代码的植入造成该现象的原因是Android的assets 和res文件都不会编译为二进制文件,因此反编译后基本可看到其全貌。Android中的.java文件在JVM编译之后变成.class文件,再经过Android的虚拟机Dalvik将代码编译为.smali文件。smali是另外一种语言,涉及寄存器操作等。如图13-4所示为sma

12、li语言的代码格式。第13章 恶意代码的植入图13-4 smali代码格式第13章 恶意代码的植入13.1.2 反编译原生文件反编译原生文件原生文件是指反编译后获得的so库文件,Android App在Native层加载so库文件。1.在在Native层动态加载层动态加载so库的原因库的原因从App的性能方面考虑,需要在Native层使用C/C+实现的方案,Native层再通过JNI的方式将方案提供给实现应用基本功能的Java层调用,以此拓展计算密集型的功能。例如App如果要支持播放手机自身不支持的音频格式,就需要在Native层实现App自己的音频解码功能。第13章 恶意代码的植入随着项目规

13、模的增大,Native层的代码规模也逐渐膨胀。为了更清晰地组织代码,Native层之间会按照模块分别构建成独立的so库。为了简化Java层与Native层之间的通信方式,通常会特地使用一个JNI层so库引用其他实现具体功能的功能实现so库。Java层只加载该JNI层so库,来间接调用功能实现so库,如图13-5所示。第13章 恶意代码的植入图13-5 原生层代码被调用流程第13章 恶意代码的植入2.Native层的层的so库动态加载的实现库动态加载的实现在Native层的C/C+代码环境中,so库动态加载是使用dlopen()、dlsym()和dlclose()函数实现的。这三个函数均在头文件

14、中定义,作用分别是:dlopen()表示打开一个动态链接库,返回一个动态链接库的句柄;dlsym()表示可根据动态链接库的句柄和符号名,返回动态链接库内的符号地址,该地址既可以是变量指针,也可以是函数指针;dlclose()表示关闭动态链接库句柄,并对动态链接库的引用计数减“1”,当库的引用计数为“0”时将会被系统卸载。一般使用C/C+实现so库动态加载的流程如下:第13章 恶意代码的植入(1)首先调用dlopen()函数,此函数所需的参数是so库的路径和加载模式。(2)在得到so库句柄之后,即可调用dlsym()函数传入so库句柄和所需的函数或变量名称,返回相应的函数指针或变量指针;加载方即

15、可使用返回的指针调用被加载so库中定义的函数和数据结构。(3)当so库的调用结束后,调用dlclose()函数关闭并卸载so库。(4)当打开、关闭so库或者获取so库中操作对象的指针出现错误时,可调用dlerror()函数获取具体的错误原因。第13章 恶意代码的植入3.Java层调用层调用Native层动态加载的实现层动态加载的实现确定动态加载的方案后,Native层代码模块的划分有所修改,即增加一个公共数据结构定义的so库,专门存放一些通用常量和基本的数据操作接口,例如一些基类的定义和JNI层so库操作基类对象,具体的功能实现则通过so库继承这些基类,然后定义具体操作来完成。第13章 恶意代

16、码的植入由于基类数据结构定义需要事先获知,所以该so库需要作为共享库被JNI层so库和功能实现so库在运行时依赖(具体表现就是在构建这些so库的Android.mk文件中,将公共定义的so库指定到“LOCAL_SHARED_LIBRARIES”变量中),而JNI层so库则通过调用dlopen()动态加载功能实现so库。so库动态加载的流程如下:(1)为了便于配置so库路径,so库路径的获取方法在Java层实现,在动态加载开始之前,Native层通过JNI对象指针调用Java层的so库路径配置,获取so库路径并将其回传到Native层。第13章 恶意代码的植入(2)功能实现so库对外声明构造和析

17、构操作接口子类的函数,JNI层so库通过dlopen()函数打开功能实现so库之后,再调用dlsym()函数获取两个对外声明的函数的指针,调用构造函数获取操作接口对象,并把析构函数指针和so库句柄登记到以操作接口对象为键值的映射表中。(3)当需要释放关闭so库的时候,从映射表中取回析构函数指针和so库句柄,先调用析构函数释放操作接口对象,调用dlclose()函数并传入so库句柄,再卸载so库,删除析构函数指针和so库句柄在映射表中的登记。第13章 恶意代码的植入4.原生文件的反编译原生文件的反编译对原生文件进行反编译的基础知识为:熟练使用IDA Pro工具和熟悉常用的ARM汇编指令。此类知识

18、的相关内容参见本书的基本篇。首先解压出.apk文件中的so文件,可使用apktool来实现。其次使用IDA Pro逆向所获得的so文件,如图13-6所示。第13章 恶意代码的植入图13-6 逆向所获得的so文件第13章 恶意代码的植入13.2 逻逻 辑辑 分分 析析13.2.1 Java代码分析代码分析本节以某款手环的App代码分析为例介绍Java代码分析,代码分析流程如图13-7所示。首先应熟悉官方App设置界面。在逆向分析App时,最好对官方的App功能和软件界面有足够的了解,这样有利于工作目标的快速实现,如对官方App设置界面及操作的熟悉,如图13-8所示。第13章 恶意代码的植入图13

19、-7 代码分析流程第13章 恶意代码的植入图13-8 官方App设置界面第13章 恶意代码的植入通过操作所对应的Activity及操作事件进行代码定位,定位结果如图13-9所示。图13-9 对官方App定位的代码片段第13章 恶意代码的植入官方App实现由24小时转换为12小时的操作步骤为:单击12小时选项,弹出正在与设备同步对话框,同步成功则手环时间格式修改成功。定位时间格式设置Activity中关于12小时选项的单击时间事件代码,代码界面如图13-10所示。第13章 恶意代码的植入图13-10 官方App调用SetTimeToDevice()第13章 恶意代码的植入通过代码分析可知:当单击

20、12小时选项后,触发设置项的一些显示效果动作后,调用了SetTimeToDevice()方法。SetTimeToDevice()代码追踪如图13-11所示。图13-11 SetTimeToDevice()代码跟踪第13章 恶意代码的植入13.2.2 补充分析补充分析smali代码代码在APK逆向时,有些smali代码无法映射为Java代码,则需要直接对smail代码进行分析。获得APK的smali代码的工具很多,现在以baksmali为例阐述smail代码分析过程。由于分析过程中涉及smali基本知识,请参考本书有关章节。步骤1:解压APK包。unzip xxx.apk步骤2:用baksmal

21、i对解压出来的DEX文件反编译。java-jar baksmali-2.0.3.jar classes.dex第13章 恶意代码的植入步骤3:代码分析。寄存器与变量。寄存器采用v和p来命名,v表示本地寄存器,p表示参数寄存器第13章 恶意代码的植入 基本指令。move v0,v3:将寄存器v3的值移动到寄存器v0。const-string v0,“MainActivity”:将字符串“MainActivity”赋值给寄存器v0。invoke-super:调用父函数。return-void:函数返回void。new-instance:创建实例。iput-object:对象赋值。iget-obje

22、ct:调用对象。invoke-static:调用静态函数。invoke-direct:调用函数。第13章 恶意代码的植入第13章 恶意代码的植入 字段。在smali文件中,字段的声明使用“.field”指令,字段分为静态字段和实例字段,具体细节请查看本章有关内容。方法。smali的方法声明使用“.method”指令,方法分为直接方法和虚方法两种,具体细节请查看本章有关内容。第13章 恶意代码的植入 注解。如果一个类使用了注解,那么smali中会使用“.annotation”指令,具体细节请查看本章有关内容。smali插桩。插桩的原理是静态地修改APK的samli文件,重新打包。使用该方法得到一

23、个APK的smali文件,在关键部位添加自己的代码,需要遵循smali语法。例如在关键地方打log,输出关键信息,再重新进行打包签名。第13章 恶意代码的植入13.2.3 补充分析原生代码补充分析原生代码以分析登录代码为例,下面对Native层中的代码进行分析。在Java代码层查找获取登录密码的代码,从图13-12中观察到Java代码调用了psProcess对象。第13章 恶意代码的植入跟踪分析psProcess对象的所属类代码,如图13-13所示。图13-12 Java如何调用psProcess 图13-13 跟踪psProcess第13章 恶意代码的植入psProcess对象所属类在代码中

24、调用Native层中的getDbPassword()方法,因此接下来对该方法进行跟踪。图13-14所示为使用IDA Pro跟踪到该方法的代码。图13-14 在IDA Pro中分析原生代码第13章 恶意代码的植入在该函数的实现中查看BL/BLX等信息、跳转逻辑以及返回值。在函数的最后部分,发现一个重点,即“BL _android_log_print”是在Native层调用log的函数,再往上观察,可以发现tag是System.out.c。此时可在Java层添加日志,通过全局搜索该方法,发现此时在yi.class中该方法被调用,如图13-15所示。第13章 恶意代码的植入图13-15 Java代码

25、中搜索调用getDbPassword的点第13章 恶意代码的植入修改yi.smail代码,如图13-16所示。图13-16 修改yi.smail文件中的代码第13章 恶意代码的植入13.3 动态调试应用程序动态调试应用程序分析代码的两种方法分别为静态分析与动态分析。静态分析相对于动态分析效率低,难度大。但动态分析的过程本身就包含着静态分析,两者相辅相成。那什么是动态分析?动态分析是通过运行要分析的软件,应用动态调试技术对软件的运行状态进行跟踪和调试,来获取软件运行关键环节的临时变量及状态。由此可知,动态分析是以动态调试为基础的。下面介绍有关动态调试的内容。第13章 恶意代码的植入静态分析技术是

26、指破解者利用反汇编工具将二进制的可执行文件翻译成汇编代码,通过对代码的分析来破解软件。而动态分析是指破解者利用调试器跟踪软件的运行,寻求破解的途径。以下就以Android的APK动态分析为例介绍动态分析技术(动态调试)。第13章 恶意代码的植入13.3.1 动态调试环境配置动态调试环境配置由于动态调试的对象及工具不同,动态调试环境的配置也不相同,本小节拟使用Android Studio实现对APK文件中的Java及smali代码进行调试,并使用IDA Pro 对原生代码进行调试。因此环境配置主要以这两个调试场景为主,下面分别介绍两种调试工作的环境配置及调试过程。第13章 恶意代码的植入13.3

27、.2 使用使用Android Studio动态调试程序动态调试程序Android Studio动态调试Java代码的环境配置及操作同其他集成开发环境大同小异,本小节重点介绍Android Studio调试smail代码的环境设置,具体内容如下:(1)安装配置插件。(2)下载插件smalidea,下载地址为https:/bitbucket.org/JesusFreke/smali/downloads。(3)下载smalidea-0.03.zip。(4)下载完成后,选择Android Studio的“Settings”“Plugins”,点击【Install plugin from disk】按钮

28、,如图13-17所示。第13章 恶意代码的植入图13-17 在Android Studio中导入smalidea第13章 恶意代码的植入Android Studio安装并设置完成后进行以下操作:反编译APK,修改AndroidManifest.xml中的debug属性并在oncreate()中设置断点,如图13-18所示。图13-18 设置断点(允许进入调试模式)第13章 恶意代码的植入找到入口Activity之后,在onCreate()方法的第一行加上“waitForDebugger”代码即可。找到对应的MainActivity的smali源码,添加一行代码“invoke-static,La

29、ndroid/os/Debug;-waitForDebugger()V”,此语句符合smali语法,对应的Java代码为“android.os.Debug.waitForDebugger();”。设置界面如图13-19所示。图13-19 启动程序进入调试模式第13章 恶意代码的植入(2)使用Android Studio导入该目录SmaliDebug,如图13-20所示。图13-20 导入修改过的项目第13章 恶意代码的植入(3)选择“Create project from existing sources”,点击【Next】按钮,如图13-21所示。图13-21 导入过程截图第13章 恶意代码

30、的植入(4)成功导入工程后,右键点击src目录,选择“Mark Directory As”“Sources Root”,如图13-22所示。图13-22 设定Sources Root第13章 恶意代码的植入(5)配置远程调试的选项,选择“Run”“Edit Configurations”(如图13-23所示),并在随后出现的对话框中(如图13-24所示)选择“Remote”。图13-23 编辑配置第13章 恶意代码的植入图13-24 选择远程第13章 恶意代码的植入(6)增加一个Remote调试的调试选项,端口选择8700,如图13-25和图13-26所示。图13-25 增加一个远程调试端口第

31、13章 恶意代码的植入图13-26 选择 Project Structure菜单第13章 恶意代码的植入(7)选择“File”“Project Structure”,配置JDK,如图13-27所示。图13-27 配置JDK第13章 恶意代码的植入(8)以调试状态启动App。(9)下好断点之后选择“Run”“Debug”,如图13-28所示。图13-28 跟踪演示(10)调试程序。第13章 恶意代码的植入13.3.3 使用使用IDA Pro 调试原生程序调试原生程序(1)在IDA安装目录下获取android_server命令文件。android_server使用gdb和gdbserver实现调试

32、功能。gdb和gdbserver在调试时,必须注入被调试的程序进程中。但如果是非root设备,注入进程只能借助于run-as命令实现,所以,如果要调试应用进程,必须要注入它的内部。IDA调试so原理同上,它需要注入(Attach附加)进程才能进行调试,但是IDA没有自己开发一个类似于gdbserver的工具(即android_server),所以IDA需要运行在设备中,保证和PC端的IDA进行通信,比如获取设备的进程信息、具体进程的so内存地址和调试信息等。第13章 恶意代码的植入因此,需要将android_server保存到设备的“/data”目录下,修改运行权限。因为注入进程操作必须要使用

33、root权限,所以必须在root环境下运行,如图13-29所示。图13-29 系统中的android_server指令第13章 恶意代码的植入注意:注意:此处将android_server放在“/data”目录下,然后在终端中输入“./android_server”,按回车键运行,提示“IDA Android 32-bit”,所以在打开IDA的时候一定要是32位的IDA而不是64位的。否则,保存IDA在安装之后都是有两个可执行的程序,一个是32位的,一个是64位的。如果打开不正确会出现如图13-30所示的错误。第13章 恶意代码的植入图13-30 IDA Android报错信息第13章 恶意代

34、码的植入(2)使用IDA对程序进行调试。以上操作已将android_server运行成功。下面用IDA尝试连接,获取信息,进行进程附加注入。首先打开一个IDA,用来对so文件作静态分析;再打开一个IDA,用来调试so文件。所以都是需要打开两个IDA,也叫作双开IDA操作。如图13-31所示,选择Go选项,则无需打开so文件,进入后是一个空白页。第13章 恶意代码的植入图13-31 再打开一个IDA第13章 恶意代码的植入如图13-32所示,选择“Debugger”选项,再选择“Attach”,可观察到很多debugger,由此可见IDA工具做到了很多debugger的兼容,可调试很多平台下的程

35、序。此处选择“Remote ARMLinux/Android debugger”,将出现如图13-33所示界面。第13章 恶意代码的植入图13-32 IDA中的Debugger 第13章 恶意代码的植入图13-33 IDA中的Android debugger窗口第13章 恶意代码的植入点击【OK】按钮,将列举出设备进程信息,如图13-34所示。图13-34 设备进程列表第13章 恶意代码的植入找到函数地址,下断点,开始调试。按下组合键【Ctrl+S】找到需要调试so文件的基地址74FE4000,如图13-35所示。图13-35 获得so文件的基地址第13章 恶意代码的植入通过另一个IDA打开s

36、o文件,查看函数的相对地址E9C,如图13-36所示。图13-36 获得so文件中的相对地址第13章 恶意代码的植入通过与基地址相加得到了函数的绝对地址74FE4E9C。按下【G】键快速跳转到绝对地址,如图13-37所示。图13-37 跳转到指定地址第13章 恶意代码的植入跳转到指定地址之后,点击最左边的绿色圆点即可设置断点,如图13-38所示。点击左上角的绿色按钮,或按【F9】键运行程序。进入调试阶段后,按【F8】键进行单步调试,按【F7】键单步进入调试。图13-38 设置断点第13章 恶意代码的植入13.4 恶意代码的植入恶意代码的植入13.4.1 手工植入手工植入具有间谍软件性质的监控类

37、软件,多是通过社会工程学等手段手工植入到用户手机中的,如家长控制工具“Kidlogge”。该植入方法非常有针对性,往往更关注受监控用户的隐私,被用来做婚外恋调查、商业和政府机密窃取等不可告人的事情。该植入手段主要靠欺骗及诱惑等手段使用户接受下载恶意代码并安装。第13章 恶意代码的植入13.4.2 捆绑植入捆绑植入Android应用软件安装包中可以包含原始的、不会被压缩的资源文件(存放在安装包中的res、raw目录中),给攻击者带来了可乘之机。攻击者将恶意软件直接捆绑到普通软件中,普通软件安装后,恶意软件安装包被释放并安装到用户手机中。具体的调用恶意资源文件的途径包括通过Android入口点切换

38、到恶意代码、通过监控广播机制调用恶意代码等,具体原理如下。第13章 恶意代码的植入Android是一款建立在Linux内核基础上的操作系统,在继承Linux安全的基础上,对内核源码作了大量的增加和修改,使得Android 操作系统的安全机制不但有着传统Linux安全机制还有与虚拟机相关的和Android所特有的安全机制。但由于Android系统的开放性,Android应用程序存在的安全性隐患比较多。比如存在多种盗版市场,用户无法鉴别哪些是具有潜在危险的软件,可能会下载到不安全的软件,恶意软件就是通过这种方式进行传播的。第13章 恶意代码的植入调查表明:在第三方市场中的应用程序部分来自于对官方市

39、场的剽窃或重新打包(利用本章前半部分介绍的App逆向及静态、动态调试技术对官方App进行分析、剽窃后,将恶意代码插入到官方App的代码中进行重新打包)。即便是在官方的安卓市场,也存在对其他各方合法应用程序重新打包的恶意应用程序。其次,Android采用对应用程序签名的形式为开发者自签名,无法对开发者的身份进行验证,恶意代码静态注入正是利用Android签名机制的缺陷。第13章 恶意代码的植入恶意程序根据实现方法可分为两类:第一类是攻击者编写恶意应用,使用与常见应用相似的图标与界面,通过伪装成常见应用来达到欺骗的目的,这种方式工作量大且效果不好;第二类是攻击者对正常应用实施代码植入攻击,修改正常

40、应用的程序执行流程来达到攻击的目的,即恶意代码植入。第13章 恶意代码的植入根据植入方式不同,恶意代码植入分为三种。第一种是基于程序入口点的恶意代码植入。第二种是基于Android系统广播机制的恶意代码植入第三种是基于篡改字节码的恶意代码植入。第13章 恶意代码的植入以下分别介绍这三种攻击流程。图13-39简要描述了通过程序入口点植入恶意代码的流程。图13-39 基于程序入口点的恶意代码植入第13章 恶意代码的植入在描述利用Android广播机制进行恶意代码植入之前,先复习一下Android广播机制。Android提供一套完整的API允许应用程序自由地发送和接收广播,其中主要分为两种类型:标准

41、广播和有序广播。标准广播是一种异步执行的广播,广播发送之后所有的广播接收器几乎会在同一时刻接收到这条广播,效率较高。有序广播是一种同步执行的广播,广播发送后某一个时刻只能一个广播接收器可以接收到,即广播的传播是有先后顺序的。第13章 恶意代码的植入Android手机接收短信的广播是有序广播,可以通过构建一个恶意的短信广播接收器,提高其接收广播的优先级,使其优先接收到短信,再对短信进行修改、拦截等恶意行为,接收机具有最高优先级,在接收到信息后,截断信息以防止向后继续传播,具体流程如图13-40所示。第13章 恶意代码的植入图13-40 基于广播机制的恶意代码植入第13章 恶意代码的植入基于篡改字

42、节码的恶意代码植入的流程图如图13-41所示。图13-41 基于篡改字节码的恶意代码植入第13章 恶意代码的植入13.5 重重 新新 打打 包包重新打包又称为二次打包,指开发者开发完成后对程序进行签名、打包发布。黑客在植入恶意代码时,需要对已发布的App进行逆向,篡改后重新进行签名、打包发布,因此称其为二次打包。开发者为防止自己的作品被二次打包,通常采用签名技术来防止二次打包。本小节先介绍二次打包流程,再介绍二次打包的具体操作过程。第13章 恶意代码的植入二次打包流程如下:(1)反编译。编译java:将classes.dex文件反编译成中间文件(smali、jar)。反编译布局文件:将axml

43、文件反编译成xml文件。(2)修改。修改smali文件(能映射成java文件的先映射成java文件再进行分析,可以有效降低分析难度)。修改xml文件。第13章 恶意代码的植入(3)重新编译。将修改后的smali文件编译成classes.dex文件。将修改后的xml文件编译成axml文件。(4)重签名。对新的APK进行重签名,一款新的App便产生了,具体操作流程如下:(1)使用JDK自带的apktool工具生成自己的签名文件demo.keystore,命令如下:Keytool-genkey-aliasandroidauto.keystore-keyalg RSA-validity 20000-k

44、eystore android.keystore第13章 恶意代码的植入(2)将下载的某应用的APK文件格式修改为.zip后缀,并进行解压,查看目录,将其中的META-INF目录删除。再解压META-INF目录中的xx.RSA、xx.SF和MANIFEST.MF三个文件,该三个文件中存放的是关于签名的信息。将修改过后的解压目录重新压缩生成新的.zip包文件,修改后缀名为.apk文件。(3)在植入恶意代码之后,使用生成好的demo.keystore文件对新的zip包进行签名,(4)安装验证。正确的验证方式是先确保相同包名的应用已卸载,再进行安装。最后安装官方签名包,若发现签名冲突,安装失败,则达

45、到验证效果。第13章 恶意代码的植入小小 结结本章以恶意代码植入的流程(反编译逻辑分析动态调试恶意代码植入二次打包)为线索展开讨论。在反编译小节中分别介绍了反编译Dalvik字节码文件、反编译原生文件等内容。由于掌握这些内容必须对Dalvik、smail及so文件的调用机制等基础知识有一定的了解,因此该节包含大量相关基础知识。逻辑分析对应的是传统的静态分析,动态调试对应的是传统的动态分析。第13章 恶意代码的植入在静态分析中讨论了Java代码分析、smali代码分析、原生代码分析等内容及相关基础知识。在动态调试中主要介绍了基于Android Studio动态调试Java代码的操作流程和基于IDA Pro动态调试原生代码的操作流程。通过反编译、静态分析及动态分析后即可进行恶意代码的植入。在恶意代码植入中,介绍了恶意代码植入类型、植入方式及植入途径等内容。由于恶意代码植入种类繁多,本章只简单介绍概念性内容,但依据之前的基础知识结合本章介绍的植入途径,应很快具备恶意代码植入技能。植入恶意代码后,必须进行二次打包,才能完成最后的工作。所以在本章的二次打包小节重点介绍了该问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《移动智能终端安全》课件第13章.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|