EXCEL VBA工程密码破解 工作表保护破解

news2024/9/21 12:36:39

这里写目录标题

  • 破解Excel宏工程加密
    • 方法一 新建破解宏文件
    • 方法二 修改二进制文件
  • 破解工作表保护
  • 引用

破解Excel宏工程加密

如图所示 白料数据处理已工程被加密。
在这里插入图片描述

方法一 新建破解宏文件

1 创建一个XLSM文件,查看代码 ALT+F11
在这里插入图片描述

2 新建一个模块,“插入”–“模块”把以下代码复制进模块并保存
在这里插入图片描述

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()
    '若已经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表 代码编辑
在这里插入图片描述
或者 右击sheet1工作表,“查看代码”复制以下代码进去并保存:
在这里插入图片描述
工作表代码

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


sub 恢复()
RecoverBytes
msgbox "恢复成功"
end sub

4.打开需要破解vba工程密码的工作簿.
在这里插入图片描述

5.运行"call 破解"
在这里插入图片描述
或者 点击小三角形运行
在这里插入图片描述
稍后你再双击刚才要解密的VBA工程窗体.
在这里插入图片描述

6.破解完成后,请右键刚破解的VBA工程,在"查看工程时需要密码"的地方复选框取消选择,OK.完成.
在这里插入图片描述

