移动智能终端安全课件:应用软件的防护_第1页
移动智能终端安全课件:应用软件的防护_第2页
移动智能终端安全课件:应用软件的防护_第3页
移动智能终端安全课件:应用软件的防护_第4页
移动智能终端安全课件:应用软件的防护_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

应用软件的防护14.1应用程序的保护14.2Android平台的恶意代码检测小结

14.1应用程序的保护

14.1.1使用加壳保护

1.加壳原理软件加壳技术是一种代码加密技术,用来保护软件不被非法修改或反编译,运行时比原程序更早启动,并且拥有控制权。具体流程是首先启动一个外壳程序,再由外壳程序解密应用本身代码文件并进行动态加载。该方法可以有效防止针对应用内部关键函数的篡改,但是攻击者可以通过恶意代码植入的方式来篡改外壳程序的执行流程,实现破坏系统等攻击的目的。

以下介绍该项技术的基本原理。

(1)在加壳的过程中需要三个对象:

①需要加密的apk(源apk)。

②壳程序apk(负责解密apk工作)。

③加密工具(将源apk进行加密和壳dex合并成新的dex。

(2)主要步骤:将需要加密的apk和自己的壳程序apk,用加密算法对源apk进行加密,再将壳apk进行合并得到新的dex文件,最后替换壳程序中的dex文件即可。得到的新的apk叫作脱壳程序apk。脱壳程序apk不是完整意义上的apk程序,其主要工作是:负责解密源apk,然后加载apk,并使其正常运行。

在这个过程中需要了解的知识是:将源apk和壳apk合并成新的dex文件需要涉及dex文件的格式。

2.

dex文件格式

1)

dex文件结构

一个完整的dex文件可分为三个区域片段,分别是文件头、索引区和数据区,其文件结构如图14-1所示。文件头包含本文件的标识符、校验和、大小等信息,并存储所有索引区的大小和偏移地址;索引区中存储字符串、类型、方法原型等索引信息,该信息可用结构体来表示,通过索引信息可找到数据在dex文件中的具体位置;数据区中存储具体的数据以及方法指令。

图14-1

dex文件结构

文件头header的大小固定为0x70,可以用一个结构体来描述,其中每一项的具体含义如图14-2所示。

图14-2文件头结构图

对于class_defs结构体,其存储的是dex文件中所有class的相关信息,比如class的类型、访问类型和包含的方法等。其结构如图14-3所示。

图14-3

class_defs结构体

该结构的每一项含义在图14-3中已经注释。从该结构可以看出,class_data_off所指向的内容为该class类所包含的全部数据,该数据由结构体组成,如图14-4所示。class_data_off存储的数据为DexClassData结构体的偏移地址。

图14-4

DexClassData结构体

DexClassData描述dex文件中某个类的相关信息,DexMethod描述该类中函数的信息。DexMethod的methodIdx是该函数在method_id_item中的Index索引值,accessflags描述该函数的访问权限以及其他的信息,codeoff是一个偏移地址,偏移所指向的位置为DexCode结构。DexCode描述函数的具体信息,具体含义如图14-4的注释所示。通过对class_defs结构的分析,可查找类包含的函数的信息。

2) dex文件头部信息

文件头部的各项如表14-1所示。只需关注表14-1中的checksum、signature和file_size三个项目。

(1)

checksum。

checksum(文件校验码)使用adler32算法校验文件中除magic、checksum外的所有文件区域,用于检查文件错误。

adler32是MarkAdler发明的校验算法,和32位CRC校验算法相同,是一种用于保护数据、防止意外更改的算法。因为该算法容易被伪造,所以是不安全的保护措施。但是,其计算速度相比CRC更快。

alder32校验算法流程包括求解两个16位的数值A、B,并将结果连接成一个32位整数。A是字符串中每个字节的和,而B是A在相加时每一步的阶段值之和。在adler32开始运行时,A初始化为“1”,B初始化为“0”,最后的校验之和要与65

