Android手机APK程序逆向分析取证
戴芬, 刘洪伟, 樊婕, 李璐
聊城市公安局,山东 聊城 252000

第一作者简介:戴芬,女,山东成武人,硕士,工程师,研究方向为电子物证。E-mail: fenzi1998@163.com

摘要

目前,新型电信诈骗案件中,使用手机恶意程序进行诈骗、网络赌博等违法犯罪的案件逐渐增多。本文将研究Android应用程序包(APK)取证方法,为网络诈骗案件侦查提供线索。本文对手机APK的结构、APK的提取方式、逆向工具分析、APK获取的权限进行了总结,并通过实际案例,从静态分析和动态分析两方面研究了手机APK的取证方法。静态分析是对证据进行固定,使用逆向分析工具对APK文件进行反编译,分析源码函数功能,找到回传邮箱,动态分析是通过安卓模拟器模拟手机APK和用Fiddler进行抓包测试,最终分析出APK的网络行为,并对涉案内容进行了证据固定。

关键词: 电子取证; 安卓系统; 手机APK; 逆向分析
中图分类号:DF793.2 文献标志码:A 文章编号:1008-3650(2021)04-0349-05
Reverse Analysis to Undertake Forensics into Mobile Phone-operated APK Program
DAI Fen, LIU Hongwei, FAN Jie, LI Lu
Liaocheng Public Security Bureau, Liaocheng 252000, Shandong, China
Abstract

Presently, illicit and maleficent cases are gradually increasing among the new telecom fraud crimes by way of mobile phone-implanted malicious programs to defraud and/or gamble online. Android application package (APK) was here parsed into electronic forensics so as to provide reference and impartation for investigation of relevant network fraud cases. The mobile phone-operated APK was therewith dissected into its structure, extraction method, reverse-analysis tool and access authorization. Through one actual case, the electronic forensics were probed into the mobile phone-running APK from both static and dynamic analysis. Static analysis was used to fix such the evidence that reverse-analysis tools can be deployed to decompile the APK file, analyze the source function plus its effect, and find the returned mailbox. The dynamic analysis was adopted to simulate the mobile phone-operated APK through an Android simulator, test the packet capture with Fiddler, unveil the network behavior of APK, and eventually fix the case-involved contents as evidence.

Key words: electronic forensics; Android system; mobile phone-operating APK; reverse analysis

随着智能手机和互联网技术的发展, 各种终端应用软件应运而生。Android平台[1]因其开放性和高效性的特点, 深受用户青睐, 成为各种恶意应用和手机病毒主要攻击对象, 各种安卓安装包(APK)给用户带来便利的同时, 也给移动网络安全带来很大隐患, 为犯罪分子提供了可乘之机。Android手机在使用一段时间后, 会莫名多出一些APK件, 运行速度也越来越慢, 有些恶意手机木马会将用户手机上的通讯录等信息进行上传, 泄露用户隐私, 有些扣费木马会通过发送短信进行自动扣费, 有些木马会拦截用户短信从而窃取银行卡密码等。

2019年全年, 360安全大脑累计截获Android平台新增恶意软件样本180.9万个, 平均每天新增手机恶意程序样本0.5万个, 从用户手机感染恶意软件情况来看, 累计检测到Android用户感染恶意软件9.6亿[2], 主要为资费消耗、隐私窃取等。

本文研究了APK结构、提取方式、逆向分析工具等, 并通过实际案例, 按照电子数据取证流程[3]从静态分析和动态分析[4]两方面研究了手机APK的取证方法。

1 APK介绍以及文件结构
1.1 APK介绍

APK[5]即Android安装包(Android application package, APK), 它是Android操作系统使用的一种应用格式文件。一个Android应用程序的代码如果要在Android设备上运行, 必须要先进行编译, 然后打包成一个可以被Android系统识别的格式文件才可以被正常运行, 这种被Android系统识别并能运行的文件格式便是“ APK” 。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。

1.2 APK的文件结构

Android应用的APK安装文件是一个包含所有代码和资源文件的压缩包, APK文件其实是zip格式, 但后缀名被修改为APK, 解开这个APK包我们可以看到如表1所示的文件结构[6]

表1 APK文件结构 Table 1 APK file’ s structural components
2 APK逆向分析

Android APK的逆向分析是指将APK程序用反编译工具进行反汇编, 通过分析反汇编的代码来理解应用程序的功能, 该技术是目前对恶意代码类案件进行检验的重要手段[7]

2.1 APK的提取方式

Android手机APK提取方式有三种。第一种方式是网络提取, 根据URL链接地址, 比如从百度网盘下载提取, 从短信中链接下载提取等。第二种方式是从手机内提取, 从手机存储内找到安装文件进行提取; 或者利用ADB命令从手机内提取; 如果该程序已被删除, 可以用专用数据恢复软件对镜像进行恢复提取; 如果从网盘中获悉下载过某可疑APK, 链接失效无法下载, 可以将手机全盘镜像, 进行搜索, 如果用户安装过此APP没有卸载, 这个APP就存在镜像中。第三种方式是借助第三方工具, 如360手机助手等软件工具提取。当电脑端360手机助手和手机进行连接后, 从手机中找到目标文件, 然后导出成APK格式的文件。

