利用Mono?For?Android开发的恶意软件

近期AVL移动安全团队首次发现一款使用Mono for Android开发的恶意APP,该应用除了使用C#语言开发,还加入了Lua环境,可以执行恶意Lua脚本。

Mono for Android简介

Mono for Android由Novell推出,是业界首个使用Microsoft Visual Studio 为Android平台开发Microsoft.Net应用程序的解决方案,该程序利用C#语法能进行开发基于Android和iOS的应用。

Mono for Android由Mono内核运行时间、原始 Android应用程序接口绑定,用于开发Android应用程序的Visual Studio插件和一个包含有构建、调试和部署应用程序所需的各种工具的软件开发工具包组成。

Mono框架作为Visual Studio的一个插件,基于一种用来执行针对该框架所编写的软件的虚拟机。这种虚拟机环境称为CLR(Common Language Runtime,公共语言运行时),主要负责安全、内存管理、程序运行以及异常处理。

在.NET Framework中编写的应用程序的源代码(比如Visual Basic或者C#)最初被编译为一种名为MSIL的中间语言。该初始编译由特定于语言的命令行编译器(Visual Studio或者其他生成工具)来执行。而当执行应用程序时通常会执行二次编译。二次编译将会获取中间语言并将其编译为可在操作系统中运行的可执行代码。二次编译被称为JIT(just-in-time,即时)编译,在其发布的时候会包含一个mono runtime。

Mono for android是一个运行时和开发堆栈,使.net开发人员可以充分利用他们现有的Visual Studio和C#知识为基于Android的设备开发应用程序。

运行时:

Mono for Android运行时是一个在Android堆栈的Linux内核上运行的应用程序。它负责解释Mono字节代码,并与Dlavik 运行时进行通信,以便调用本机Android API。

开发堆栈:

Mono for Android也是一个开发堆栈,它提供了创建和打包Android设备应用程序所需的工具。

Lua on Android

在Android手机上编写并运行Lua脚本的前提条件:

1 加载Lua脚本解析引擎。

2 以Native API方式调用引擎接口。

直接以JNI方式调用Lua解析引擎的接口十分麻烦,开源项目AndroLua、LuaJava对这些JNI接口进行了很好的封装。
AndroLua是一个包含了LuaJava的Android平台的Lua解析器,它提供一系列映射到Lua C实现函数的Java接口。详情可以参考:《执行Lua脚本的Android恶意程序

Mono for Android恶意软件分析

一、恶意apk文件分析

主要程序结构如下图所示:

以上四个类所对应的核心代码主要函数在native方法中:

AM简介
该程序主要定义以下功能:短信接收、监听开机状态。声明读写短信、接收短信等。

Mono插件会将编写主要代码编译成dll文件并封装到so文件里,之后通过ida进行动态dump,除了程序封装前的五个文件,依次是” Xamarin_Mobile.dll “、”Z_VFS_Android.dll “、“KopiLua_Android.dll”、” NLua_Android.dll”、” z-core.dll “,前两个文件为Mono运行库而后两个为Lua脚本依赖库,其中” z-core “文件则是核心程序代码。下面将对z-core.dll文件进行详细分析。

二、Dll文件分析

z-core.dll文件结构树如下图所示:

详细分析:

类OnBootHandler->OnReceive

概述:联网下载恶意lua脚本文件,并执行lua脚本文件,期间会和服务器通讯上传用户手机号、IMEI等设备信息,根据服务器指令发送短信、拦截短信、上传银行短信的讯息,上传收件箱、用户位置信息。

该程序会执行以下行为:

1 在SD卡创建zcore.txt文件,并写入”Set start date time“和当前时间信息,同时也记录在sharedPreferences中的”me“文件中。

2 动态注册短信接收器SMSReciver。

3 注册ScriptLoader用来载入LuaScript脚本。

4 执行Register函数时AES加密上传手机IMEI、根据返回的数据写到bootScript.lua文件中。

5 和远程服务器通信进行下载/上传Lua文件数据操作。

通过以上网址与服务器通讯并向”bootScript.lua“文件写入数据:

类SMSReciever->-> OnReceiver

根据指令该恶意软件有拦截短信、发送短信、上传银行短信的行为。

以下为“sms.lua”脚本文件的onSMS函数,程序首先会通过NetClient.Run方法上传接收到的短信,并且还会将指定的号码内容做上传操作,其中包含”900″、”Alfa-Bank”、 “TCS Bank”、”MTS-Bank”、”7494″、”000100″,这里多为俄罗斯银行,可能会给用户造成一定的财产损失。

类MainActivity->OnCreate
启动RunService服务后,隐藏图标,隔1秒钟后退出程序。

三、lua脚本分析

该恶意软件在data/data对应目录下有生成一些lua脚本文件:

lua脚本在本恶意软件中是寄宿在c#代码中被调用的,这里程序提供了个KopiLua的虚拟机,而lua文件都是运行在此之上。bootScript.lua文件中引导信息如下:

以上函数就是通过lua引擎(LoadScript函数)载入相关的lua文件,这里会依次调用taskprocessor.lua、sms.lua、echo.lua、teleinfo.lua、geo.lua、contacts.lua、scripteval.lua中的函数。

下面对lua文件进行依次分析:

1、taskprocessor.lua

下图代码是做了一个网络操作,并将数据写入log日志文件中。

2、sms.lua

执行onTask方法时,程序通过读取数据进行回调c#中的SendSMS函数进行发送短信操作,然后通过网络把发短信的信号发送给服务器,并把指定的号码添加到BlockedList中。

3、echo.lua

此文件定义一个辱骂性的消息。

4、teleinfo.lua

获取手机的设备信息,其中包含android版本、IMEI、手机号、运营商、国家等等。

5、geo.lua

上传用户的位置信息。

6、contacts.lua

此文件的功能主要是获取用户联系人信息并上传。

调用GetContacts函数上传用户联系人信息。

7、scripteval.lua

上传用户的UUID信息。

实际上除了以上列出的lua的对象外,程序还会根据远程通信下达指令下载额外的一个lua对象文件” chunk.lua“,但目前该url已失活。

另外,程序还会获取用户收件箱信息。

安全分析总结

该程序运行后会隐藏图标,后台和指定服务器进行通讯,下载恶意lua脚本文件并使用C#进行回调操作,期间会执行如下恶意行为:上传用户手机号、IMEI等设备信息,根据服务器指令发送短信、拦截短信、上传银行短信的讯息,上传收件箱、用户位置信息,给用户造成较为严重的隐私泄露和财产损失。

根据网址、银行信息等推测该程序出自俄国黑客之手,而该程序由于并不是把敏感的行为直接写到C#代码中,而是把重要数据运用lua脚本进行函数回调操作,从而实现用户隐私上传,因此当不联网的时候该程序则不会存在威胁

时间: 2024-10-27 16:57:12

利用Mono?For?Android开发的恶意软件的相关文章

MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一时候让Model仅仅关系数据的处理.基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包括4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:须要View实现的接口,V

Xamarin Mono for VS开发窗体标题(Title)乱码解决方案

利用mono for VS开发一个手机程序,结果只有窗体的标题 title部分是乱码,其他所有地方中文都显示正常,很郁闷.百度很久无果.最后发现只要在 VS菜单中 的 文件->高级保存选型中奖编码设置为 Unicode或者UTF8就行了.更改所有有乱码的文件,无论是axml还是.cs 文件.

50个Android开发技巧(20 使用MVP模式)

??在提供了2个链接,其中一个是原文的链接?? http://yeungeek.com/2014/06/17/mvp-android/ http://blog.csdn.net/vector_yi/article/details/24719873 一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Mode

第四章 Android开发三大基石—Activity、Service和Handler(1)

第四章 Android开发三大基石-Activity.Service和Handler 学习Android开发,首先就不得不学习Activity和Service这两个组件.Activity是有界面的程序,几乎承载着用户对应用程序的所有操作.而Service是没有界面的程序,它是所谓的服务,也叫后台程序.掌握好它们,是我们学习Android开发必不可少的环节.Handler是Android开发中最常用的消息机制,几乎所有应用程序都会使用Handler传递消息.可以说,想要学习Android应用开发,

Mono For Android 安装FAX

搭建Mono for Android开发环境 转:http://www.cnblogs.com/wangyucai0915/p/3616253.html 简介 使用Mono for Android的原因 工作原因:需要手机设备访问服务器. 能力原因:C#程序猿,仅了解Java,没有实战经验. 据说能与我所熟悉的Visual Studio IDE无缝集成(后期部署完成,但无法进行编译,后改为使用Xamarin Studio IDE.) . 作者机器环境 Microsoft Windows 7 x8

C#开发Android手机应用全接触(mono for android)

    .NET 也能开发Android手机应用了 (交流学习QQ:1337192913)     分享的这套课程是随风老师的关于C#开发Android手机应用全接触. Mono for Android就是原先的MonoDroid,由于商标问题(名称中含有Droid),现在改名为Mono for Android. Mono for Android提供了一个基于Android的Mono虚拟机,让开发者可以用C#开发Android应用程序.另外,Dalvik API已经被绑定至C#,你可以用C#方便

Android开发之图片处理专题(一):利用软引用构建图片高速缓存

在Android开发中,图片处理是一个难点.对于大量的图片处理,一不小心就会出现OOM的错误.那么,构建缓存,就是非常必要的一个手段.利用软引用构建缓存,只是其中步骤之一,我们来看看一般情况下,图篇处理的流程. 一般而言,图片的处理流程大致如上,之前所说的Xutils的原理,也如此.今天,我们就先讲讲如何利用软引用技术来构建高速缓存. 一.对象的四种引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态

Android开发实践:利用ProGuard进行代码混淆

由于Android的代码大都是Java代码,所以挺容易被反编译的,好在Android ADT为我们集成了混淆代码的工具,一来可以混淆我们的代码,让程序被反编译后基本看不懂,另外还能起到代码优化的作用.发布项目前,建议打开Android的代码混淆功能. Android ADT主要通过ProGuard工具来提供代码混淆,网上也有挺多博客文章讲这个的,但感觉很多都介绍得太过于复杂,这里我就以问答的方式来更加简洁地介绍下ProGuard吧. 1. ProGuard是什么 ProGuard是一个工具,用来

Android开发之图片处理专题(三):利用ThreadPoolExcutor线程池实现多图片的异步加载

在上一篇专题Android开发之图片处理专题(二):利用AsyncTask和回调接口实现图片的异步加载和压缩中我们实现了listView的图片的大量加载.今天,我们换一种方式,采用线程池的方式来实现. 我们需要准备两个东西: 1.图片下载任务类 2.线程池. 1.图片下载任务类. 图片下载任务类,将需要显示的iamgeView,线程通讯消息管理者handler进行了封装.当图片下载无论成功还是失败,handler发送对应的消息,传入的iamgeView显示对应的图片.这里就不在应用软引用技术,采