521(继216之后的最小素数)进行取模运算。

具体公式如下:

(2)

signature。

signature是使用SHA-1哈希算法对除magic、checksum和signature外的所有文件区域进行操作,用于唯一识别文件。

①SHA-1哈希算法流程。对于任意长度的明文,SHA-1首先对其进行分组,使得每一组的长度为512位。每个明文分组的摘要生成过程如下:

a.将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。

b.申请五个32位的链接变量,记为A、B、C、D、E。

c.

16个子明文分组扩展为80个。

d.

80个子明文分组进行四轮运算。

e.链接变量与初始链接变量进行求和运算。

f.链接变量作为下一个明文分组的输入,重复进行以上操作。

最后,五个链接变量里的数据即为SHA-1摘要。

②SHA-1的分组过程。对于任意长度的明文,SHA-1的明文分组过程与MD5类似。首先为明文添加位数,使明文总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文之后。此时的明文长度是512位的倍数。与MD5不同的是,SHA-1的原始报文长度不能超过2的64次方,另外SHA-1的明文长度从低位开始填充。

对于512位的明文分组,SHA-1将其分成16个子明文分组(sub-block),每个子明文分组为32位,使用M[k](k

=

0,1,…,15)表示该16个子明文分组。将该16个子明文分组扩充到80个子明文分组,记为W[k](k

=

0,1,…,79),扩充的方法如下:

Wt

=

Mt,0≤t≤15

Wt

=(Wt3⊕Wt8⊕Wt14⊕Wt16)<<<1,16≤t≤79

③SHA-1的四轮运算。SHA-1有四轮运算,每一轮包括20个步骤,一共80步。当第一轮运算中的第1步骤开始处理时,A、B、C、D、E五个链接变量中的值先赋值到另外五个记录单元A'、B'、C'、D'、E'  中。这五个值将保留,用于在第四轮的最后一个步骤完成之后与链接变量A、B、C、D、E进行求和操作。

SHA-1的四轮运算,共80个步骤使用同一个操作程序,即

A,B,C,D,E←[(A<<<5)

+

ft

(B,C,D)

+

E

+

Wt

+

Kt],A,(B<<<30),C,D

其中:ft

(B,C,D)为逻辑函数,Wt为子明文分组W[t],Kt为固定常数。

此操作程序的意义为:

a.将[(A<<<5)

+

ft

(B,C,D)

+

E

+Wt

+

Kt]的结果赋值给链接变量A。

b.将链接变量A的初始值赋值给链接变量B。

c.将链接变量B的初始值循环左移30位后再赋值给链接变量C。

d.将链接变量C的初始值赋值给链接变量D。

e.将链接变量D的初始值赋值给链接变量E。

SHA-1规定四轮运算的逻辑函数如表14-2所示。

在操作程序中需要使用固定常数Ki

(i = 0,1,2,…,79),Ki的取值如表14-3所示。

(3)

file_size。

F

ile_size即dex文件大小。为什么只需要关注checksum、signature和file_size三个字段呢?因为若要将一个文件(加密之后的源apk)写入到dex中,那么肯定需要修改文件校验码(checksum),因为其作用是检查文件是否有错误。signature也一样,是唯一识别文件的算法。此外,还需要修改dex文件的大小。不过此处还需要一个操作,即标注加密的apk的大小,因为在脱壳的时候,需要知道apk的大小,才能正确地得到apk。那么标注加密apk的大小值放到哪呢?该值直接放到文件的末尾即可。所以总结需要做的步骤是:修改dex的三个文件头,再将源apk的大小追加到壳dex的末尾。修改之后得到新的dex文件样式如图14-5所示。

图14-5修改后的dex文件结构

14.1.2使用NDK保护

