EXCEL vba工程密码破解

方法一:
这种方法实际是避开VBA工程密码验证,即骗vba编辑器,该密码输入成功,请求放行。
不管他是破解还是欺骗 能达到我们的目的角开就行
______________________________________________________
1.新建一个工作簿,打开,按ALT+F11,进入vba代码编辑器窗口:
2.新建一个模块,“插入”--“模块”把以下代码复制进模块并保存

ption 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()
'若已经hook,则恢复原API开头的6字节,也就是恢复原来函数的功能
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 'VBE6.dll调用DialogBoxParamA显示VB6INTL.dll资源中的第4070号对话框(就是输入密码的窗口)
'若DialogBoxParamA返回值非0,则VBE会认为密码正确,所以我们要hook DialogBoxParamA函数
pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA") '标准api hook过程之一: 修改内存属性,使其可写
If VirtualProtect(ByVal pFunc, 6, &H40, OriginProtect) <> 0 Then
'标准api hook过程之二: 判断是否已经hook,看看API的第一个字节是否为&H68,
'若是则说明已经Hook
MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
If TmpBytes(0) <> &H68 Then
'标准api hook过程之三: 保存原函数开头字节,这里是6个字节,以备后面恢复
MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
'用AddressOf获取MyDialogBoxParam的地址
'因为语法不允许写成p = AddressOf MyDialogBoxParam,这里我们写一个函数
'GetPtr,作用仅仅是返回AddressOf MyDialogBoxParam的值,从而实现将
'MyDialogBoxParam的地址付给p的目的
p = GetPtr(AddressOf MyDialogBoxParam) '标准api hook过程之四: 组装API入口的新代码
'HookBytes 组成如下汇编
'push MyDialogBoxParam的地址
'ret
'作用是跳转到MyDialogBoxParam函数
HookBytes(0) = &H68
MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
HookBytes(5) = &HC3 '标准api hook过程之五: 用HookBytes的内容改写API前6个字节
MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
'设置hook成功标志
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
'有程序调用DialogBoxParamA装入4070号对话框,这里我们直接返回1,让
'VBE以为密码正确了
MyDialogBoxParam = 1
Else
'有程序调用DialogBoxParamA,但装入的不是4070号对话框,这里我们调用
'RecoverBytes函数恢复原来函数的功能,在进行原来的函数
RecoverBytes
MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
hWndParent, lpDialogFunc, dwInitParam)
'原来的函数执行完毕,再次hook
Hook
End If
End Function

3.右击sheet1工作表,“查看代码”复制以下代码进去并保存:

sub 破解()
if hook then
msgbox "破解成功"
end if
end sub sub 恢复()
RecoverBytes
msgbox "恢复成功"
end sub

