熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 09:55:42  來源: .NET編程 

  許多人習慣於讓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
From:http://tw.wingwit.com/Article/program/net/201311/12002.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.