成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

C#編程讓Outlook乖乖交出帳戶密碼

2010-08-28 10:46:32來源:西部e網(wǎng)作者:

    許多人習(xí)慣于讓Outlook記住密碼,收郵件時便不必每次都輸入郵箱密碼,一切讓Outlook代勞。但時間一長,馬虎的人會把自己的郵箱密碼忘記,這樣就無法重新設(shè)置或者登錄Web界面收取郵件了。Outlook絕對不會告訴你郵箱的密碼是多少,即使你找到了注冊表中Outlook存儲帳戶和密碼信息的鍵值,由于密碼信息都是加密存儲的,你還是無法提取密碼。我們的對策就是針對郵箱服務(wù)中安全機(jī)制最薄弱的環(huán)節(jié)采取行動……

    眾所周知,POP3協(xié)議本質(zhì)上是一種明文協(xié)議,也就是說,雖然Outlook本地存儲的密碼是加密的,但當(dāng)它連接到POP3服務(wù)器準(zhǔn)備收取郵件時,必須以明文的形式提供密碼。因此,只要我們開發(fā)一個POP3服務(wù)器(不必是功能完善的POP3服務(wù)器,只要騙過Outlook即可),讓Outlook從該服務(wù)器收取郵件,Outlook就會乖乖地交出加密得嚴(yán)嚴(yán)實實的密碼。實際上,這種辦法不僅適用于Outlook,而且適用于所有使用POP3的郵件客戶程序,如Outlook Express、Foxmail等。

一、構(gòu)造POP3服務(wù)器

    下面我們要用VS.NET 2003和C#開發(fā)一個“偽”POP3服務(wù)器——之所以說它“偽”,那是因為它只有極其有限的功能,只進(jìn)行到騙出郵箱密碼就停止。

    啟動VS.NET 2003,新建一個C#項目,項目的模板選擇“控制臺應(yīng)用程序”,將項目命名為PServer,點擊“確定”創(chuàng)建項目,如圖1所示:

\

圖1 新建C#項目

    VS.NET自動創(chuàng)建PServer名稱空間、 Class1類和Main函數(shù)骨架。在Class1.cs文件的頂端using System語句之后加入下列三個語句:

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

    接下來的任務(wù)就是修改Main函數(shù),使它作為一個POP3服務(wù)器監(jiān)聽來自O(shè)utlook的請求,當(dāng)Outlook嘗試連接這個PServer服務(wù)器時,根據(jù)POP3協(xié)議的要求,我們確認(rèn)一下Outlook用戶提供的帳戶名并要求提供密碼,Outlook提供密碼后,我們在控制臺上輸出密碼,這樣就算完成了任務(wù)!

    在Main函數(shù)中,我們的第一個任務(wù)是啟動一個POP3服務(wù)器。為此,我們要用System.Net.Sockets名稱空間定義的類創(chuàng)建一個ipEndPoint,讓一個TCP服務(wù)器監(jiān)聽該端點,接收來自客戶端的請求:

// 在127.0.0.1(本地機(jī)器)上創(chuàng)建一個TCP服務(wù)器,監(jiān)聽
// 110端口的請求(110是POP3服務(wù)器的默認(rèn)端口)
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),110);
TcpListener tcpServer = new TcpListener(ipEndPoint);
tcpServer.Start();
// 等待來自POP3客戶程序(如Outlook)的連接請求
TcpClient tcpClient = tcpServer.AcceptTcpClient();

    當(dāng)一個POP3客戶程序連接該服務(wù)器時,服務(wù)器必須按照POP3協(xié)議的要求對客戶程序作出應(yīng)答。根據(jù)POP3協(xié)議RFC 1939規(guī)范的定義,服務(wù)器首先要做的是返回一個歡迎信息:

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

    客戶程序接收到歡迎信息后,同樣也會按照POP3協(xié)議的要求發(fā)送帳戶名稱。我們把這個帳戶名稱記錄下來以便以后使用,代碼如下:

// 接收和記錄郵箱帳戶名稱
byte[] userBytes = new byte[255];
ns.Read(userBytes,0,userBytes.Length);

    收到帳戶名稱信息后,我們要告訴Outlook說這個名稱沒有問題,客戶程序一收到這個信息就會發(fā)送密碼,然后我們再把密碼也記錄下來。實現(xiàn)代碼是:

// 告訴客戶程序帳戶名稱正確
outbytes = Encoding.ASCII.GetBytes("+OK" + Environment.NewLine);
ns.Write(outbytes,0,outbytes.Length);
// 接收和記錄帳戶密碼
byte[] pwdBytes = new byte[255];
ns.Read(pwdBytes,0,pwdBytes.Length);

    接下來要做的就是獲取字節(jié)數(shù)組的內(nèi)容,將它們轉(zhuǎn)換成字符串,然后輸出到控制臺:

// 在控制臺上顯示出帳戶名稱、密碼
Console.WriteLine("帳戶名稱:" + Encoding.ASCII.GetString(userBytes));
Console.WriteLine("帳戶密碼:" + Encoding.ASCII.GetString(pwdBytes));

    既然已經(jīng)獲得了密碼,服務(wù)器的任務(wù)已經(jīng)完成了,現(xiàn)在可以關(guān)閉它。強(qiáng)行關(guān)閉服務(wù)器會導(dǎo)致客戶程序顯示錯誤信息,不過這里我們并不在乎。關(guān)閉服務(wù)器的代碼是:

// 關(guān)閉服務(wù)器
ns.Close();
tcpClient.Close();
tcpServer.Stop();

    將上面的所有代碼依次輸入Main函數(shù),編譯一下就得到了一個PServer.exe執(zhí)行文件,它就是我們的偽POP3服務(wù)器。PServer.exe體積很小,發(fā)行版只有16 KB。

二、獲得密碼

    首先啟動PServer.exe,讓我們的偽POP3服務(wù)器開始監(jiān)聽來自客戶程序的請求。

    啟動Outlook,點擊菜單“工具→電子郵件帳戶”,選擇“查看或更改現(xiàn)有電子郵件帳戶”,找到要恢復(fù)密碼的電子郵件帳戶,點擊“更改”打開它的屬性對話框,如圖2,把POP3服務(wù)器設(shè)置為localhost:

\

圖2 更改Outlook電子郵件帳戶

    在Outlook中接收一下郵件,如圖3所示,Outlook 將報告說服務(wù)器中斷了連接,不必理睬。

\

圖3 Outlook已經(jīng)把密碼發(fā)送到偽POP3服務(wù)器了

    現(xiàn)在PServer.exe已經(jīng)得到帳戶的密碼了,如圖4所示,abc帳戶的密碼原來是abcdefg:

\

圖4 偽POP3服務(wù)器返回的用戶名和密碼

三、利用嗅探工具

    基于POP3密碼在網(wǎng)絡(luò)上以明文形式傳遞這一事實,我們還可以利用嗅探工具分析TCP/IP通信過程獲得帳戶密碼。如果你沒有VS.NET開發(fā)工具,那么可以用這種辦法獲得密碼。即使你擁有VS.NET,也可以用嗅探工具了解POP3通信的詳細(xì)情況,加深對POP3通信的理解,這對我們用編程的方式利用POP3協(xié)議大有好處。

    能夠分析TCP/IP通信過程的嗅探工具很多,Ethereal就是一款著名的免費跨平臺分析工具。下面我們就以它為例,看看POP3通信步驟和截獲POP3密碼的過程。

    從http://www.ethereal.com/distribution/win32/下載WinPcap驅(qū)動程序和Ethereal的Windows版軟件包(兩者大小分別約300 KB和8.1 MB),安裝WinPcap,再安裝Ethereal。

    啟動Ethereal,選擇菜單Capture→Start,在圖5界面中,Interface欄選擇與Internet通信的那塊網(wǎng)卡,點擊OK。

\

圖5 Ethereal

    啟動Outlook,用遺忘密碼的帳戶收一下郵件(不必將帳戶的POP3服務(wù)器改成localhost),然后在Ethereal中點擊Stop按鈕。圖6顯示了一次試驗的結(jié)果:

\

圖6 嗅探結(jié)果

    Ethereal的嗅探結(jié)果詳細(xì)地顯示了Outlook與服務(wù)器通信的過程。正如我們前面介紹的,從No 6(圖七最左欄的編號)記錄開始,客戶程序和服務(wù)器之間建立了POP3通信聯(lián)系:No 6服務(wù)器應(yīng)答說OK,表示服務(wù)器運(yùn)行正常,可以提供服務(wù),No 7客戶程序發(fā)送一個請求USER ltt,即告知服務(wù)器郵箱帳戶的名稱ltt,No 8是TCP通信數(shù)據(jù),在此我們不必理會,No 9記錄服務(wù)器應(yīng)答說“+OK”(帳戶名稱沒問題),并要求提供ltt帳戶的密碼,No 10記錄客戶程序發(fā)送消息“PASS llll”,其中l(wèi)lll就是要尋找的密碼,No 11記錄服務(wù)器回答說OK,No 12記錄客戶程序發(fā)送請求STAT,STAT命令要求服務(wù)器以規(guī)范的格式返回郵件數(shù)量、占用空間,No 13記錄服務(wù)器回答說郵件數(shù)量0、占用空間0,最后,No 14記錄客戶程序發(fā)送QUIT結(jié)束會話請求,No 15記錄服務(wù)器結(jié)束會話——這就是一次完整的POP3通信過程。

    遇到密碼丟失的情況,動動腦筋另辟蹊徑,其實你自己就能夠把握一切。

關(guān)鍵詞:C#Outlook

贊助商鏈接:

主站蜘蛛池模板: 日土县| 陈巴尔虎旗| 临沭县| 长春市| 白河县| 吉首市| 西藏| 共和县| 望都县| 班玛县| 富源县| 桂林市| 江油市| 临海市| 昭觉县| 金乡县| 道真| 阳谷县| 喀什市| 周宁县| 天全县| 大兴区| 平阳县| 莲花县| 桃江县| 景谷| 东港市| 嘉兴市| 东港市| 富裕县| 特克斯县| 南川市| 吉水县| 屯留县| 弥渡县| 宁武县| 乐业县| 儋州市| 青铜峡市| 永顺县| 华池县|