2.2 逆向分析工具

APK反编译有四种方法, 一是在JAVA环境下可以用Apktool、dex2jar、jd-gui等工具将APK文件进行反编译[8]。其中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工程, 搜索功能也非常方便, 而且支持多平台操作。虽然大于50 M的文件出现卡顿现象, 但可以满足大部分取证工作中反编译的需求。

三是使用Android killer工具, 它是一款免费可视化安卓反编译软件箱, 其实是对第一种方法提到的操作进行一系列的封装, 功能强大, 使用起来简单方便, 能快速分析出一个复杂的APP执行的流程, 也可以进行搜索, 但只能在windows平台下使用。Android killer也是电子取证工作中的一种常用工具。

四是使用IDA pro工具, 它是一款世界顶级的交互式反汇编工具, 是一款收费软件, 不存在任何注册机、注册码和破解码, 具有更好的反汇编、深层分析的能力。

2.3 获取的权限

对安卓应用程序来说, AndroidManifest.xml是最重要的信息源, 同时也是侦查破案工作中分析的重点, Manifest中包含有该APK能够获取的权限等信息, 一个恶意木马APK往往会拥有许多权限[9]。如果拥有短信权限(编辑短信、发送短信、读写短信、拦截短信)、手机权限(获取手机号码、搜集用户IMEI号、系统版本号、拨打电话、拦截电话)、通讯录权限(读取通讯录、删除通讯录)、相机权限、位置权限(获取位置、发送位置)、访问网络等过于隐私的权限, 应该对此APK文件进行重点分析。

2.4 逆向工具分析APK文件(以Jadx-gui工具为例)

首先在win7操作系统电脑上配置安装好JDK8环境, 启动Jadx-gui工具。加载APK应用程序, 如图1所示, 加载后可以看到源代码、资源文件、证书三大类。双击证书可以查看证书内容, 证书中包含我们需要关注的公钥信息、签名信息等。双击资源文件里的AndroidManifest.xml可以对AndroidManifest.xml进行查看分析, 看到AndroidManifest.xml的获取权限如图1所示。

图1 查看AndroidManifest.xmlFig.1 Screenshot with viewing AndroidManifest.xml

在Jadx-gui工具下, 利用Jadx-gui的搜索功能, 能更快捷地找到线索。如通过搜索关键词“ @” , 查找APK的回传邮箱, 搜索关键词“ http” , 查找APK中链接或者回传网络地址, 搜索“ sms” “ cnontact” 等关键词, 可以在代码中查找有关的短信、联系人的代码函数, 如图2所示。

图2 搜索关键词Fig.2 Screenshot from searching keywords

然后再具体分析源代码, 找到功能函数, 进一步分析出APK文件的功能, 找到回传地址和手机号。

3 实战分析取证

案例情况:我市开发区某企业老板收到带有链接的短信, 点击进行查看, 几天后在手机上收到熟人号码发送的借钱的短信, 汇出资金30余万元, 后发现被骗。取证人员在其手机中提取到疑似APK文件进行分析, 查找出涉案邮箱密码。对邮箱进行取证, 提取了大量的通讯录信息及短信内容。

3.1 静态分析

使用Apktool工具对APK文件进行反编译, 在生成的文件中, 对AndroidManifest.xml进行查看分析, 然后使用jd-gui工具打开classes-dex2jar.Jar查看具体代码。

AndroidManifest.xml的权限主要有:Android.permission.RECEIVE_SMS:允许程序接收短信; Android.permission.SEND_SMS:允许程序发送短信; Android.permission.RECEIVE_BOOT_COMPLETED:允许程序开机自动运行; Android.permission.READ_CONTACTS:允许程序访问联系人通讯录信息; Android.permission.WRITE_CONTACTS:允许程序写入通讯录信息; Android.permission.READ_PHONE_STATE:允许程序访问电话状态; Android.permission.RECEIVE_USER_PRESENT:接收用户当前状态; Android.permission.BROADCAST_SMS:广播短信; Android.permission.READ_SMS:允许程序读取短信; Android.permission.WRITE_SMS:允许程序写短信; Android.permission.CALL_PHONE:允许程序打电话; Android.permission.ACCESS_NETWORK_STATE:允许程序访问网络状态。

可以看出AndroidManifest.xml主要有接收、读取、写入、转发等功能。通过阅读分析主要函数的代码, 找到了getMail()、getNber()、getPass()这三个函数以及回传邮箱函数代码如图3所示。

图3 获取回传邮箱代码截图Fig.3 Screenshot from getting the code of returned email

