Android木马病毒com.schemedroid的分析报告

Posted Fly20141201

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android木马病毒com.schemedroid的分析报告相关的知识,希望对你有一定的参考价值。

某安全公司移动病毒分析报告的面试题目,该病毒样本的代码量比较大,最大的分析障碍是该病毒样本的类名称和类方法名称以及类成员变量的名称被混淆为无法辨认的特殊字符,每个被分析的类中所有的字符串都被加密处理了并且每个类的加密算法还不是一样的,人肉还原出被加密的字符串是很不现实的,该样本大约有100多个类,需要处理的加密字符串的解密高达几千个之多,有兴趣和能拿到样本的同学可以挑战一下自己,暂不提供样本。经过对该木马病毒进行深入和全面的分析,发现该木马病毒还是很厉害的,远控的功能比较多,盗取用户手机上的用户信息,通信app的数据信息也比较多,有些远程的功能对于用户的手机来说是致命的伤害。

                                                       本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/81380553


Android木马病毒com.schemedroid的混淆对抗手段:

1.将代码中的类名称、类方法名称、类属性名称混淆为人工难以辨认的特殊字符串。

2.代码中的字符串全部被加密处理,每个类中解密字符串的函数都不一样,需要解密的字符串的量大。

字符串解密函数的代码示例:


                                                                Android木马病毒com.schemedroid的分析报告

样本基本信息:

apk包名:com.schemedroid

文件Md5: CFBCEE2B12DD93A6109AC06C10C34C86

 

1.读取当前android应用的assets目录下的droid.png文件的文件数据,解密之后释放到当前Android应用的文件路径/data/data/com.schemedroid/files/droid.png下,然后将文件/data/data/com.schemedroid/files/droid.png进行重命名为/data/data/com.schemedroid/files/annotation.jar文件。

2.通过DexClassLoader动态加载/data/data/com.schemedroid/files/annotation.jar文件,分别加载类com.GoogleService.MainService和com.GoogleService.Common.Config并通过类反射调用分别构造它们的实例对象,调用通过类反射调用类com.GoogleService.MainService的实例方法create进行对用户的手机进行远程控制的操作(具体的远程控制行为后面再详细的分析);通过类反射调用类com.GoogleService.Common.Config的实例方法getIMEI获取到手机的IMEI值,通过类反射调用类com.GoogleService.Common.Config的实例方法getSrvAddr获取远程服务器的主机名称SrvAddr,通过类反射调用类com.GoogleService.Common.Config的实例方法getSrvPort,获取到与远程服务器通信的端口号SrvPort,然后删除文件/data/data/com.schemedroid/files/droid.png和/data/data/com.schemedroid/files/annotation.jar。

3.调用libwatch.so库文件中的native方法init函数,对用户的手机安装远程监控,具体的通过文件/data/data/com.schemedroid的存在性,来判断是否需要在用户的手机上启动远程监控服务,如果文件/data/data/com.schemedroid存在,则执行
am startservice -n com.schemedroid/com.GoogleService.MainService命令,启动java层的服务类com.GoogleService.MainService进行监控,否则的话向SrvAddr指定的主机名,SrvPort指定的端口,发送带用户手机的IMEI值和"MM_UNINSTALLED"命令的tcp数据包给远程服务器,获取是否对手机设备进行监控的标记,1-不监控(uninstall_watch),0-监控。

对SrvAddr服务器返回的数据包的类型进行判断,数据包类型为2时为uninstall_watch,不监控,仅仅作为发送给服务器的ack握手包。

4.对开机启动的广播事件android.intent.action.BOOT_COMPLETED进行注册和监听处理,当接收到该广播事件并且文件/data/data/com.schemedroid/files/android.sys不存在时,则重复执行上述的行为;由于当前apk应用在进行远程监控销毁自身应用的命令处理中,销毁自身apk应用时,会创建/data/data/com.schemedroid/files/android.sys文件,因此在触发行为时,需要判断该文件。

5.对广播事件android.intent.action.START_GOOGLE_SERVICE进行相应注册和监听,启动服务com.schemedroid.SchemeService同样执行上述的行为。

6.当前apk应用的很多行为都是在动态加载的/data/data/com.schemedroid/files/annotation.jar文件里实现的,下面就对/data/data/com.schemedroid/files/annotation.jar文件的行为进行分析。