AndroidNDK直译为“安卓原生开发套件”。它是一系列工具的集合,能够帮助开发者快速开发C(或C++)的动态库,可以将原生C、C++ 代码的强大功能和Android应用的图形界面结合在一起,解决软件跨平台问题。AndroidNDK集成了交叉编译器,通过JNI接口向开发人员提供一套JNI接口函数,通过这些函数可以在原生C、C++ 代码中与Java代码进行数据交换。

具体如何利用NDK来有效保护源代码呢?常采用的策略是将代码中的敏感信息隐藏在NDK中,比如服务器的IP地址、加密的算法等。如何才能隐藏此类信息呢?应该使用AndroidNDK把这些数据编译在so文件中,通过JNI获取,则可达到保护敏感信息的目的,即用NDK隐藏敏感信息。下面通过一个例子来演示具体隐藏的过程。

1.准备工作

(1)下载最新版AndroidDeveloperTool。AndroidDeveloperTool也称作ADT,是Google的一款Android集成开发工具。它解压后有两个目录:Eclipse和SDK。Eclipse目录里是一个定制的Eclipse,已经装好了SDK插件、NDK插件和C/C(CDT)等插件,大小不到400

MB。SDK目录下是一个最新API级别的AndroidSDK。建议下载该ADT。如果之前下载过各个版本的SDK,将它们拷贝过来仍可以正常使用。若没有下载过SDK,则需要在Eclipse下安装C/C(CDT)和NDK插件。

(2)下载AndroidNDK,大小为294

MB。

(3)如果是Windows用户,还需安装Cygwin1.7(建议不要以Windows作为开发平台)。

2.创建项目

(1)新建一个AndroidProject。

(2)右键选择“AndroidTools”,在弹出的下拉菜单中点击“AddNativeSupport…”,如图14-6所示。

图14-6设置增加对Native的支持

输入so库文件的名字。so文件位于项目libs目录下的armeabi文件夹中,文件名为libxxxx.so。在此输入的是“AppConfig”,编译成功后生成libAppConfig.so文件,最后点击【确定】按钮,Eclipse变成C/C++ 编辑视图,NDK插件在项目下创建了一个jni目录,并且在jni目录下创建AppConfig.cpp文件和Android.mk文件,如图14-7所示。

图14-7生成AppConfig.cpp及Android.mk文件

3.代码编写

(1)编写一个Java类,包含一个getAppUrl()的native方法。因为要隐藏服务器的地址,所以需要返回一个String字符串。

(2)编写AppConfig.cpp文件。

以下分别对以上各行代码进行解释。

第一行代码:引入jni.h头文件。

第二行代码:因为此处用C语言,所以需要extern“C”(C为大写)。

第三行代码:JNIInterface类的getAppUrl()方法位于com.loveplusplus.hellojni包下,所以有一个固定的写法:

Java包名类名_方法名

JNIEnv*env,jobjectthiz是固定传入的参数。

第四行代码:此行注释掉的代码是C语言返回字符串的写法。

第五行代码:返回一个字符串,再点击【编译】按钮,NDK会将AppConfig.cpp编译到libAppConfig.so文件中。

14.1.3使用代码混淆保护

虽然通过编写NDK代码可以有效保护源码,但并不是所有人都具备C、C++编程基础,因此在编写NDK代码时也是困难重重。代码混淆是指对原始程序进行处理,得到与原程序功能完全一致但结构不一致的新程序。Google在AndroidSDK2.3时就加入了Proguard代码混淆工具,开发者可以通过该工具对自己的代码进行混淆。通过混淆技术,源文件中的类、方法以及字段等会变为无意义的名称,使得逆向人员很难理解其中的含义,难以对代码进行分析,达到有效保护源码的效果。下面简要描述基于Android

StudioIDE的代码混淆实现过程。

(1)开启混淆。在AndroidStudio中找到项目module的build.gradle。将minifyEnabled设置为true。

(2)公共部分。在混淆的过程中,有一部分是固定不变的。下面列出保持不变的模块,要使用时只需将代码copy即可。

①基本指令区:

