首先介绍一下目前比较流行的智能手机操作系统:Windows Mobile。也是我们主要研究的攻击平台。Windows Mobile是微软用于Pocket PC和Smartphone的软件平台,有“移动版Windows”之称。目前最新的版本是Windows Mobile 6.5。我们对Windows Mobile最感兴趣的地方是网络方面:3G或3.5G高速网络,软件方面:支持丰富的第三方软件。网络是我们获取手机设备中所有资料的传播途径,支持第三方软件将为我们的攻击代码敞开了大门。攻击主要有两个方向,一个是对可用性的攻击,一个是对资源的窃取。本文将主要给大家讲解一些手机病毒的基础知识,并会实现一个可用性攻击的实例,在以后的教程中将逐步讲解其他攻击手段。
二、开发环境搭建
我们所使用的开发语言是C++语言。开发环境有两套解决方案:
(一)开发工具:Embedded Visual C++ V4.0
SDK:Windows Mobile 6 SDK Professional(或其他版本的SDK)
同步工具:Microsoft ActiveSync 4.5(实现PC和智能设备通信,可以传送文件同步数据等)
模拟器:用来再PC上模拟手机系统。一般安装SDK后会有、也可以另外安装。
基站模拟器:Cellular Emulator。安装SDK后会有。
这种方案是早期比较主流的开发环境构架模式。优点是,再安装过程中可以更深刻的了解各个工具的作用和开发环境的体系结构。但是安装和配置起来比较麻烦,容易出错,不推荐初学者使用。
(二)集成开发环境:Microsoft Visual Studio .net 2008(VS2005也可以)。安装这个以后系统会自动配置好开发环境,无需调试。然后你可以根据自己的需要再安装所需要的SDK,如无特殊需要默认即可。
如果您对逆向工程感兴趣,您还可以安装程序分析工具:
WinHex:分析二进制文件很方便。
PE Explorer:查看PE文件内部信息十分方便。
IDA:破解程序必备工具。
VS2008的缺点是安装文件比较大(接近4G)、安装缓慢、占用资源较多,不过对于初学者来说为了减少不必要的麻烦,还是值得的。下图是VS2008的开发界面及模拟器界面。
笔者建议初学者使用第二套方案,安装过程很简单,到微软官方站下载VS2008,一路“NEXT”安装即可。当使用熟练后可以尝试搭建自己个性的开发环境。是不是被上面的开发环境吓到了,要么是配置困难,要么是体积巨大,难道就没有配置简单体积又小的么?答案是“有!”不过要使用ARM汇编语言编程,并且微软并没有公开WINDOWS下ARM汇编编程指令语法。也就是说既不知道语法格式,又没有任何开发文档。不过还是有办法的,早有高手通过逆向工程等反汇编手段对编译好的C++进行分析,再结合对ARM编译器的分析,摸索和创造出了一些方法和技巧。至于汇编环境的大小,呵呵,可能会让您大跌眼镜。编译器212k、链接器612k,再加上在SDK中精简提取出的头文件和库文件,一共10M以内。确实很雷人。这大概就是高手与初学者的区别吧。
闲话少叙,马上开始我们第一个 Windows Mobile病毒的开发吧。
NO.1无限弹窗
首先来实现一个简单的病毒练练手。这个很简单,就是弹出一个无法关闭的对话窗口。使用的函数是MessageBox,这个函数在winuser.h中有定义。传递参数可参考MSDN。下面开始正式开发吧。
首先是新建一个项目,和VC6不一样的是VS2008里把工程叫做项目了。如下图创建一个名为“bingdu”的智能设备项目。
然后进入项目向导,如下图设置创建一个Windows Mobile 6的控制台程序。
点击完成后就可以编写代码了。这里的代码很简单,在入口函数中调用一下MessageBox函数即可,函数的第2和第4个产生分别是窗口的内容和标题。
代码:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
MessageBox(NULL, TEXT("Hacked By GuiGu."),TEXT("FUCK!!!"), MB_OK);
return 0;
}
编写号后按F5调试运行,VS2008会将编译好的程序自动部署在模拟器上,并开始运行,运行起来的效果如下:
这个程序很简单,知识弹出了一个窗口,点击“ok”即可关闭,并不能给用户带来什么破坏。下面稍加改动即可实现一个恶意流氓程序了。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
while (1)
{
MessageBox(NULL, TEXT("Hacked By GuiGu."),TEXT("FUCK!!!"), MB_OK);
}
return 0;
}
使用while循环让窗口不断循环,如滔滔江水,绵绵不绝。呵呵。运行看看,是不是对话框已经关不掉了呢。如果重启手机这个对话框不就没了么?如何让程序自动运行呢?在Windows Mobile 6 SDK的实例中有这样一段叙述:
// The executable must be named autorun.exe and placed in a processor
// specific directory (2577) on the MMC card.
// When the card is inserted, the application will be launched with
// "install" as its command line. When the card is removed, the application
// will be launched with "uninstall" as its command line.
意思就是说如果将程序命名为autorun.exe,并将程序拷贝到手机存储卡根目录下名为2577的文件夹里,当手机加载智能卡的时候就会自动运行程序。这样就可以实现一个简单的开机运行的流氓软件了。