转载

揭开山寨应用的伪装面具

智能手机的全面普及,已经让我们生活的方方面面都变得越来越便捷化。然而我们在享受“便捷”的同时也遭受着安全问题的困扰。

为了增加手机的安全防护能力,各种各样的安全类应用应运而生。在安全软件的“强撸”之下,一些恶意软件瞬时“灰飞烟灭”,而有些恶意软件则在夹缝中寻得一丝存活机会。据了解,某些恶意软件开发者为了逃避杀毒软件的查杀,竟然戴上“正版应用”的伪装面具作恶。即通过在应用程序特定路径下添加恶意代码包,进而使各种二次打包的“山寨应用”成为各类移动恶意软件的主要载体。

近期,安天AVL移动安全团队发现了一种恶意扣费木马程序,该木马程序被重打包到Android程序兼容包下,进而进行一系列的恶意扣费操作。据悉,目前已有美颜相机、Google Search、天翼导航等众多知名APP受到波及。

一.恶意程序流程分析

1. 包结构分析

以篡改了正版美颜相机的山寨程序为例:

该山寨程序安装后的图标如下图所示,与正版的美颜相机图标一样。

揭开山寨应用的伪装面具

运行时界面如下图所示,该山寨程序包含正常美颜相机相关的功能,表面上看与正版应用没有区别。

揭开山寨应用的伪装面具

分析样本的静态结构,该山寨应用与正版应用的区别如下:

1. 捆绑恶意包结构到android.support.v4包结构下。 2. 将正版程序的入口程序篡改到捆绑包结构。

揭开山寨应用的伪装面具

揭开山寨应用的伪装面具

2. 流程分析图

恶意程序运行的整体流程图如下图所示:

揭开山寨应用的伪装面具

3. 恶意功能

资费损耗

程序运行后会在后台无用户提示的情况下发送注册短信 在后台无用户提示的情况下发送订阅短信 对回执短信进行拦截并自动回复

隐私泄露

上传用户手机IMEI、IMSI固件信息 上传用户手机号码 上传用户安装的app列表 上传用户发送订购短信的日志信息

二.恶意代码分析

1. 恶意程序的静态包结构

程序运行会加载资源文件“animation.xml”,解密生成子模块程序文件sz.jar。下图为程序的主包程序、资源文件及解密释放的子包程序的包结构。

主部包结构及资源文件:

揭开山寨应用的伪装面具

子模块sz.jar包结构:

揭开山寨应用的伪装面具

2. 联网下载核心数据文件

如上述流程图所述,程序加载子模块sz.jar通过startSdk启动新线程来联网下载核心数据文件1400054117000.mp3,下载该文件的域名是通过AES解密如下图所示的INSIDE加密字符串来获取的。

揭开山寨应用的伪装面具

解密后的域名集以及网络路径信息如下图所示: (“subindex”字段为网络路径信息,”domain”字段为域名集信息)

揭开山寨应用的伪装面具

程序会随机选取上述域名集当中的一个域名,获取用户手机相关信息(包括IMEI,IMSI,手机号,信息中心号码,手机品牌,sdk版本,wifi的mac地址,网络接入信息等)后以POST方式向远程服务器联网请求下载核心文件1400054117000.mp3。

揭开山寨应用的伪装面具

对网络行为的抓包数据进行分析,如下图所示:

揭开山寨应用的伪装面具

如上图所示,服务器返回的数据经过加密处理。文件下载完成后伪装成音频格式文件(后缀为ogg),并将其保存在/data/data/ com.meitu.meiyancamera/rs目录下,并命名为dida.ogg。通过AES解密dida.ogg文件,可以获取子程序运行时的核心数据,例如:注册短信的号码和短信内容、获取订阅短信的url、短信拦截的关键字串、上传用户隐私的url等。

揭开山寨应用的伪装面具

程序解密的秘钥是一个byte数组:

