设为首页收藏本站

嘻皮客娱乐学习网

 找回密码
 中文注册
搜索
打印 上一主题 下一主题
开启左侧

[OFFICE] EXCEL VBA工程密码破解方法(不破坏原密码)

[复制链接]
跳转到指定楼层
楼主
发表于 2017-2-8 14:06:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  这种方法实际是避开VBA工程密码验证,即,骗vba编辑器,该密码输入成功,请求放行。
  原理不多说了,先将方法公布:
  ===================================================
  1.新建一个工作簿,打开,按ALT+F11,进入vba代码编辑器窗口:
  2.新建一个模块,“插入”--“模块”把以下代码复制进模块并保存
  ---------------------------------------------------------------------------------------

  1. Option Explicit
  2. Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Long, Source As Long, ByVal Length As Long)
  3. Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Long, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long

  4. Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As Long

  5. Private Declare Function GetProcaddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long

  6. Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As Long, ByVal pTemplateName As Long, ByVal hWndParent As Long, ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer

  7. Dim HookBytes(0 To 5) As Byte
  8. Dim OriginBytes(0 To 5) As Byte
  9. Dim pFunc As Long
  10. Dim Flag As Boolean
  11. Private Function GetPtr(ByVal Value As Long) As Long
  12. GetPtr = Value
  13. End Function
  14. Public Sub RecoverBytes()
  15. If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
  16. End Sub
  17. Public Function Hook() As Boolean
  18. Dim TmpBytes(0 To 5) As Byte
  19. Dim p As Long
  20. Dim OriginProtect As Long

  21. Hook = False
  22. pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
  23. If VirtualProtect(ByVal pFunc, 6, &H40, OriginProtect) <> 0 Then
  24. MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
  25. If TmpBytes(0) <> &H68 Then
  26. MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
  27. p = GetPtr(AddressOf MyDialogBoxParam)
  28. HookBytes(0) = &H68
  29. MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
  30. HookBytes(5) = &HC3
  31. MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
  32. Flag = True
  33. Hook = True
  34. End If
  35. End If
  36. End Function
  37. Private Function MyDialogBoxParam(ByVal hInstance As Long, _
  38. ByVal pTemplateName As Long, ByVal hWndParent As Long, _
  39. ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
  40. If pTemplateName = 4070 Then
  41. MyDialogBoxParam = 1
  42. Else
  43. RecoverBytes
  44. MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, hWndParent, lpDialogFunc, dwInitParam)
  45. Hook
  46. End If
  47. End Function
复制代码




  -------------------------------------------------------------------
  3.右击sheet1工作表,“查看代码”复制以下代码进去并保存:
  -------------------------------------------------------------------
     
  1. sub 破解()
  2. if hook then msgbox "破解成功"
  3. end sub
  4. sub 恢复()
  5. RecoverBytes
  6. msgbox "恢复成功"
  7. end sub
复制代码

  
  
  ------------------------------------
  4.到此,一个vba破解程序完成了,回到该工作簿窗口,文件-打开 打开需要破解vba工程密码的工作簿.
  5.运行call 破解 稍后你再双击刚才要解密的VBA工程窗体.是不是如入无人之境啊,工程保护密码形同虚设啊?!
  6.破解完成后,请右键刚破解的VBA工程,在查看工程时需要密码的地方复选框取消选择,OK.完成。再把该工作薄另存一下,即相当于有了一个没有vba密码的工作薄了。
  7.最后执行call 恢复,恢复密码保护,这样,原来有vba工作密码的工作薄下次再打开的时候,又恢复了原来的密码。


最后如果对于上面的操作觉得太麻烦,那么可以直接下载下面这个破解文件即可。在sheet1里面点击"vba破解"即可。

VBA工程密码破解: VBA密码破解.xls (43 KB, 下载次数: 238)
 
回复

使用道具 举报

小黑屋|手机版|嘻皮客网 ( 京ICP备10218169号|京公网安备11010802013797  

GMT+8, 2024-5-14 09:34 , Processed in 0.199367 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表