• 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

  • 相关阅读:
    微信小程序合集7(体育赛事+高仿知乎+微赞论坛+数独游戏+小熊日记)
    win10查看wifi密码
    放弃36年的鞋服业务转而“卖粮”,贵人鸟胜算几何?
    SSL证书品牌参差不齐?品牌太多不知道怎么选择?
    尚硅谷(SpringCloudAlibaba微服务分布式)学习代码Eureka部分
    图像保存为二进制文件及二进制文件读出图像数据
    持续集成(五)Jenkins配置父子job
    C++程序练习
    洛谷题解 | P1051 谁拿了最多奖学金
    第五节、常见的基础问题
  • 原文地址:https://blog.csdn.net/jh035512/article/details/128048353