许多人习惯于让Outlook记住密码收邮件时便不必每次都输入邮箱密码一切让Outlook代劳但时间一长马虎的人会把自己的邮箱密码忘记这样就无法重新设置或者登录Web界面收取邮件了Outlook绝对不会告诉你邮箱的密码是多少即使你找到了注册表中Outlook存储帐户和密码信息的键值由于密码信息都是加密存储的你还是无法提取密码我们的对策就是针对邮箱服务中安全机制最薄弱的环节采取行动……
众所周知POP协议本质上是一种明文协议也就是说虽然Outlook本地存储的密码是加密的但当它连接到POP服务器准备收取邮件时必须以明文的形式提供密码因此只要我们开发一个POP服务器(不必是功能完善的POP服务器只要骗过Outlook即可)让Outlook从该服务器收取邮件Outlook就会乖乖地交出加密得严严实实的密码实际上这种办法不仅适用于Outlook而且适用于所有使用POP的邮件客户程序如Outlook ExpressFoxmail等
一构造POP服务器
下面我们要用VSNET 和C#开发一个伪POP服务器——之所以说它伪那是因为它只有极其有限的功能只进行到骗出邮箱密码就停止
启动VSNET 新建一个C#项目项目的模板选择控制台应用程序将项目命名为PServer点击确定创建项目如图所示
图 新建C#项目
VSNET自动创建PServer名称空间 Class类和Main函数骨架在Classcs文件的顶端using System语句之后加入下列三个语句
using SystemNet;
using SystemNetSockets;
using SystemText;
接下来的任务就是修改Main函数使它作为一个POP服务器监听来自Outlook的请求当Outlook尝试连接这个PServer服务器时根据POP协议的要求我们确认一下Outlook用户提供的帐户名并要求提供密码Outlook提供密码后我们在控制台上输出密码这样就算完成了任务!
在Main函数中我们的第一个任务是启动一个POP服务器为此我们要用SystemNetSockets名称空间定义的类创建一个ipEndPoint让一个TCP服务器监听该端点接收来自客户端的请求
// 在(本地机器)上创建一个TCP服务器监听
// 端口的请求(是POP服务器的默认端口)
IPEndPoint ipEndPoint = new IPEndPoint(IPAddressParse());
TcpListener tcpServer = new TcpListener(ipEndPoint);
tcpServerStart();
// 等待来自POP客户程序(如Outlook)的连接请求
TcpClient tcpClient = tcpServerAcceptTcpClient();
当一个POP客户程序连接该服务器时服务器必须按照POP协议的要求对客户程序作出应答根据POP协议RFC 规范的定义服务器首先要做的是返回一个欢迎信息
// 向客户程序返回欢迎信息
NetworkStream ns = tcpClientGetStream();
byte[] outbytes = EncodingASCIIGetBytes(+OK Welcome + EnvironmentNewLine);
nsWrite(outbytesoutbytesLength);
客户程序接收到欢迎信息后同样也会按照POP协议的要求发送帐户名称我们把这个帐户名称记录下来以便以后使用代码如下
// 接收和记录邮箱帐户名称
byte[] userBytes = new byte[];
nsRead(userBytesuserBytesLength);
收到帐户名称信息后我们要告诉Outlook说这个名称没有问题客户程序一收到这个信息就会发送密码然后我们再把密码也记录下来实现代码是
// 告诉客户程序帐户名称正确
outbytes = EncodingASCIIGetBytes(+OK + EnvironmentNewLine);
nsWrite(outbytesoutbytesLength);
// 接收和记录帐户密码
byte[] pwdBytes = new byte[];
nsRead(pwdBytespwdBytesLength);
接下来要做的就是获取字节数组的内容将它们转换成字符串然后输出到控制台
// 在控制台上显示出帐户名称密码
ConsoleWriteLine(帐户名称 + EncodingASCIIGetString(userBytes));
ConsoleWriteLine(帐户密码 + EncodingASCIIGetString(pwdBytes));
既然已经获得了密码服务器的任务已经完成了现在可以关闭它强行关闭服务器会导致客户程序显示错误信息不过这里我们并不在乎关闭服务器的代码是
// 关闭服务器
nsClose();
tcpClientClose();
tcpServerStop();
将上面的所有代码依次输入Main函数编译一下就得到了一个PServerexe执行文件它就是我们的伪POP服务器PServerexe体积很小发行版只有 KB