1.当用户点击运行当前apk以后,会对当前Android应用的图标进行隐藏,使用用户难以发现它的存在。

2.将当前Android应用的assets目录下的id.txt文件中的数据"2015-12-10 10:58:27"写入到文件/data/data/com.schemedroid/files/id.txt中,apk在进行数据上传的时候会用到该数据;读取文件/data/data/com.schemedroid/files/setting.prop或者当前Android应用的assets目录下的setting.prop文件的数据进行解密操作,得到对用户的手机进行监控设置的原始初始化数据,其中222.87.0.101就是连接到远程服务器的IP地址SrvAddr,5000是端口号SrvPort,key=3ADA7521DBE2DBB311B44901A5C6EAD4就是对远程发送到用户手机上的TEA加密的短信控制指令进行解密的密钥,远控配置文件setting.prop用于保存用户手机被远程监控操作的一些记录。

zr_user=, server=222.87.0.101, timer_trigger_1=-1, wifi_upldOnlyConned=0, record_autoUpld=0, gprs_autoTurnOn=0, screenshot=0, imsi=, zr_type=3, number=, msg_observe=1, rooted=0, judge_root=1, keylog=0, boot_cls=, screenshot_interval=10, key=3ADA7521DBE2DBB311B44901A5C6EAD4, timer_action_1=###GetCmd, keylog_app=, screenshot_app=, screenshot_max=100, wifi_cfg=0, takePicture_autoUpld=0, movieRecord_autoUpld=0, wifi_autoTurnOn=0, call_observe=1, version=2030005, gps_autoTurnOn=0, rcd_dura=3, port=5000, wifi_upldOnConned=1, imei=359250052949300, timer_interval_1=60, user=, boot_pkg=

3.当前apk数据目录下的配置文件Parameter.xml只要也是用于记录远程服务器对用户的手机进行控制操作的一些记录,方便远程服务器对用户的手机进行控制,主要记录参数有:

isNativeRooted

用户的手机是否已经root

slower_phone

是否执行slow.sh脚本消耗手机的内存资源

isRemoteRooted

是否对用户的手机进行远程控制的root操作

destroy_apps

是否销毁用户手机系统/system/app目录下的apk

app_package

保存用户手机里安装的app的包名

daemon

是否运行守护进程创建文件/system/bin/debuggerd

sdcard_tag

用户手机系统是否有sdcard等存储器

initCfg

是否读取setting.prop文件中的数据进行原始数据初始化

udp

是否向网址www.baidu.com端口53或者8000发送udp数据包

consume_mobile_traffic

是否消耗用户手机的电量和数据流量

isSettingSend

是否将setting.prop文件的数据发送给远程服务器

run

是否将所有.ini文件中的信息数据压缩保存为文件data%d.41并将压缩文件的数据保存到数据库config.db的表t_fileTask

4.当前Android应用在进行上传用户手机里的信息文件数据到远程服务器的方式是,先将需要发送的信息文件压缩为/data/data/com.schemedroid/files/tmp/data%d.41文件并将该压缩文件的文件路径等相关信息保存到数据库文件/data/data/com.schemedroid/databases/config.db的表t_fileTask中,上传文件数据的信息时,主动连接到远程服务器,读取config.db数据库中文件存放路径srcpath指定文件的数据上传给服务器,远程服务器下载释放文件到用户手机的里也是存放到srcpath指定的文件路径。

5.当前Android应用自带了root工具,先通过判断文件system/bin/su4100和system/bin/clock_service是否存在,来判断用户的手机是否root。将assets目录下的splash文件释放到文件路径/data/data/com.schemedroid/app_bin/su下,assets目录下的help4.png文件释放到文件路径/data/data/com.schemedroid/app_bin/help4.png下,assets目录下的busybox_g1文件释放到文件路径/data/data/com.schemedroid/app_bin/busybox_g1下以及创建和释放脚本文件/data/data/com.schemedroid/app_bin/toor.sh并将assets目录下的 logo.png文件先解密然后释放该文件到文件路径/data/data/com.schemedroid/app_bin/logo.png下,执行如下命令对用户的手机进行root操作,root操作完成之后删除文件/data/data/com.schemedroid/app_bin/logo.png、 
/data/data/com.schemedroid/app_bin/toor.sh以及/data/data/com.schemedroid/app_bin/su。

