VBA工程加密PJ方式(两种)

2023-12-05 0 272

两种方式破解VBA加密代码

第一种:

Sub VBAPassword1() \’你要解保护的Excel文件路径
Filename = Application.GetOpenFilename(\”Excel文件(*.xls & *.xla & *.xlt),*.xls;*.xla;*.xlt\”, , \”VBA破解\”)
If Dir(Filename) = \”\” Then
MsgBox \”没找到相关文件,清重新设置。\”
Exit Sub
Else
FileCopy Filename, Filename & \”.bak\” \’备份文件。
End If
Dim GetData As String * 5
Open Filename For Binary As #1
Dim CMGs As Long
Dim DPBo As Long
For i = 1 To LOF(1)
Get #1, i, GetData
If GetData = \”CMG=\”\”\” Then CMGs = i
If GetData = \”[Host\” Then DPBo = i – 2: Exit For
Next
If CMGs = 0 Then
MsgBox \”请先对VBA编码设置一个保护密码…\”, 32, \”提示\”
Exit Sub
End If
Dim St As String * 2
Dim s20 As String * 1
\’取得一个0D0A十六进制字串
Get #1, CMGs – 2, St
\’取得一个20十六制字串
Get #1, DPBo + 16, s20
\’替换加密部份机码
For i = CMGs To DPBo Step 2
Put #1, i, St
Next
\’加入不配对符号
If (DPBo – CMGs) Mod 2 <> 0 Then
Put #1, DPBo + 1, s20
End If
MsgBox \”文件解密成功……\”, 32, \”提示\”
Close #1
End Sub

第二种:

Option Explicit
Private Declare Sub MoveMemory Lib \”kernel32\” Alias \”RtlMoveMemory\” (Destination As Long, Source As Long, ByVal Length As Long)
Private Declare Function VirtualProtect Lib \”kernel32\” (lpAddress As Long, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Private Declare Function GetModuleHandleA Lib \”kernel32\” (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib \”kernel32\” (ByVal hModule As Long, ByVal lpProcName As String) As Long
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
Dim HookBytes(0 To 5) As Byte
Dim OriginBytes(0 To 5) As Byte
Dim pFunc As Long
Dim Flag As Boolean
Private Function GetPtr(ByVal Value As Long) As Long
GetPtr = Value
End Function
Public Sub RecoverBytes()
If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
End Sub
Public Function Hook() As Boolean
Dim TmpBytes(0 To 5) As Byte
Dim p As Long
Dim OriginProtect As Long
Hook = False
pFunc = GetProcAddress(GetModuleHandleA(\”user32.dll\”), \”DialogBoxParamA\”)
If VirtualProtect(ByVal pFunc, 6, &H40, OriginProtect) <> 0 Then
MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
If TmpBytes(0) <> &H68 Then
MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
p = GetPtr(AddressOf MyDialogBoxParam)
HookBytes(0) = &H68
MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
HookBytes(5) = &HC3
MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
Flag = True
Hook = True
End If
End If
End Function
Private Function MyDialogBoxParam(ByVal hInstance As Long, _
ByVal pTemplateName As Long, ByVal hWndParent As Long, _
ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
If pTemplateName = 4070 Then
MyDialogBoxParam = 1
Else
RecoverBytes
MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, hWndParent, lpDialogFunc, dwInitParam)
Hook
End If
End Function
Sub Crack()
If Hook Then MsgBox \”破解成功\”
End Sub

本文来自博客园,作者:张翰博,转载请注明原文链接:https://www.cnblogs.com/vbashuo/p/15638693.html

到此这篇关于两种方式破解VBA工程加密的文章就介绍到这了,更多相关VBA工程加密破解内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • VBA数组用法案例详解
  • VBA中的Timer函数用法
  • VBA 编程基础
  • 关于vba代码运行时错误1004 应用程序定义或对象定义错误问题

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 VBA VBA工程加密PJ方式(两种) https://www.u-9.cn/jiaoben/vba/100674.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务