手机“秘密” 发短信清除

技术与开发

模仿功能:短信清除程序

模仿对象:手机看门狗

模仿进度:第二期

开发平台:Windows Mobile平台

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

短信清除程序设计思路

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

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

28-f10-1-1.jpg

如何识别指令短信

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

我们可以使用.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上模拟一台手机终端设备,后者则模拟一台蜂窝网络设备,用于与设备模拟器进行通信。

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

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

28-f10-1-2.jpg

读者反馈

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

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

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

小编:要打开 Windows Mobile程序项目,需要先安装Visual Studio 与Windows Mobile Professional SDK。Visual Studio 是微软公司推出的集成开发环境。

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

小编: 在诺基亚的SDK中,常会出现错误: “程序已关闭!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()的代码。

读者问题:手机上有数据库吗?如果有,常用的有哪些?

你是手机编程的高手吗?你能解答上面这位读者的疑问吗?不要犹豫,来我们这里展示一下你的风采吧,来信请发到pcw-chendx@vip.sina.com(也可以给我们发送问题)。

第七个QQ群: 72407081,验证码:手机开发。欢迎对手机编程感兴趣的朋友加入。