6.通过检测文件/system/xbin/su4100的存在以及执行命令su4100 -c ls /data能否获取用户手机的data目录下的文件信息来判断用户的手机是否已经root;如果用户的手机没有root,则对用户的手机进行root操作。将assets目录下的splash文件释放到文件路径/data/data/com.schemedroid/app_bin/su下,assets目录下的help4.png文件释放到文件路径/data/data/com.schemedroid/app_bin/help4.png下,将assets目录下的busybox_g1文件释放到文件路径/data/data/com.schemedroid/app_bin/busybox_g1下,创建和释放脚本文件/data/data/com.schemedroid/app_bin/toor.sh,动态加载/data/data/com.schemedroid/app_rmr目录下的.jar包文件,通过类反射调用获取类com.r.m的实例方法s,传入参数.jar文件的名称、/data/data/com.schemedroid/app_bin/toor.sh等调用该类方法s对用户的手机进行root操作(.jar包文件应该是远程服务器下载到app_rmr目录下的),root操作完成以后删除文件toor.sh,su,help4.png。

 

7.root权限下,修改用户手机的系统内存属性为可读可写,通过dd命令将com.schemedroid.apk文件和libwatch.so拷贝释放到文件路径/system目录下并赋予他们677权限,然后发送广播android.intent.action.START_GOOGLE_SERVICE和启动服务com.GoogleService.MainService。

8.创建tcp连接的服务端,绑定本地ip地址127.0.0.1端口号为10101,等待远程客户端的连接,接受远程客户端的命令控制。

控制命令

执行的操作

4100_IMEI

将用户手机的IMEI("4100_IMEI:+用户手机IMEI")信息,发送给远程的tcp客户端

4100_TERMINAL_NUM

获取到TerminalNum即number,并将该number加密保存到配置文件

/data/data/com.schemedroid/files/setting.prop中

4100_KEY

获取到key值并将该key加密保存到配置文件

/data/data/com.schemedroid/files/setting.prop中

4100_LOCAL_NUM

向number指定的手机号发送短信,短信内容为jnfja+当前用户手机的IMEI值

4100_SRV_ADDR

获取到网络连接的目标ip地址SrvAddr即server并将server值加密保存到配置文件/data/data/com.schemedroid/files/setting.prop中,然后主动连接到server地址

端口号为5000的远程服务器,让用户的手机接受远程控制。

4100_SRV_PORT

获取到网络连接的端口号SrvPort即port,并加密保存port到配置文件/data/data/com.schemedroid/files/setting.prop中

4100_REQUEST_CONTACT

将用户手机里联系人的信息,发送给远程的tcp客户端

4100_REQUEST_SMS

将用户手机里短信的信息,发送给远程的tcp客户端

4100_REQUEST_CALL

将用户手机里通话记录的信息,发送给远程的tcp客户端

4100_REQUEST_STATION

将用户基于手机定位的经纬度、基站区号、网络标识等信息,发送给远程的tcp客户端

4100_REQUEST_GPS

将用户手机基于Gps定位的经纬度信息,发送给远程的tcp客户端

9.窃取用户手机里以下Android应用的文件数据信息和Android应用的版本号,上传到SrvAddr和SrvPort指定的远程服务器端,现将收集到的下列App的数据文件信息进行压缩处理得到data%d.41(其中%d为0~30的某个值)文件,将该压缩文件的路径等信息先保存到数据库config.db的表t_fileTask中,然后发送给远程的服务器。

App应用的包名

窃取的数据信息

是否上传App的版本号versionName

com.instanza.cocovoice

/data/data/com.instanza.cocovoice/databases

com.loudtalks

/data/data/com.loudtalks/shared_prefs

Sd卡下的文件zello/history

com.viber.voip

/data/data/com.viber.voip/databases

/data/data/com.viber.voip/files

com.android.browsercom.google.android.browser

/data/data/

com.android.browsercom.google.android.browser

/databases

com.android.browser

/data/data/com.android.browser/databases

com.android.email

/data/data/com.android.email/databases

com.google.android.email

/data/data/com.google.android.email/databases

com.htc.android.mail