②默认保留区:

③webview:

(3)不需要混淆的代码。不混淆的部分用关键字-keep来修饰。不混淆的部分分为如下几个模块:

①实体类。

②第三方包。

③与js互相调用的类(没有可不写)。

④反射相关的类和方法。

(4) libs下的第三方jar包的混淆方式。保留libs下的jar包的方式为:使用 -keep关键字,找到libs目录,然后打开相应的jar文件,找到对应的包名,添加如下代码:

-keepclass包名.**{*;}

(5)complie的第三方jar包的混淆方式。complie的第三方jar包的混淆方式和libs下的相同。打开对应的引用jar文件,添加如下代码:

-keepclass包名.**{*;}

(6)代码注释的混淆方式。需要使用@Bind来修饰变量。

14.1.4使用签名校验保护

由于经过恶意代码植入的软件需要重编译才能够安装使用,因此导致签名的改变以及程序本身的一些变化,故可以通过检查签名以及检查软件本身的校验值来实现对抗重编译。

1.检查签名

AndroidSDK提供检测软件签名的方法,可调用系统函数来获得签名。如果签名较长,则可以通过比较签名的哈希值来检验签名是否发生改变。检查签名基于Android签名机制。

Android签名之前,需要了解的知识点有:数据摘要(信息摘要)、签名文件、证书文件、jarsign工具签名、signapk工具签名、keystore文件与pk8文件和x509.pem文件的区别、如何手动签名。以下分别介绍这些知识点。

1)数据摘要(信息摘要)、签名文件和证书文件

(1)数据摘要。数据摘要是一种算法,即对一个数据源进行一个算法之后得到一个摘要,也叫数据指纹。不同的数据源,其数据指纹也不一样。

信息摘要算法(MessageDigestAlgorithm)是一种能产生特殊输出格式的算法,其原理是根据一定的运算规则对原始数据进行某种形式的信息提取,被提取出的信息被称作原始数据的消息摘要。

信息摘要算法有MD5算法和SHA-1算法及其大量的变体。

信息摘要的主要特点有以下三点:

①无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。

②只要输入的原始数据不同,对其进行摘要以后产生的消息摘要必不相同。

③具有不可逆性,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的原始消息

(2)签名文件和证书文件。签名文件和证书文件成对出现,两者不可分离。而且后面通过源码可以看到,这两个文件的名字一样,但后缀名不一样。要确保可靠通信,必须要解决两个问题:首先,确定消息的来源是其申请的那个人;其次,保证信息在传递的过程中不被第三方篡改,而且即使被篡改,也可以发觉。数字签名是为了解决这两个问题而产生的,它是对非对称加密技术与数字摘要技术的一个具体应用。

消息的发送者先生成一对公私钥对,再将公钥给消息的接收者。如果消息的发送者想给消息接收者发消息,在发送的信息中,除了要包含原始的消息外,还要加上另一段消息。这段消息通过如下两步生成:

第一步,对要发送的原始消息提取消息摘要。

第二步,对提取的消息摘要用自己的私钥加密。

通过这两步得出的消息,即原始信息的数字签名。而对于消息的接收者来说,所收到的消息包含两个部分,一是原始的消息内容,二是附加的数字签名。接收者将通过以下三步验证消息真伪。

①对原始消息部分提取消息摘要,注意使用的消息摘要算法要和发送方使用的一致。

②对附加上的那段数字签名使用预先得到的公钥解密。

③比较前两步所得到的两段消息是否一致。如果一致,则表明消息确实是期望的发送者发的,且内容没有被篡改过;如果不一致,则表明传送的过程中出现问题,消息不可信。

过数字签名技术,可以有效解决可靠通信的问题。如果原始消息在传送的过程中被篡改,则消息接收者对被篡改的消息提取的摘要与原始的不同。并且,由于篡改者没有消息发送方的私钥,即使可以重新算出被篡改消息的摘要,也无法伪造出数字签名。