7.完成后别忘了执行"call 恢复",恢复密码保护(恢复程序的密码保护,已被破解的文件不收影响. (请勿用于非法途径)
在这里插入图片描述

已验证,破解成功

方法二 修改二进制文件

1 修改xlsm文件为rar文件
在这里插入图片描述

2 修改xl->vbaProject.bin 文件
在这里插入图片描述

修改文件为txt可以直接用记事本打开,找到DPB修改为DPx后保存
再将文件修改为.bin后缀名
或者直接用可以编辑.bin后缀名的软件打开 把DPB修改为DPx后保存
在这里插入图片描述
修改后保存
在这里插入图片描述

3 覆盖原文件
在这里插入图片描述
直接点击确定
在这里插入图片描述
4 rar尾缀修改为xlsm
在这里插入图片描述
在这里插入图片描述

5 打开文件后查看代码无需工程密码!! 但是也看不了代码
点击是
在这里插入图片描述
查看代码弹窗报错!
先点击确定 不必理会
在这里插入图片描述
6 重新设置工程密码后保存
在这里插入图片描述
7 重新打开文件后 密码已经破解
在这里插入图片描述

破解工作表保护

Sheet1 表格被工作表保护,无法编辑
在这里插入图片描述
1:打开该文件,先解除默认的“宏禁用”状态
在这里插入图片描述

     再切换到“开发工具”选项卡,点击“宏”→“录制宏”,出现“录制新宏”窗口,在“宏名”定义一个名称(可以随意命名,只是省去了插入模块)为:  
     PasswordBreaker,点击“确定”退出;

在这里插入图片描述
2:点击VB编辑器查看录制宏代码
在这里插入图片描述
代码如下
在这里插入图片描述
用如下内容替换右侧窗口中的所有代码:
在这里插入图片描述

注意:如果原先是XLSX文件不能保存宏,弹窗提示直接点击确定 保存为XLSM文件

3: 运行宏,此时会有弹窗提示,点击确定
在这里插入图片描述此时已经破解了工作表保护

在这里插入图片描述

引用

https://gist.github.com/parano/1868242

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功&#xff0c;通过将成熟模块打包成IP核&#xff0c;可实现重复利用&#xff0c;避免重复造轮子&#xff0c;大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核&#xff0c;再分别调用…

Vue+Echarts做图表展示

1.Echarts安装 终端运行安装命令&#xff1a; npm install echarts -s 在main.js做全局引用&#xff1a; //引入echarts import * as echarts from echarts //vue全局注入echarts Vue.prototype.$echarts echarts; 2.页面使用Echarts画柱状图和饼图 效果&#xff1a; 代码展…

Qt各个版本安装的保姆级教程

文章目录 前言Qt简介下载Qt安装包安装Qt找到Qt的快捷方式总结 前言 Qt是一款跨平台的C图形用户界面应用程序开发框架&#xff0c;广泛应用于桌面软件、嵌入式软件、移动应用等领域。Qt的强大之处在于其高度的模块化和丰富的工具集&#xff0c;可以帮助开发者快速、高效地构建出…

esplice老项目(非maven)导入idea问题

解决导入idea显示不正常 老项目导入idea后&#xff0c;显示为如下所示&#xff1a; 显示的不太正常&#xff0c;正常显示为下面这个样子&#xff1a; 解决 非老项目 idea的项目中所有的文件全部变成了.java(已解决) 老项目 以下内容参考&#xff1a;idea导入项目后java文…

阿里云CDN架构技术(一)

CDN补充 cdn内容分发网络&#xff08;content delivery network&#xff0c;cdn&#xff09; 构建在互联网TCP/IP四层模型之上对用户透明的覆盖网。 该网络通过全球范围内分布式部署边缘服务器&#xff0c;将互联网内容从互联网中心缓存到靠近用户的边缘服务器上&#xff0c;…

SymPy,一个可以做数学题的Python库,如何使用SymPy进行微积分计算?

SymPy 是一个 Python 库&#xff0c;用于符号数学。这意味着 SymPy 可以帮助用户执行从基本代数到微积分、方程求解、积分、极限、级数、几何、组合数学、离散数学和量子物理等广泛的数学计算。它允许用户以完全符号化的方式处理数学表达式&#xff0c;而无需将问题转换为数值近…

大模型的“幻觉”克星!被低估的RAG技术

1 RAG与大模型、Prompt、微调的关系 本文主要带大家深入学习一下最近AI领域的重要技术RAG&#xff0c;本文致力于用大白话给大家说明白RAG&#xff0c;但是还是需要一些大模型和微调有关的领域名词有一些基本的了解&#xff0c;大家选择性阅读哦!在进行正文学习之前我们先用一…

Unity Meta Quest 开发:如何在每只手指上添加 Poke 交互

XR 开发社区&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 找到玩家物体 OVRCameraRig 下的子物体 HandInteractorsRight/Left&#xff08;分别管理左右手的 Interactor&#xff09;下的 HandPokeInteractor 子物体&#x…

Java语言程序设计——篇五

数组 概述数组定义实例展示实战演练 二维数组定义数组元素的使用数组初始化器实战演练&#xff1a;矩阵计算 &#x1f4ab;不规则二维数组实战演练&#xff1a;杨辉三角形 概述 ⚡️数组是相同数据类型的元素集合。各元素是有先后顺序的&#xff0c;它们在内存中按照这个先后顺…

计算机的错误计算(三十三)

摘要 计算机的错误计算&#xff08;三十二&#xff09;展示了 Python的 math库中 exp(x)的计算精度问题。本节讨论 Python 的 torch 库中的 exp(x)的计算精度问题。结果显示&#xff1a;与 math 库中的函数输出值具有同样的错误数字个数。 不妨仍然取&#xff08;二十八&…

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

使用SpringCloud搭建分布式配置中心

在现代的分布式系统中&#xff0c;配置管理是一个非常重要的组成部分。传统的做法是将配置文件放在每个服务的本地进行配置&#xff0c;这样的做法在规模较小的系统中还能够接受&#xff0c;但是当系统规模逐渐扩大时&#xff0c;配置管理将变得非常困难&#xff0c;容易出错。…

Autosar Dcm配置-0x28服务ComControl-基于ETAS软件

文章目录 前言DcmDcmDsdDcmDspBswMBswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionBswMActionListBswMRule总结前言 0x28服务主要用来控制非诊断报文的通讯,一般在刷写预编程过程中,用来禁止APP的通信报文,可以减少总线负载率,提高刷写成功率。本文…

vue3-tree-org实现带照片的组织架构图

官方文档&#xff1a;vue3-tree-org 显示照片需要注意的地方 使用步骤 下载 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 实现代码 <tem…

【简历】郑州某二本学院:前端秋招简历指导,简历通过率接近于0

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份二本前端同学的校招简历。25届的二本同学求职方向主要是在小公司&#xff0c;但是这个同学他故意把学校放在简历最后&#xff0…

R包:DiagrammeR流程图

介绍 DiagrammeR 依赖于图形描述语言 Graphviz&#xff0c;可以通过 R 包 igraph 和 visNetwork 访问。DiagrammeR 通过将有效的图规范以 DOT 语言的形式传递给 grViz() 函数来输出图。 加载R包 采用DiagrammeRR包&#xff0c;它提供了以下函数&#xff1a; 使用create_grap…

亲子母婴行业媒体邀约宣发资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 亲子母婴行业是一个综合性的产业&#xff0c;涉及多个领域&#xff0c;包括儿童食品&#xff0c;儿童玩具&#xff0c;服装&#xff0c;洗护&#xff0c;月子中心&#xff0c;母婴护理&a…

单臂路由组网实验,单臂路由的定义、适用情况、作用

一、定义 单臂路由是指通过在路由器的一个接口上配置许多子接口,从而实现原来相互隔离的不同VLAN之间的互通。 子接口:把路由器上的实际的物理接口划分为多个逻辑上的接口,这些被划分的逻辑接口就是子接口。 二、适用情况 用在没有三层交换机,却要实现不同VLAN之间的互…

怎样恢复删除的视频?简单几步迅速上手!

在短视频时代&#xff0c;视频成为我们生活中不可缺少的一部分。它记录了我们生活中的点点滴滴&#xff0c;承载着许多美好的回忆。如果一不小心删除了重要的视频&#xff0c;那将是一个巨大的缺憾。那我们该怎么恢复删除的视频呢&#xff1f;在电脑删掉的视频还能恢复吗&#…

Java基础笔记(面试题)

一、Tomcat中为什么要使用自定义类加载器 Tomcat中可以放多个Java项目的jar文件&#xff0c;如果每个jar文件中都有一个User的类&#xff0c;那么User类在没有自定义类加载器的情况下是只能加载一次&#xff1b;想要加载多次&#xff0c;只能自定义类加载器 二、JDK、JRE、JVM…