手机“秘密” 发短信清除

模仿功能:短信清除程序

模仿对象:手机看门狗

模仿进度:第二期

开发平台:Windows Mobile平台

手机丢了,里面的照片怎么办?文件怎么办?删除!如果不法分子利用电话簿进行诈骗,祸害无穷,电话簿也要删除。

短信清除程序设计思路

上期我们通过SIM卡与手机的绑定,实现了SIM卡偷换通知功能。我们知道手机被人拾到了,可手机里面的隐私却不想被人知道,该怎么办?短信清除程序就可以派上用场,利用它就可以远程命令手机清空电话簿、删除照片、文件等。这个程序适合所有的手机用户,特别是商业用户和爱自拍的用户。

要设计短信清除程序,先要监视手机接收的短消息,对收到的短信息进行判断,判断是否为预先约定的指令短信,如果是清空联系人的指令短信,就执行清空电话簿内联系人的操作;如果是清空“我的文档”的指令短信,就执行清空“我的文档”的操作。操作完成后,回复一条已经成功执行的短信给下达指令的手机。依此思路,我们还可以添加更多的短信指令,比如删除照片,卸载程序,甚至格式化机器的指令等等。

clip_image002[4]

如何识别指令短信

要一条短信就能控制手机,有一个难点,那就是短信这么多如何知道哪条是指令短信?这就需要手机能自动识别指令短信。要自动识别指令短信,必须要进行短信拦截,进行逐一识别。

我们可以使用.Net CF中提供的MessageInterceptor来进行短信拦截。从.Net CF 2.0开始,就提供了Microsoft.WindowsMobile.PocketOutlook.MessageInterception命名空间,通过使用该命名空间,可以截获短信和邮件的到达消息。

该命名空间中我们要用到3个类:1.MessageInterceptor:短信息拦截器类,一旦添加监控事件后,就会对所有短消息进行监控。2.MessageCondition:监控的过滤筛选条件类,通过设置需要过滤某个字段。3.MessageInterceptorEventHandler:监控事件,一旦截获某消息,就立即执行该方法。

我们需要创建一个短信息拦截器,同时要创建一个过滤条件,该过滤条件规定以什么样的方式对接收到的短信进行选择性匹配,将该过滤条件赋值给短信息拦截器之后,再为该拦截器添加监控事。这样,短信拦截器便可以按拦截到我们所需要拦截的短信了。

学会配置短信息拦截器,对开发短信类软件或者系统软件是有很大帮助的,例如开发短信防火墙、远程遥控程序等。此外,还可以利用短信指令进行一些恶作剧程序的开发。

短信清除程序开发步骤

第一步:创建项目

启动Visual Studio 2008,选择“文件→新建项目”。在弹出的“新建项目”的“项目类型”中选择“Visual C#→智能设备”,“模板”选“智能设备项目”,“名称”设为“Watchdog2”。在弹出的“添加新智能设备项目”对话框中,“目标平台”选择“Windows Mobile 6 Professional SDK”,“.Net Compact Framework 版本”选择“.Net Compact Framework Version 3.5”,“模板”选“设备应用程序”完成项目创建。

第二步:添加引用

要使用MessageInterceptor,需要先添加程序集Microsoft.WindowsMobile.dll和Microsoft.WindowsMobile.PocketOutlook.dll的引用,然后引用Microsoft.WindowsMobile.PocketOutlook和Microsoft.WindowsMobile.PocketOutlook.MessageInterception命名空间。

在“解决方案资源管理器”内,点击 “Watchdog2→添加引用→.Net”,选中“Microsoft.WindowsMobile”和“Microsoft.WindowsMobile.PocketOutlook”,点击“确定”即可。打开Form1.cs,添加如下代码:

using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;

第三步:监视短信

创建短信拦截器,并添加拦截条件,添加短信监控事件,便可拦截到所需短信了。在这里可以添加多种条件的短信拦截器。在Form1.cs中添加代码,关键码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

MessageCondition messageCondition = new MessageCondition();//创建一个拦截条件对象
messageCondition.Property = MessageProperty.Body;//针对消息体匹配
messageCondition.ComparisonType = MessagePropertyComparisonType.Equal;//匹配类型为全部相等
messageCondition.ComparisonValue = "{Watchdog:ClearContacts}";//匹配的内容(清空联系人)
messageCondition.CaseSensitive = true;//匹配时区分大小写

MessageInterceptor messageInterceptor = new MessageInterceptor(//创建一个短消息拦截器对象
    InterceptionAction.NotifyAndDelete,//拦截动作:通知并删除
    true);