综上所述,数字签名其实是只有消息的发送者才能产生的别人无法伪造的一段数字串,此数字串是对消息的发送者发送消息真实性的有效证明。有一个前提,即消息的接收者必须事先得到正确的公钥。

其中,数字证书用到了数字签名技术,只不过要签名的内容是消息发送方的公钥,以及其他信息。但与普通数字签名不同,数字证书中签名者是要具有一定公信力的机构。所以,数字证书可以保证数字证书里的公钥确实是证书所有者的,或者证书可以用来确认对方的身份。因此,数字证书主要是用来解决公钥的安全发放问题。

2)

jarsign工具签名和signapk工具签名

Android中有两个签名工具:jarsign和signapk。jarsign是Java自带的工具,可以对jar进行签名。signapk是专门为Android应用程序APK进行签名的工具,两者的签名算法没什么区别,主要是签名时使用的文件不一样。

3)

keystore文件与pk8文件和x509.pem文件的区别

jarsign工具签名使用的是keystore文件,signapk工具签名使用的是pk8、x509.pem文件。其中在使用Eclipse工具写程序输出Debug包的时候,默认用jarsign工具进行签名,而且Eclipse中有一个默认签名文件,如图14-8所示。

图14-8Eclipse中默认签名文件

4)如何手动签名

(1)使用keytool和jarsign来进行签名。在正式签名处发布包的时候,需要创建一个自己的keystore文件,如图14-9、图14-10所示。

图14-9导出要签名的发布包图14-10创建签名文件

可以对keystore文件起自己的名字,后缀名无关紧要。创建文件之后,生成MD5和SHA1的值,该值不用记录,可通过以下命令查看keystore文件的MD5和SHA1的值。“keytool-list-keystoredebug.keystore”命令的执行结果如图14-11所示。

图14-11查看签名文件

(2)使用signapk来进行签名,其代码如下:

java-jarsignapk.jar.testkey.x509.pemtestkey.pk8debug.apkdebug.sig.apk

(3)两种签名方式的区别。jarsign签名时用的是keystore文件,signapk签名时用的是pk8和x509.pem文件。因为都是给APK进行签名的,所以keystore文件和pk8、x509.pem文件之间可以相互转化。

2.检查校验值

植入恶意代码后,软件本身会发生变化。因此可以再对软件计算MD5值,保存在网络上,在启动时对软件的MD5值进行校验,从而判断软件是否被重打包过。这在一定程度上防止了软件的重编译。检查校验值是基于MD5算法实现的,下面通过介绍MD5算法的基本思路来理解该功能是如何实现的。

MD5算法是一种信息摘要算法,主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,是“压缩 + 加密 +

hash算法”的结合体,是绝对不可逆的。

1)

MD5算法的计算步骤

MD5以512位分组来处理输入的信息,且每一分组被划分为16个32位子分组,经过一系列的处理后,算法的输出由四个32位分组组成,四个32位分组级联后将生成一个128位散列值。

(1)填充。如果输入信息的长度(bit)对512求余的结果不等于448,则需要填充位,使得对512求余的结果等于448。

(2)记录信息长度。

(3)装入标准的幻数(四个整数)。

(4)四轮循环运算。

2)

MD5算法的应用

(1)一致性验证。MD5的典型应用是对一段文本信息产生信息摘要,以防止被篡改。常在某些软件下载站点的软件信息中看到其MD5值,作用在于可在下载该软件后,对下载的文件用专门的软件(如WindowsMD5Check等)做一次MD5校验,以确保用户获得的文件与该站点提供的文件为同一文件。

(2)数字证书。如果有一个第三方的认证机构,用MD5可以防止文件作者的“抵赖”,即数字签名应用。

(3)安全访问认证。在Unix系统中用户的密码以MD5(或其他类似的算法)经hash运算后存储在文件系统中。当用户登录时,系统将用户输入的密码进行MD5hash运算,和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。

14.2

