千家信息网

VBA工程加密PJ方式有哪些

发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,本篇文章给大家分享的是有关VBA工程加密PJ方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。两种方式破解VBA加密代码第一种:S
千家信息网最后更新 2024年10月23日VBA工程加密PJ方式有哪些

本篇文章给大家分享的是有关VBA工程加密PJ方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

两种方式破解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 #1End 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 BooleanPrivate Function GetPtr(ByVal Value As Long) As Long    GetPtr = ValueEnd FunctionPublic Sub RecoverBytes()    If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6End SubPublic 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 IfEnd FunctionPrivate 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 IfEnd FunctionSub Crack()    If Hook Then MsgBox "破解成功"End Sub

以上就是VBA工程加密PJ方式有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

0