4.到此,一个vba破解程序完成了,回到该工作簿窗口,文件-打开 打开需要破解vba工程密码的工作簿.
5.运行"call 破解" 稍后你再双击刚才要解密的VBA工程窗体.是不是如入无人之境啊,工程保护密码形同虚设啊?
6.破解完成后,请右键刚破解的VBA工程,在"查看工程时需要密码"的地方复选框取消选择,OK.完成.
7.完成后别忘了执行"call 恢复",恢复密码保护(恢复程序的密码保护,已被破解的文件不收影响. (请勿用于非法途径)

已验证,破解成功

方法二:

新建一个Excel工作簿,Alt+F11 打开VBA编辑器,新建一个模块 ,复制以下代码,注意如提示变量未定义,则把Option Explicit行删除即可,经测试已经通过.

'移除VBA编码保护
Sub MoveProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, False
End If
End Sub '设置VBA编码保护
Sub SetProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, True
End If
End Sub Private Function VBAPassword(FileName As String, Optional Protect As Boolean = False)
If Dir(FileName) = "" Then
Exit Function
Else
FileCopy FileName, FileName & ".bak"
End If Dim GetData As String *
Open FileName For Binary As #
Dim CMGs As Long
Dim DPBo As Long
For i = To LOF()
Get #, i, GetData
If GetData = "CMG=""" Then CMGs = i
If GetData = "[Host" Then DPBo = i - : Exit For
Next
If CMGs = Then
MsgBox "请先对VBA编码设置一个保护密码...", , "提示"
Exit Function
End If
If Protect = False Then
Dim St As String *
Dim s20 As String *
'取得一个0D0A十六进制字串
Get #, CMGs - , St
'取得一个20十六制字串
Get #, DPBo + , s20
'替换加密部份机码
For i = CMGs To DPBo Step
Put #, i, St
Next
'加入不配对符号
If (DPBo - CMGs) Mod <> Then
Put #, DPBo + , s20
End If
MsgBox "文件解密成功......", , "提示"
Else
Dim MMs As String *
MMs = "DPB="""
Put #, CMGs, MMs
MsgBox "对文件特殊加密成功......", , "提示"
End If
Close #
End Function

 

vba工程密码清除的更多相关文章

  1. VBA工程密码破解

    如何破解VBA密码呢? ​ 见过网上很多关于破解VBA工程密码的方式,最常见的如下这种,但其实对于很多版本是不可行的. 基本都会提示“请先对VBA编码设置一个保护密码...” Sub VBAPassw ...

  2. 方法二:Excel 2016 VBA工程密码破解

    将你要破解的Excel文件关闭,切记一定要关闭呀!然后新建一个Excel文件 打开新建的这个Excel,按下alt+F11,打开vb界面,新建一个模块,如图所示 将代码复制到这个模块中,代码如下:Pr ...

  3. VBA工程设置密码

    VBA 工程设置密码 Alt + F11,进入程序界面: 工具---> VBAProject属性---> 保护---> 查看时锁定工程前打勾,并在下面的密码区输入密码.

  4. 批量导出VBA工程中的Source

    在做Excel宏相关项目的开发和维护过程中,我们经常需要导出VBA中的Source,但是Excel提供的宏编辑器中只能一个文件一个文件地导出,很不方便. 下面介绍2种批量导出的方法: 1.Source ...

  5. 调用其他VBA工程中的过程和函数以及API函数

    Excel VBA中,同一个应用程序下面包括多个工作簿,每个工作簿都有自己独立的VBAProject 在同一个VBA工程中,使用Call即可调用其他模块中的过程和函数,例如: Call Module2 ...

  6. 破解xlsm文件的VBA项目密码和xlsx的工作簿保护密码

    工具 待破解的xlsm文件.Excel2010.Hex Editor 步骤 1.修改.xlsm后缀为.zip 2.使用压缩软件打开,进入xl目录找到vbaProject.bin文件,解压出来 3.使用 ...

  7. SSMS登记密码清除

    如图,此界面的登录密码如果要清除,可以找到%AppData%\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin,将SqlStud ...

  8. WORD窗体保护密码清除

    Word 2003破解方法如下:1.用Word打开已设置有密码的“保护文档”(原始DOC文件):2.菜单中选择“文件”→“另存为Web页”,保存为HTML文件然后关闭Word:3.用文本编辑器(如:记 ...

  9. 升级:DNAtools for Excel工具箱,2.x英文版- VBA代码破解工具

    原始出处:www.cnblogs.com/Charltsing/p/DnaTools.html QQ:564955427 DNA工具箱全部功能一览:    单元格焦点指示(支持Excel 2007~2 ...

随机推荐

  1. jmeter导入jmx文件报错:missing class com.thoughtworks.xstream.converters.ConversionException

    有的时候我们会参考别人的jmx文件,但是在导入的时候会报错如下图: 实际上是告诉我们缺少jar包所引起的,下载对应jar包放到jmeter安装目录对应的lib/ext下就可以了,如下图: jmeter ...

  2. KVM | centos 安装 window 虚拟机

    KVM | centos 安装 window 虚拟机 环境: CENTOS 7.3 1. 准备 1.1 检查是否支持虚拟化 cat /proc/cpuinfo | egrep 'vmx|svm' 要求 ...

  3. linux环境安装mysql

    安装虚拟机:  RedHat+CentOS 我说略会不会被打,哈哈,这个虚拟机的安装之后我再补上吧~~ 首先查看已经安装的mysql相关的包 rpm -qa | grep mysql 执行之后会出现以 ...

  4. XSS之Beef的使用

    0x01 Beef简介 BeEF是The Browser Exploitation Framework的缩写.它是一种专注于Web浏览器的渗透测试工具. beef管理.挂钩web浏览器的过程: 生成交 ...

  5. [Python]爬取 游民星空网站 每周精选壁纸(1080高清壁纸) 网络爬虫

    一.检查 首先进入该网站的https://www.gamersky.com/robots.txt页面 给出提示: 弹出错误页面 注: 网络爬虫:自动或人工识别robots.txt,再进行内容爬取 约束 ...

  6. css基础-float浮动

    float实现文字环绕图片效果: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  7. ubuntu 1804 rsync 命令 服务端配置

    1. rsync的主要作用 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的"rsync算法"来使本地和远程两个主机之间的文 ...

  8. Java商城秒杀系统的设计与实战视频教程(SpringBoot版)

    课程目标掌握如何基于Spring Boot构建秒杀系统或者高并发业务系统,以及构建系统时采用的前后端技术栈适用人群Spring Boot实战者,微服务或分布式系统架构实战者,秒杀系统和高并发实战者,中 ...

  9. WebGL_0004:带贴图的材质透明效果

    在材质中: "blendType": 2,

  10. JMeter接口测试-JMeter+ant实现接口自动化测试

    前言 小伙伴们,用python做接口自动化是不是写代码比较繁琐,而且没有python代码基础的小伙伴根本无从下手对吧!今天我们来学习一下如何使用JMeter工具实现接口自动化测试. 1.安装JDK,配 ...