找回丢失的Outlook邮件账户密码

互联网 | 编辑: 2005-11-23 00:00:00转载

许多人习惯于让Outlook记住密码,收邮件时便不必每次都输入邮箱密码。但时间一长,马虎的人会把自己的邮箱密码忘记,这样就无法重新设置或者登录Web界面收取邮件了。Outlook的密码信息是加密存储的,你无法提取密码。我们的对策就是针对邮箱服务中安全机制最薄弱的环节采取行

许多人习惯于让Outlook记住密码,收邮件时便不必每次都输入邮箱密码。但时间一长,马虎的人会把自己的邮箱密码忘记,这样就无法重新设置或者登录Web界面收取邮件了。Outlook的密码信息是加密存储的,你无法提取密码。我们的对策就是针对邮箱服务中安全机制最薄弱的环节采取行动……源程序以及电子版全文可以在http://www.cfan.com.cn/11program/200502/qkducd.html找到。

众所周知,POP3协议本质上是一种明文协议,也就是说,虽然Outlook本地存储的密码是加密的,但当它连接到POP3服务器准备收取邮件时,必须以明文的形式提供密码。因此,只要我们开发一个POP3服务器(不必是功能完善的POP3服务器,只要骗过Outlook即可),让Outlook从该服务器收取邮件,Outlook就会乖乖地交出加密得严严实实的密码。

1.构造POP3服务器

下面我们要用VS.NET 2003和C#开发一个“伪”POP3服务器——之所以说它“伪”,那是因为它只有极其有限的功能,只进行到骗出邮箱密码就停止。

启动VS.NET 2003,新建一个名为PServer的C#控制台应用程序,然后在Class1.cs文件的顶端using System语句之后加入下列三个语句:

using System.Net;
using System.Net.Sockets;
using System.Text;

在Main函数中,我们的第一个任务是创建一个ipEndPoint,让一个TCP服务器监听该端点,接收来自客户端的请求:

// 在127.0.0.1(本地机器)上创建一个TCP服务器,监听
// 110端口的请求(110是POP3服务器的默认端口)
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),110);
TcpListener tcpServer = new TcpListener(ipEndPoint);
tcpServer.Start();

// 等待来自POP3客户程序(如Outlook)的连接请求

TcpClient tcpClient = tcpServer.AcceptTcpClient();

当一个POP3客户程序连接该服务器时,服务器必须按照POP3协议的要求对客户程序作出应答。根据POP3协议RFC 1939规范的定义,服务器首先要做的是返回一个欢迎信息:

// 向客户程序返回欢迎信息
NetworkStream ns = tcpClient.GetStream();
byte[] outbytes = Encoding.ASCII.GetBytes("+OK Welcome" + Environment.NewLine);
ns.Write(outbytes,0,outbytes.Length);

客户程序接收到欢迎信息后,同样也会按照POP3协议的要求发送账户名称。我们把这个账户名称记录下来以便以后使用,代码如下:

// 接收和记录邮箱账户名称
byte[] userBytes = new byte[255];
ns.Read(userBytes,0,userBytes.Length);

{ad}收到账户名称信息后,我们要告诉Outlook说这个名称没有问题,客户程序一收到这个信息就会发送密码,然后我们再把密码也记录下来:

// 告诉客户程序账户名称正确
outbytes = Encoding.ASCII.GetBytes("+OK" + Environment.NewLine);
ns.Write(outbytes,0,outbytes.Length);

// 接收和记录账户密码
byte[] pwdBytes = new byte[255];
ns.Read(pwdBytes,0,pwdBytes.Length);

接下来要做的就是获取字节数组的内容,将它们转换成字符串,然后输出到控制台:

// 在控制台上显示出账户名称、密码
Console.WriteLine("账户名称:" + Encoding.ASCII.GetString(userBytes));
Console.WriteLine("账户密码:" + Encoding.ASCII.GetString(pwdBytes));

既然已经获得了密码,服务器的任务已经完成了,现在可以关闭它。强行关闭服务器会导致客户程序显示错误信息,不过这里我们并不在乎。关闭服务器的代码是:

// 关闭服务器
ns.Close();
tcpClient.Close();
tcpServer.Stop();

将上面的所有代码依次输入Main函数,编译一下就得到了一个PServer.exe执行文件,它就是我们的伪POP3服务器。

2.获得密码

首先启动PServer.exe,让我们的伪POP3服务器开始监听来自客户程序的请求。

启动Outlook,点击菜单“工具→电子邮件账户”,选择“查看或更改现有电子邮件账户”,找到要恢复密码的电子邮件账户,点击“更改”打开它的属性对话框,把POP3服务器设置为localhost。在Outlook中接收一下邮件,Outlook将报告说服务器中断了连接,不必理睬。

现在PServer.exe已经得到账户的密码了,密码原来是abcdefg。

3.利用嗅探工具

基于POP3密码在网络上以明文形式传递这一事实,我们还可以利用嗅探工具Ethereal分析TCP/IP通信过程获得账户密码。具体操作步骤请看网上的电子版。
遇到密码丢失的情况,动动脑筋另辟蹊径,其实你自己就能够把握一切。

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