广告位联系
返回顶部
分享到

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

VBA 来源:互联网 作者:秩名 发布时间:2022-02-24 13:37:05 人浏览
摘要

两种方式破解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.GetOpenFil

两种方式破解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

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://www.cnblogs.com/vbashuo/p/15638693.html
相关文章
  • VBA实现合并具有文本框的Word文档

    VBA实现合并具有文本框的Word文档
    在我们之前的文章中,介绍过基于Python语言的python-docx(docx)模块与docxcompose模块,对大量Word文档加以合并的方法;但是,基于这种方法,
  • 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() 你要解保
  • VBA处理数据与Python Pandas处理数据案例比较分析

    VBA处理数据与Python Pandas处理数据案例比较分析
    需求: 现有一个 csv文件,包含CNUM和COMPANY两列,数据里包含空行,且有内容重复的行数据。 要求: 1)去掉空行; 2)重复行数据只保留一
  • VBA将excel数据表生成JSON文件
    ADODB.Stream创建UTF-8+BOM编码的文本文件。 然后遍历数据区,格式化数据,输出即可。 小数据还行,大数据没测试。 另,使用fso创建的文本文
  • VBA解决Windows空当接龙的617局的方法
    Windows的自带游戏空当接龙,其中第617局是比较难解的,需要尝试的次数比较多,而且经常忘记解法和步骤。 原本希望使用AutoIt或AutoHotkey、
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计