通过分析:邮箱函数返回值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所示, 右击查看函数引用, 同样能获取到回传邮件地址和密码。

图4 函数代码截图Fig.4 Screenshot of function code

经代码分析, 得知该APK文件主要功能为获取用户的通讯录、短信, 将数据回传至木马携带的邮箱地址, 实时拦截短信, 并将短信回传至木马携带的手机号。此次取证分析及时有效, 有力地为案件侦查提供了线索, 从而使案件得以快速侦破。

3.2 动态仿真模拟

3.2.1 安卓模拟器模拟

下载安卓模拟器-逍遥模拟器, 将APK文件在逍遥模拟器中进行安装。安装完毕, 可以看到此APK图标为word格式图标, 大小1.84 MB, 同时查看其权限, 如图5所示:这些权限跟AndroidManifest.xml里的权限是一致的。

图5 动态模拟截图Fig.5 Screenshot from dynamic simulation

3.2.2 采用Fiddler抓包测试

通过运行Fiddler软件, 对该APK进行抓包测试。首先打开Fiddler软件, 对逍遥模拟器进行设置代理, 对安装好APK软件的逍遥模拟器进行激发, 触发此木马APK的行为, 从而进行抓包获取其网络行为。通过此办法测试出涉案APK多次对邮箱进行登录, 并发送通讯录、短信等信息。

4 结语

本文通过研究Android木马APK的分析过程, 从获取涉案APK到完整分析出结果, 采用静态分析为主, 动态模拟为辅的取证方式结合进行, 分析出涉案邮箱, 并对邮箱内容进行了证据固定。但在具体工作实践中, 采用加壳的Android APK木马程序也越来越多, 难以进行精准还原, 所以要增强取证人员收集、固定、提取、分析电子物证的水平和能力, 有效利用多种网络技术、多种方法, 对案件线索进行及时分析固定, 从而为案件的侦破提供方向和技术支撑。

参考文献
[1] KATYSOVAS T. A first look at Google Android [R/OL]. (2008-01-19)[2020-04-16]. https://everythingcomputerscience.com/books/android.pdf. [本文引用:1]
[2] 360烽火实验室, 360安全大脑. 2019 Android恶意软件年度专题报告[R/OL]. (2020-02-27)[2020-04-16]. http: //zt. 360. cn/1101061855. php?dtid=1101062360&did=211012248.
(360 Fiberhome Laboratory, 360 Safe Brain. 2019 Android mal-ware annual report [R/OL]. (2020-02-27)[2020-04-16]. http://zt.360.cn/1101061855.php?dtid=1101062360&did=211012248 [本文引用:1]
[3] 刘浩阳, 李锦, 刘晓宇, . 电子数据取证[M]. 北京: 清华大学出版社, 2015: 533-544.
(LIU Haoyang, LI Jin, LIU Xiaoyu, et al. Digital forensics [M]. Beijing: Tsinghua University Press, 2015: 533-544. ) [本文引用:1]
[4] 姜军, 刘大勇, 尹良凯. 浅析安卓手机木马取证技术[J]. 刑事技术, 2017, 42(5): 408-413.
(JIANG Jun, LIU Dayong, YIN Liangkai. Analysis on forensic extraction of Trojan from Android mobile phone[J]. Forensic Science and Technology, 2017, 42(5): 408-413. ) [本文引用:1]
[5] 郑兴生. Android应用程序反编辑工具研究与设计[D]. 北京: 北京理工大学, 2016.
(ZHENG Xingsheng. The research and design of an Android applications decompiler [D]. Beijing: Beijing Institute of Technology, 2016. ) [本文引用:1]
[6] 杨传磊. Android 木马关键技术与检测方法研究[D]. 北京: 中国人民公安大学, 2019.
(YANG Chuanlei. Research on key technology and detection method of Android Trojan [D]. Beijing: People’s Public Security University of China, 2019. ) [本文引用:1]
[7] 秦玉海, 杨嵩, 候世恒. Android 平台木马的检验鉴定[J]. 中国司法鉴定, 2017, 92(3): 52-55.
(QIN Yuhai, YANG Song, HOU Shiheng. Examinaiton of Troijan on Android platform[J]. Chinese Journal of Forensic Sciences, 2017, 92(3): 52-55. ) [本文引用:1]
[8] 刘云, 朱桂英. Android系统安全和反编译实战[M]. 北京: 清华大学出版社, 2015.
(LIU Yun, ZHU Guiying. Android security and decompilation practice [M]. Beijing: Tsinghua University Press, 2015. ) [本文引用:1]
[9] 刘昊辰, 罗森林. Android系统木马隐藏及检测技术[J]. 信息网络安全, 2013 (1): 33-37.
(LIU Haochen, LUO Senlin. Trojan horse’s hiding and detecting technique of Android OS[J]. [本文引用:1]