文章关键词:电子数据取证、手机取证、介质取证、逆向分析
一、前言
随着智能手机和互联网技术的发展,各种终端应用软件应运而生。本文研究了APK结构、提取方式、逆向分析工具等,并通过实际案例,按照电子数据取证流程从静态分析和动态分析两方面研究了手机APK的取证方法。
二、案件背景
Android平台因其开放性和高效性的特点,深受用户青睐,成为各种恶意应用和手机病毒主要攻击对象,各种安卓安装包(APK)给用户带来便利的同时,也给移动网络安全带来很大隐患,为犯罪分子提供了可乘之机。
Android手机在使用一段时间后,会莫名多出一些APK件,运行速度也越来越慢,有些恶意手机木马会将用户手机上的通讯录等信息进行上传,泄露用户隐私,有些扣费木马会通过发送短信进行自动扣费,有些木马会拦截用户短信从而窃取银行卡密码等。
三、APK逆向分析
Android APK的逆向分析是指将APK程序用反编译工具进行反汇编,通过分析反汇编的代码来理解应用程序的功能,该技术是目前对恶意代码类案件进行检验的重要手段。
3.1APK的提取方式
提取Android手机应用(APK)的方法主要分为三种:
1. 网络提取:通过网络链接获取APK,比如从百度网盘下载或者通过短信中的链接下载。这种方式依赖于应用的在线存储和传输,可以在用户主动下载应用时进行提取。
2. 手机内提取:从手机内部获取APK,可以通过直接查找安装文件进行提取。使用ADB命令也是一种有效的方式,通过连接手机进行文件提取。即使应用被删除,专用数据恢复软件可以在手机镜像中进行恢复提取。如果从网盘获悉某可疑APK的下载信息,但链接失效,可以通过全盘镜像搜索,查找用户是否曾安装过该应用并留存在镜像中。
3. 第三方工具提取:利用第三方工具如360手机助手等软件,连接电脑和手机后,从手机中找到目标文件,然后导出成APK格式的文件。这种方式相对简便,适合不具备专业技术背景的用户。
这三种提取方式各有优势和适用场景,具体选择取决于调查者的需求、条件和技术能力。
3.2逆向分析工具
APK反编译有四种方法,一是在JAVA环境下可以用Apktool、dex2jar、jd-gui等工具将APK文件进行反编译。其中Apktool工具,能查看res文件下xml文件、AndroidManifest.xml和图片;dex2jar工具将APK反编译成Java源码(classes.dex转化成jar文件);jd-gui工具作用是查看APK中classes.dex转化成的jar文件,即源码文件。这是一种比较传统的反编译方法,用此办法反编译得到的源码结构清晰,可读性好,适合有一定反编译基础的取证人员使用。
二是使用jadx-gui bat工具(前提是配置好JAVA环境),该工具操作非常简单,反编译能力强,代码结构友好,只要将需要反编译的APK文件拖到工具界面中即可反编译,它将APK的XML资源也一并反编译,jadx能让我们在找到关键代码的同时,找到在哪些地方调用或者引用了它,还能一键导出Gradle工程,搜索功能也非常方便,而且支持多平台操作。虽然大于50M的文件出现卡顿现象,但可以满足大部分取证工作中反编译的需求。
三是使用Android killer工具,它是一款免费可视化安卓反编译软件箱,其实是对第一种方法提到的操作进行一系列的封装,功能强大,使用起来简单方便,能快速分析出一个复杂的APP执行的流程,也可以进行搜索,但只能在windows平台下使用。Android killer也是电子取证工作中的一种常用工具。
四是使用IDA pro工具,它是一款世界顶级的交互式反汇编工具,是一款收费软件,不存在任何注册机、注册码和破解码,具有更好的反汇编、深层分析的能力。
3.3获取的权限
对安卓应用程序来说,AndroidManifest.xml是最重要的信息源,同时也是侦查破案工作中分析的重点,Manifest中包含有该APK能够获取的权限等信息,一个恶意木马APK往往会拥有许多权限[9]。如果拥有短信权限(编辑短信、发送短信、读写短信、拦截短信)、手机权限(获取手机号码、搜集用户IMEI号、系统版本号、拨打电话、拦截电话)、通讯录权限(读取通讯录、删除通讯录)、相机权限、位置权限(获取位置、发送位置)、访问网络等过于隐私的权限,应该对此APK文件进行重点分析。
3.4逆向工具分析APK文件(以Jadx-gui工具为例)
首先在win11操作系统电脑上配置安装好JDK8环境,启动Jadx-gui工具。加载APK应用程序,如图1所示,加载后可以看到源代码、资源文件、证书三大类。双击证书可以查看证书内容,证书中包含我们需要关注的公钥信息、签名信息等。双击资源文件里的AndroidManifest.xml可以对AndroidManifest.xml进行查看分析,看到AndroidManifest.xml的获取权限如图1所示。
在Jadx-gui工具下,利用Jadx-gui的搜索功能,能更快捷地找到线索。如通过搜索关键词“@”,查找APK的回传邮箱,搜索关键词“http”,查找APK中链接或者回传网络地址,搜索"Password”“sms”“cnontact”等关键词,可以在代码中查找有关的短信、联系人的代码函数,如图2所示。
图二 利用搜索关键词获取信息
然后再具体分析源代码,找到功能函数,进一步分析出APK文件的功能,找到回传地址和手机号。
四、实战分析取证
案例情况:在某开发区,一家企业老板收到一条陌生短信,内容包含一个链接。好奇心驱使下,老板点击了链接进行查看。几天后,老板在手机上接到一条似乎来自熟人的短信,内容是请求借款,金额高达30余万元。出于信任,老板迅速完成了汇款,但事后发现自己被骗。为了调查此事件,取证人员在老板的手机中发现了一个疑似APK文件,决定对其进行详细分析。
4.1静态分析
使用Apktool工具对APK文件进行反编译,在生成的文件中,对AndroidManifest.xml进行查看分析,然后使用jd-gui工具打开classes-dex2jar.Jar查看具体代码。
AndroidManifest.xml的权限主要有:android.permission.READ_CONTACTS:允许应用访问联系人通讯录信息;
android.permission.READ_SMS:读取短信内容;android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件;
android.permission.INTERNET:访问网络连接,可能产生GPRS流量。
可以看出AndroidManifest.xml主要有接收、读取、写入、回传等功能。通过阅读分析主要函数的代码,找到了getMail()、getNber()、getPass()这三个函数以及回传邮箱函数代码如图3所示。
图三 获取回传邮箱代码
通过分析:邮箱函数返回值pkeyc+pkeye+pkeyl+pkeyk+pkeyg为:shi* * 449@yeah.net;电话号码返回值pkeyh+pkeya+pkeyi+pkeyf为:131526* * 121;密码函数返回值pkeyb+pkeyi+pkeyd为:sish* * *。由此通过取证得到攻击者手机号为131526* * 121(归属地为广西南宁市),回传邮箱地址为shi* * 449@yeah.net,密码为sish* * *。我们登录此邮箱进行验证,发现收件箱有受害者发送的邮件,验证了此邮箱的确为嫌疑人回传邮箱。
仔细分析源代码,发现程序通过getTelNum()函数来获取手机号码,以及手机的型号、版本等信息,通过getSmsInPhone()获取手机里的短信,通过getPeopleNameFromPerson()获取个人通讯录等,然后将获取到的短信等信息发送到指定邮箱,并将短信、通讯录回传至木马携带的手机号。也可以从DuanXinReceiver()这个类入手,它实现接收信息并广播发送给接收者,最终将获取到的信息通过smsAndMail()函数、SendDXMail()等函数发送至指定邮箱。SendDXMail()调用了getMail()和getPass()函数,如图4所示,右击查看函数引用,同样能获取到回传邮件地址和密码。
图四 函数代码截图
经代码分析,得知该APK文件主要功能为获取用户的通讯录、短信,将数据回传至木马携带的邮箱地址,实时拦截短信,并将短信回传至木马携带的手机号。此次取证分析及时有效,有力地为案件侦查提供了线索,从而使案件得以快速侦破。
4.2动态仿真模拟
1.安卓模拟器模拟
下载安卓模拟器-逍遥模拟器,将APK文件在逍遥模拟器中进行安装。安装完毕,可以看到此APK图标为word格式图标,大小1.84MB,同时查看其权限,如图5所示:这些权限跟AndroidManifest.xml里的权限是一致的。
2.采用Fiddler抓包测试
通过运行Fiddler软件,对该APK进行抓包测试。首先打开Fiddler软件,对逍遥模拟器进行设置代理,对安装好APK软件的逍遥模拟器进行激发,触发此木马APK的行为,从而进行抓包获取其网络行为。通过此办法测试出涉案APK多次对邮箱进行登录,并发送通讯录、短信等信息。