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


    两种方式破解VBA加密代码

    第一种:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    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

    第二种:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    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

  • 相关阅读:
    Spring中的批处理:数据处理的瑞士军刀
    K8S云计算系列-(1)
    【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
    jmeter压力测试工具,雪崩效应,容错组件Sentinel
    pycharm+python研究生招生智能问答系统django+vue
    计算机毕设 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python
    HTML5期末大作业:基于HTML+CSS+JavaScript仿蘑菇街购物商城设计毕业论文源码
    RT-DETR手把手教程,注意力机制如何添加在网络的不同位置进行创新优化
    http2.0/http3.0/rpc
    数据分析:小红书2024年年轻人社交趋势洞察
  • 原文地址:https://blog.csdn.net/jh035512/article/details/128048353