/data/data/com.htc.android.mail/databases

com.tencent.mm

/data/data/com.tencent.mm/MicroMsg

/data/data/com.tencent.mm/shared_prefs

com.sina.weibo

/data/data/com.sina.weibo/cache

/data/data/com.sina.weibo/databases

/data/data/com.sina.weibo/files

/data/data/com.sina.weibo/shared_prefs

com.tencent.mobileqq

/data/data/com.tencent.mobileqq/databases

/data/data/com.tencent.mobileqq/shared_prefs

com.tencent.android.pad

/data/data/com.tencent.android.pad/databases

/data/data/com.tencent.mobileqq/shared_prefs

com.skype.rover

/data/data/com.skype.rover/files

com.skype.raider

/data/data/com.skype.raider/files

com.tencent.WBlog

/data/data/com.tencent.WBlog/cache

/data/data/com.tencent.WBlog/databases

/data/data/com.tencent.WBlog/files

com.whatsapp

/data/data/com.whatsapp/databases

/data/data/com.whatsapp/shared_prefs

com.rebelvox.voxer

/data/data/com.rebelvox.voxer/databases

com.oovoo

/data/data/com.oovoo/databases

com.gtomato.talkbox

/data/data/com.gtomato.talkbox/databases

/data/data/com.gtomato.talkbox/files

com.bbm

/data/data/com.bbm/files

/data/data/com.bbm/shared_prefs

10.读取当前Android应用资源文件目录assets下的about.png文件的数据,释放该文件到文件路径/data/data/com.schemedroid/filess下,判断/system/bin/debuggerd文件是否已经存在,如果存在则执行/system/bin/debuggerd -c -s SrvAddr -p SrvPort(SrvAddr为连接远程服务器的IP地址,SrvPort为连接远程IP地址的端口),否则读取资源目录assets下的help.png、help2.png、help3.png、help4.png文件,解密后分别释放到/data/data/com.schemedroid/files文件路径下,然后在root权限下,执行以下命令创建守护进程/system/bin/debuggerd。

11.将Android应用的assets目录下的iptables_armv5文件和busybox_g1文件拷贝到文件路径/data/data/com.schemedroid/app_bin下,创建和释放/data/data/com.schemedroid/app_bin/droidwall.sh脚本文件并在root权限下执行脚本droidwall.sh,使手机安全软件com.qihoo360.mobilesafe,com.qihoo.antivirus的防火墙功能失效并在执行完成后删除脚本文件droidwall.sh。

12.向IP地址为SrvAddr端口号为SrvPort的远程服务器发起网络连接,获取远程服务器发送来的数据包类型,数据包类型为5,将文件/data/data/com.schemedroid/files/setting.prop上传给远程的服务器,关闭与远程服务器的连接;数据包类型为0,接收远程服务器发送来的控制指令对用户的手机进行远程控制操作,每条控制指令是存放在###与###的字符串,并且控制指令执行的操作与上文分析的样本行为是对应的.

控制命令

消息类型

执行的操作

GetCmd

-1

连接远程服务器,获取控制用户手机的控制命令

SMSInfo

2

获取用户手机里短信的信息

ContactInfo

1

获取用户手机里联系人的信息

LogInfo

3

获取用户手机里通话记录的信息

BaseStation

0

获取用户手机的手机定位信息

GPS

8

获取用户手机的GPS定位信息

AppList

17

获取用户手机里安装的所有app的信息

GetQQ

24

获取用户手机里QQ的databases和shared_prefs文件信息

GetBrowser

25

获取用户手机里默认浏览器的databases文件信息

GetEmail

26

获取用户手机里指定email应用的databases文件信息

GetWeChat

27

获取用户手机里微信的MicroMsg和shared_prefs文件信息

GetWeibo

28

获取用户手机里新浪微博的cache、databases、files、shared_prefs文件信息

GetWifi

33

获取用户手机里wifi的名称、密码、连接状态等信息

GetSkype

34

获取用户手机里Skype应用的files文件的信息

LocalAddr

5

获取用户手机的imei值和imsi值