Android平台的恶意代码检测

基于Android平台的恶意代码检测系统由静态检测、动态检测和云端检测三种组成。系统详细功能结构如图14-12所示。下面对各个类型进行深入的阐述,并详细介绍实现过程中使用的框架、算法和平台工具。图14-12恶意代码检测模型

首先,静态检测模块通过基于特征码匹配技术对系统文件和应用进行静态扫描,找出恶意软件和被已知恶意代码感染的软件。

第二,动态检测模块分为两个部分。一部分通过在后台监听系统广播并分析应用行为来判断该应用是否为恶意软件或被恶意代码感染,建立应用黑白名单;另一部分是通过监听系统信息,将信息数据上传至云端服务器进行存储和分析。

最后,云端检测模块利用基于周期性频次异常检测的技术来分析终端节点上传的系统信息记录。服务器与终端设备间的通信采用双密钥加密算法。

基于Android平台的恶意代码检测系统有以下五个组成部分:

①人机交互:主要用于系统和用户之间的交互,即完成一些简单的输入输出功能。该模块的实现依赖Android平台的程序框架层提供的丰富的API。

②静态检测:主要用于在未联网的状态下或在普通模式下进行恶意代码检测。该模块的实现依赖于特征码匹配技术的实现,即串扫描技术。

③动态检测:主要是对系统环境进行实时的监控,在一些特定的事件发生时起作用。另外该模块负责监听一些关键的系统行为信息,并记录到云端服务器数据库,进行周期性的统计和分析,从而发现隐藏的恶意软件。

④云端检测:主要是由云端的高性能服务器在基于周期性频次异常检测技术对大量的用户系统信息进行分析检测后,生成检测报告并返回给终端节点。

⑤数据中心:主要是为其他模块的持久化及相关操作提供数据支持,对病毒和软件黑白名单数据结构进行说明。

14.2.1静态检测

1.基于特征码的匹配

基于特征码匹配模块的设计是利用串扫描技术对恶意代码进行检测,以此来构建整个安全系统的第一道防线。由于串扫描技术算法简单且维护方便,其检测效率十分高,故应用广泛。目前在用的安全产品都使用了该技术。串扫描技术主要是先对系统中的应用程序和静态文件进行特征码提取,再与数据库中的特征码进行快速匹配得出匹配结果,如果待检测的文件中包含恶意代码则给出用户提示信息,否则进入下一个匹配流程。

针对移动终端设备资源和计算能力有限的问题,该系统对静态检测模块进行了优化。优化过程如下:

(1)将待检测对象拆解成二进制文件,并提取基本特征和特殊特征等信息。

(2)将数据库中的特征码依其行为进行详细分类,如扣费恶意代码、网络流量恶意代码、传播恶意代码和系统破坏恶意代码等。再将提取的特征码按照其特殊特征进行串扫描,实现快速高效的匹配。

(3)根据(2)中的检测结果对应用程序进行名单分类。若包含恶意代码,则给出危险提示信息,并将其加入应用黑名单;若扫描发现没有包含任何恶意代码,则将其加入白名单,进行下一轮匹配过程。

在没有联网的情况下系统无法与云端建立连接,此时可以使用该功能对系统做一定程度的安全检查。

2.匹配实现

该模块的实现应用了数据中心的两个数据模块,即恶意代码特征数据库和应用黑白名单。这些数据都需要进行持久化处理,关系型数据库是最好的选择。在Android平台中,按照数据访问权限的不同,数据存储方式可分为私有和开放两种类型;按照存储方式的不同,又可分为文件存储、SQLite数据库、内容提供器、SharedPreferences和网络五种类型。根据检测系统的安全特性,可选择私有的存储方式,若系统中存在的数据量较大,则可选择SQLite数据库作为系统的数据存储方式。匹配流程如图14-13所示。

图14-13匹配流程

1)串扫描