KEYS = new byte[]{50, 96, -46, -34, 58, -61, -56, 78, -120, 42, -125, -95, 82, -63, 115,1};

解密得到的结果信息:

揭开山寨应用的伪装面具

核心数据字段说明:

揭开山寨应用的伪装面具

3. 子程序恶意行为分析

该子程序本质上就是一个远程控制功能模块,具备以下功能:

发送注册短信、订购短信; 拦截短信并自动回复; 上传任务日志、固件信息、程序安装列表、发送成功短信的数量统计信息等用户隐私。

实现以上恶意功能所需要的相关数据都是通过远程控制服务器下载的核心文件解密后获取的。

3.1 后台发送注册、订购短信

注册短信:

子包程序sz.jar通过回调方法startSdk来启动线程TraditionBizshield后台无提示发送注册短信,短信内容由“Port”和“cmd”两部分组成

“Port”:13640905056 “cmd”:#fd#35513605566

揭开山寨应用的伪装面具

订购短信:

子包程序sz.jar通过回调方法startSdk,开启线程GameThread订购网游业务。发送短信之前会联网获取发送号码及短信内容,联网的url由”ngurl“(解密”dida.ogg”文件获取)和”jknafjkla/dajfkjldas.mp3”拼接而成。

揭开山寨应用的伪装面具

从上述url联网返回的JSON数据当中获取目标号码(port字段的值)和短信内容(cmd字段的值)后,发送登陆(注册)短信和订阅短信。

揭开山寨应用的伪装面具

揭开山寨应用的伪装面具

3.2 拦截短信并自动回复

子程序在运行时还会注册监听短信收件箱相关广播,监听接收到的短信、彩信,通过判断拦截短信并进行相应的自动回复。

揭开山寨应用的伪装面具

拦截号码为1065802710005发送的短信:

揭开山寨应用的伪装面具

拦截特定字符串的短信并自动回复:

(1)通过回调方法”smsCheck”,检测收件号码及短信内容。

揭开山寨应用的伪装面具

(2)拦截SP以106开头,内容包含“点播、阅读、支付、感谢、中国移动、尊敬”的短信,并自动回复,短信自动回复的内容从联网下载的核心文件的autosms字段当中获取。

揭开山寨应用的伪装面具

揭开山寨应用的伪装面具

后台自动回复功能代码:

揭开山寨应用的伪装面具

3.3 上传用户隐私信息

子程序在发送短信的同时还会获取用户隐私信息,并将隐私信息保存本地文件后上传到远程服务器。

获取IMEI、本机号码,发送成功的短信数量:

揭开山寨应用的伪装面具

获取应用列表信息:

揭开山寨应用的伪装面具

上传记录用户隐私信息的文件:

揭开山寨应用的伪装面具

三.背景信息

对该样本当中包含的恶意主控手机号码,以及特定SP号码进行了简单的背景信息调查,我们发现:

1. 手机号码“13640905056”的归属地信息为广东深圳中国移动,猜测可能为恶意作者的手机,用来通过接收短信来收集中毒用户手机号码信息。

揭开山寨应用的伪装面具

2. 网上有网友爆料接收到相关号码 (1065802710005)发送的短信,但目前无法获取该号码的归属信息。

揭开山寨应用的伪装面具

揭开山寨应用的伪装面具

四.总结

Android兼容库的主要作用是使新版本的Android框架中的最新特性能够兼容之前的Android框架,为不断升级的Android系统提供向下兼容性。

部分杀毒软件为了提高检测效率,会忽略对程序当中使用到的公共库文件的检测。本文提到的此类恶意代码的主要特点就是将自身隐藏在兼容包下,逃避杀毒软件的检测。目前AVL Pro已经可以全面查杀该病毒,有效保护您的手机安全。

*作者:AVLTeam(企业账号),本文首发于 AVLTeam Blog ,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM) 

正文到此结束
Loading...