MakeACall:(

4

无操作

ClrRcdNum:(

15

删除数据库config.db里表number中储存类型为2的手机号

RcdNum:(

14

向数据库config.db里表number中插入类型为2的手机号

StartRecorder:(

21

对用户的手机进行录音并上传给远程服务器

KSerName:(

6

保存server的地址信息到远控配置文件setting.prop中

SendInfo

7

将保存用户手机里指定用户信息的所有.ini文件上传到远程服务器

SetBlack

9

向数据库config.db里表number中插入类型为1的黑名单手机号

ClearBlack

10

删除数据库config.db里表number中储存类型为1的黑名单手机号

KillSelf

11

在用户手机里,清除com.schemedroid.apk自身并结束自身进程

FILELIST

12

获取用户手机里所有scard等存储器的文件路径信息

RecordFileList

16

获取对用户手机进行通话录音和常规录音的保存文件的路径信息

SendFile

13

将用户手机里指定文件路径的文件数据上传到远程服务器

SendDir

48

将用户手机里指定文件夹下的所有文件信息存储到数据库config.db的表t_fileTask中

SendSms

23

让用户的手机向指定的手机号发送指定的短信

SendFakeSms

31

在用户的手机里伪造发送假短信

UpdateSetting

30

将远控配置文件setting2.prop的数据上传到服务器进行下载更新

TakePicture

35

对用户的手机进行屏幕截图操作

MovieRecord

36

对用户的手机进行视频录制操作

GetAppData

37

获取用户手机里指定app的指定目录的文件信息并上传到远程服务器

GetWhatsapp

38

获取用户手机里Whatsapp应用的databases、shared_prefs文件信息

DeleteFiles

39

对用手机里的指定图片、视频、音频或者app文件进行删除

DestroyApps

40

将用户手机里安装的app进行删除和破坏缓存dex文件

ConsumeEnergy

41

消耗和浪费用户手机的网络资源和电量

ConsumeMobileTraffic

42

发送无效的http请求,消耗用户手机的数据流量

SetFlyMode

43

控制用户手机的飞行模式的开启和关闭

SlowerPhone

44

执行脚本slow.sh消耗用户手机的内存资源

MatchFiles

45

获取用户手机里与指定文件匹配的所有文件

GetAVFileList

46

获取用户手机里指定格式图片、音频、视频文件的文件列表

MMSInfo

50

将保存用户MMS类型信息的.ini文件的数据上传到远程的服务器

STRATEGY

51

收集用户手机里通信app、联系人等信息并将保存信息文件路径存储到数据库config.db的表t_fileTask中

GetRoot

52

获取用户手机是否已经root的信息

13.对用户手机里的短信数据库"content://sms"的变化进行监控,判断用户手机接收到的短信是否是###开头的远程控制指令短信,由于该远程控制指令短信是经过TEA算法加密的,使用远控配置文件setting.prop中key对远程控制指令短信进行TEA算法的解密,得到最终有效的控制指令字符串,控制指令对应的具体操作和网络远程控制的控制指令操作一致。

控制命令

消息类型

执行的操作

GetCmd

-1

连接远程服务器,获取控制用户手机的控制命令

SMSInfo

2

获取用户手机里短信的信息

ContactInfo

1

获取用户手机里联系人的信息

LogInfo

3

获取用户手机里通话记录的信息

BaseStation

0

获取用户手机的手机定位信息

GPS

8

获取用户手机的GPS定位信息

AppList

17

获取用户手机里安装的所有app的信息

GetQQ

24

获取用户手机里QQ的databases和shared_prefs文件信息

GetBrowser

25

获取用户手机里默认浏览器的databases文件信息

GetEmail

26

获取用户手机里指定email应用的databases文件信息

GetWeChat

27

获取用户手机里微信的MicroMsg和shared_prefs文件信息

GetWeibo

28

获取用户手机里新浪微博的cache、databases、files、shared_prefs文件信息

GetWifi

33

获取用户手机里wifi的名称、密码、连接状态等信息

GetSkype

34

获取用户手机里Skype应用的files文件的信息

LocalAddr

5

获取用户手机的imei值和imsi值

MakeACall:(

4

无操作

ClrRcdNum:(

15

删除数据库config.db里表number中储存类型为2的手机号

RcdNum:(

14

向数据库config.db里表number中插入类型为2的手机号

StartRecorder:(

21

对用户的手机进行录音并上传给远程服务器

KSerName:(

6

保存server的地址信息到远控配置文件setting.prop中

SendInfo

7

将保存用户手机里指定用户信息的所有.ini文件上传到远程服务器

SetBlack

9

向数据库config.db里表number中插入类型为1的黑名单手机号

ClearBlack

10

删除数据库config.db里表number中储存类型为1的黑名单手机号

KillSelf

11

在用户手机里,清除com.schemedroid.apk自身并结束自身进程

FILELIST

12

获取用户手机里所有scard等存储器的文件路径信息

RecordFileList

16

获取对用户手机进行通话录音和常规录音的保存文件的路径信息

SendFile

13

将用户手机里指定文件路径的文件数据上传到远程服务器

SendDir

48

将用户手机里指定文件夹下的所有文件信息存储到数据库config.db的表t_fileTask中

SendSms

23

让用户的手机向指定的手机号发送指定的短信

SendFakeSms

31

在用户的手机里伪造发送假短信

UpdateSetting

30

将远控配置文件setting2.prop的数据上传到服务器进行下载更新

TakePicture

35

对用户的手机进行屏幕截图操作

MovieRecord

36

对用户的手机进行视频录制操作

GetAppData

37

获取用户手机里指定app的指定目录的文件信息并上传到远程服务器

GetWhatsapp

38

获取用户手机里Whatsapp应用的databases、shared_prefs文件信息

DeleteFiles

39

对用手机里的指定图片、视频、音频或者app文件进行删除

DestroyApps

40

将用户手机里安装的app进行删除和破坏缓存dex文件

ConsumeEnergy

41

消耗和浪费用户手机的网络资源和电量

ConsumeMobileTraffic

42

发送无效的http请求,消耗用户手机的数据流量

SetFlyMode

43

控制用户手机的飞行模式的开启和关闭

SlowerPhone

44

执行脚本slow.sh消耗用户手机的内存资源

MatchFiles

45

获取用户手机里与指定文件匹配的所有文件

GetAVFileList

46

获取用户手机里指定格式图片、音频、视频文件的文件列表

MMSInfo

50

将保存用户MMS类型信息的.ini文件的数据上传到远程的服务器

STRATEGY

51

收集用户手机里通信app、联系人等信息并将保存信息文件路径存储到数据库config.db的表t_fileTask中

GetRoot

52

获取用户手机是否已经root的信息

14.如果用户手机接收到短信的发送手机号是在config.db的数据库number表中的类型为1的黑名单中的手机号,则该条短信如下详细信息发送到远程的服务器端;如果不在,只将短信的发送时间、短信内容、短信长度和用户手机的手机定位经纬度等信息上到远程的服务器。

15.对用户的手机通话进行监控并监听和处理广播事件android.intent.action.NEW_OUTGOING_CALL,对用户的电话拨号进行拦截,获取到用户所拨打的手机号码,如果该手机号不在数据库config.db里的表number中type为2的非黑名单中,则对该手机号的通话进行监控录音。

16.对用户的手机进行录音监控,监听和注册广播事件googleservice.action.startRecord和googleservice.action.stopRecord,当前广播事件为前者时对用户的手机进行监控录音和保存,当广播事件为后者时,将录音文件上传到远程的服务器端。

17.对用户的手机屏幕进行截图监控,注册和监听广播事件googleservice.action.startTakePicture和googleservice.action.takingPictureOver,当收到的广播事件为前者时,开启定时器任务回调对用户的手机屏幕进行截图操作,当接收到的广播事件为后者时,将对用户手机进行截图监控得到文件,上传远程的服务器端。

18.对用户的手机进行视频监控,注册和监听广播事件googleservice.action.startMovieRecord和googleservice.action.movieRecordOver,当监听到的广播事件为前者时,开启定时器回调对用户的手机进行视频的录制操作,当监听到的广播事件为后者时,结束视频监控,将对用户手机视频监控得到的文件上到远程的服务器端。

19.强制开启用户手机的Gps定位功能,监听和注册广播事件googl

以上是关于Android木马病毒com.schemedroid的分析报告的主要内容,如果未能解决你的问题,请参考以下文章

exe木马病毒是啥?

木马病毒的英文说明

木马病毒cc.exe

,.exe这是病毒还是木马

java能不能写病毒或木马

目前危害比较大的木马病毒都有哪些?