串扫描技术是指通过扫描已知恶意代码的二进制文件,提取出该恶意代码中存在的且具有唯一性的字节序列生成特征码,将待检测的文件对象拆分成字节片段与特征码字节序列匹配的技术。串扫描技术是传统特征码扫描技术的基础。该方法的一般步骤是先收集大量的恶意代码样本,提取特征码、建立特征码库,最后通过不断更新用户端的恶意代码特征码库来到达检测的目的。

这种方法存在滞后性。当新的恶意代码威胁出现后,基于特征码匹配的反病毒软件平均48天后才能发挥作用。而在这段时间内,恶意代码可能已经给系统或者用户带来了不可估量的损失和伤害。随着新的恶意代码的不断出现,用户端的恶意代码特征库将会变得越来越大,在一定程度上会降低检测的效率。另外,该方法也无法识别恶意代码的变种。

2)启发式扫描

为了改进特征码扫描技术滞后性的缺点,安全软件使用了启发式扫描技术。该技术是在对海量的恶意软件和正常软件进行分析后,定义一系列区分正常软件和恶意软件的规则,通过规则,能判断软件的类别。启发式技术是一种被动的检测方式,通过扫描应用程序文件内容或者观察应用执行过程中的某些行为后作出判断。比如一个游戏软件被一种从后台发送短信的恶意代码感染后,其静态文件结构发生变化,行为也变得异常。

此时可通过启发式规则来增强对此类恶意代码变种或未知代码的检测。但针对这种方式,恶意代码的制造者能够通过代码迷惑技术对恶意代码进行压缩、加密、插入垃圾指令等手段,轻松躲避启发式检测技术的检测。另外,此类技术依赖于脱壳、解密、反汇编等技术的发展来对静态文件进行分析。

14.2.2动态检测

1.动态检测的概念

虽然简单的特征码匹配广泛应用,但存在更新滞后等问题。为了保障移动终端设备的安全,还需要采用其他措施来提高系统的安全性能。因此,可以采用动态检测的方式来监听系统中运行的应用进程,从而阻止被恶意代码感染的应用运行或者执行恶意代码。

监听到系统事件后,就可以对捕获到的系统事件进行对比分析了。整个过程可以分为以下两个步骤来实现。

(1)首先该安全软件将对比应用安装时所申请的系统权限记录。如果应用执行了未经授权的恶意行为,则调用系统权限来阻止该行为的执行,并提示用户进行查杀或者卸载。

(2)利用系统信息综合评估模块来对授权的行为进行分析评估,找出隐藏在正常应用里面的恶意代码行为,达到彻底消除安全威胁的目的。

2.动态检测的实现

接收和发送短信、拨打电话、访问网络、访问数据库和文件读取等都被定义为敏感事件。这些是平时使用手机时经常产生的事件,但也是恶意代码经常利用的事件。为了能够检测到恶意代码的恶意行为,必须对这些事件进行监听、分析以区分恶意行为和正常行为,降低误报和漏报的发生率。在对事件进行监听之前,需要对已安装应用的权限做一个记录,如访问网络、拨打电话和发送短信等。

实现对这些事件的监听有两种方式:一种是使用广播组件,一种是使用观察者模式。下面分别对这两种方式进行详细介绍。

1)使用广播组件接收事件消息

首先通过在该安全软件的配置文件AndroidManifest.xml中进行如下配置,并将该监听级别设置为最高,即将过滤属性priority设置为1000。

2)使用观察者模式监听系统事件

该模式主要依赖系统提供的Observer类,基于此类,派生出了ContentObserver和FileObserver等类。下面以FileObserver为例进行简要说明。该类采用观察者模式,用于监听文件系统的变化。详细的代码实现逻辑和步骤如下:

(1)实现一个监听器类MyObserver,该类是FileObserver的派生类,定义了被监听对象的处理逻辑。

(2)实例化一个MyObserver类,并启动对SD卡文件系统的监听。

温馨提示

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

评论

0/150

提交评论