第四步:执行指令操作

拦截到了指令短信,便会触发对应的MessageReceived事件,我们在该事件中执行对应的指令操作。在拦截事件处理方法messageInterceptor_MessageReceived内,添加如下代码,关键码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

using (OutlookSession outlookSession = new OutlookSession())//创建OutlookSession 实例
{
    outlookSession.Contacts.Items.Clear();//清空电话簿
}
SmsMessage sms = new SmsMessage(e.Message.From.Address, "Executed");//已执行回执
sms.Send();//发送回执

第五步:测试程序

如果你有一台Windows Mobile系统的真机,可以轻松通过实际发短信的方式测试程序,不过测试前,请先备份好自己的电话簿^_^。如果没有真机怎么办?这里我们介绍使用模拟器进行测试的方法。

我们需要使用两个模拟器:设备模拟器与蜂窝模拟器。前者在pc上模拟一台WM手机终端设备;后者则模拟一个蜂窝网络设备,用于与设备模拟器进行通信。

首先启动Windows Mobile 6 SDK自带的Cellular Emulator(即蜂窝模拟器),点击“开始→Windows Mobile 6 SDK→Tools→Cellular Emulator”启动蜂窝模拟器。然后在Visual Studio2008中点击菜单“调试→启动调试”(或者直接按F5),在弹出的部署对话框中选择“CHS Windows Mobile 6 Professional Emulator”,点击“部署”,则会自动启动设备模拟器并将程序部署到设备模拟器上,部署完成之后会自动启动程序。

若设备模拟器内显示已经连通网络的图标(一般为满格信号),则表示手机模拟器已经与蜂窝模拟器连通了,这时,便可以通过蜂窝模拟器往设备模拟器发送短信了(图2)。

clip_image004

读者反馈

开发QQ:很好奇,手机号码是怎么跟SIM卡绑定的?

小编:我们通常所用的手机,一个SIM卡对应一个手机号码。在移动运营商的系统内部,保存有SIM卡卡号与手机号码的一个对应关系。当手机开机后接入网络时,有一个注册登记的过程。在该过程中,手机会提供SIM卡卡号给运营商网络,运营商系统根据该SIM卡卡号便可得知该SIM卡的手机号码是多少。

开发QQ:我想问下为什麽我装了Windows Mobile profession SDK不能打开项目,是不是还有其他SDK还没有装?

小编:要打开 Windows Mobile程序项目,需要先安装Microsoft Visual Studio 与windows mobile profession SDK。Visual Studio 是微软公司推出的集成开发环境,是目前最流行的 Windows 平台应用程序开发环境。

开发QQ:我开发的程序在试用时,一安装就出现“user 23错误”,为什么会这样?

小编: 在诺基亚的SDK5中,常会出现错误: “程序已关闭!WidgetRegistry USER 23”。这个是由于其不能很好的处理非英文字符所引起的。一般把Widget的info.plist文件里面的字符全部改为英文即可解决。

开发QQ:我想做个DLL拦截短信,应该怎么做?

小编:SDK中提供一个Mapirule的例子,展示了如何拦截短信。在目录“…\Windows Mobile 6 SDK\Samples\Common\CPP\Win32\MapiRule”中,读者可自行查看。需要注意的是,在编译好mapirule.dll后,要对注册表进行一点改动。

1.增加一项HKEY_CLASSES_ROOT\CLSID\{3AB4C10E-673C-494c-98A2-CC2E91A48115\InProcServer32,默认值为mapirule.dll,字符型。

2.增加一项HKEY_LOCAL_MACHINE\Software\Microsoft\Inbox\Svc\SMS\Rules,新键名为{3AB4C10E-673C-494c-98A2-CC2E91A48115},值为1,DWORD型。注册表改完,mapirule.dll拷到windows目录下。重启一下手机,拦截开始起作用。

读者问题:文中提到,程序随系统开机运行,应该如何实现?如果我需要开发一个无界面后台运行的程序(如手机看门狗的验证程序),应该怎么做?

高手 竹园春:程序需要随系统启动,可以将exe文件保存至目录“windows\sartup”下,或者创建exe文件的快捷方式到该目录下。如果程序不需要显示界面,可以创建一个“控制台应用程序”;如果是“设备应用程序”,则可在窗体的Form_Actived事件下添加this.Hide()的代码。

读者问题:手机上有数据库吗?如果有,常用的有哪些呢?使用.NET CF应该怎么开发WM上的数据库应用?

(载《电脑报》2009年28期)

posted @ 2009-12-28 16:20  huxi  阅读(2412)  评论(0编辑  收藏  举报