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

这里写目录标题

  • 破解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 LongPrivate Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPrivate Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _ByVal lpProcName As String) As LongPrivate 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 IntegerDim HookBytes(0 To 5) As Byte
Dim OriginBytes(0 To 5) As Byte
Dim pFunc As Long
Dim Flag As BooleanPrivate Function GetPtr(ByVal Value As Long) As Long'获得函数的地址GetPtr = Value
End FunctionPublic Sub RecoverBytes()'若已经hook,则恢复原API开头的6字节,也就是恢复原来函数的功能If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
End SubPublic Function Hook() As BooleanDim TmpBytes(0 To 5) As ByteDim p As LongDim OriginProtect As LongHook = 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,'若是则说明已经HookMoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6If 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) = &H68MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4HookBytes(5) = &HC3'标准api hook过程之五: 用HookBytes的内容改写API前6个字节MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6'设置hook成功标志Flag = TrueHook = TrueEnd IfEnd If
End FunctionPrivate Function MyDialogBoxParam(ByVal hInstance As Long, _ByVal pTemplateName As Long, ByVal hWndParent As Long, _ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As IntegerIf pTemplateName = 4070 Then'有程序调用DialogBoxParamA装入4070号对话框,这里我们直接返回1,让'VBE以为密码正确了MyDialogBoxParam = 1Else'有程序调用DialogBoxParamA,但装入的不是4070号对话框,这里我们调用'RecoverBytes函数恢复原来函数的功能,在进行原来的函数RecoverBytesMyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _hWndParent, lpDialogFunc, dwInitParam)'原来的函数执行完毕,再次hookHookEnd If
End Function

3 双击 Sheet1表 代码编辑
在这里插入图片描述
或者 右击sheet1工作表,“查看代码”复制以下代码进去并保存:
在这里插入图片描述
工作表代码

sub 破解()
if hook then
msgbox "破解成功"
end if
end subsub 恢复()
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.mzph.cn/news/872421.shtml

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

相关文章

云计算数据中心(二)

目录 三、绿色节能技术&#xff08;一&#xff09;配电系统节能技术&#xff08;二&#xff09;空调系统节能技术&#xff08;三&#xff09;集装箱数据中心节能技术&#xff08;四&#xff09;数据中心节能策略和算法研究&#xff08;五&#xff09;新能源的应用&#xff08;六…

代码之美:掌握 IPython 的 %autoindent 自动缩进命令

代码之美&#xff1a;掌握 IPython 的 %autoindent 自动缩进命令 在编程的世界里&#xff0c;良好的代码格式不仅能提升代码的可读性&#xff0c;还能减少错误。IPython&#xff0c;作为交互式Python编程的强大工具&#xff0c;提供了许多增强用户体验的特性&#xff0c;其中之…

新版本 idea 创建不了 spring boot 2 【没有jkd8选项】

创建新项目 将地址换成如下 https://start.aliyun.com/

Calibration相机内参数标定

1.环境依赖 本算法采用张正友相机标定法进行实现&#xff0c;内部对其进行了封装。 环境依赖为 ubuntu20.04 opencv4.2.0 yaml-cpp yaml-cpp安装方式&#xff1a; &#xff08;1&#xff09;git clone https://github.com/jbeder/yaml-cpp.git #将yaml-cpp下载至本地 &a…

深度解析:disableHostCheck: true引发的安全迷局与解决之道

在Web开发的浩瀚星空中&#xff0c;开发者们时常会遇到各种配置与调优的挑战&#xff0c;其中disableHostCheck: true这一选项&#xff0c;在提升开发效率的同时&#xff0c;也悄然埋下了安全隐患的伏笔。本文将深入探讨这一配置背后的原理、为何会引发报错&#xff0c;以及如何…

深度学习落地实战:基于GAN(生成对抗网络)生成图片

前言 大家好&#xff0c;我是机长 本专栏将持续收集整理市场上深度学习的相关项目&#xff0c;旨在为准备从事深度学习工作或相关科研活动的伙伴&#xff0c;储备、提升更多的实际开发经验&#xff0c;每个项目实例都可作为实际开发项目写入简历&#xff0c;且都附带完整的代…

Qt会议室项目

在Qt中编写会议室应用程序通常涉及到用户界面设计、网络通信、音频/视频处理等方面。以下是创建一个基本会议室应用程序的步骤概述&#xff1a; 项目设置&#xff1a; 使用Qt Creator创建一个新的Qt Widgets Application或Qt Quick Application项目。 用户界面设计&#xff1…

docker 启动提示can not create sys fs cgroup cpuset....问题处理

docker 启动失败 报错 大概报错内容为 cgroup :no such file can not create /sys/fs/cgroup/cpuset … 问题是因为 /sys/fs/cgroup/ 没有被正确挂载 cgroup 是实现资源限制的工具 docker 能够进行限制cpu 内存 大小 依赖cgroup ll /sys/fs/cgroup/ 发现一个都系也没有 m…

牛客TOP101:合并k个已排序的链表

文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 2. 解题思路 多个链表的合并本质上可以看成两个链表的合并&#xff0c;只不过需要进行多次。最简单的方法就是一个一个链表&#xff0c;按照合并两个有序链表的思路&#xff0c;循环多次就可以了。   另外一个思路&a…

(c++)virtual关键字的作用,多态的原理(详细)

1.viirtual修饰的两种函数 virtual 修饰的函数有两种&#xff0c;一个是虚函数&#xff0c;一个是纯虚函数。 2.虚函数与纯虚函数的异同之处 1.虚函数与纯虚函数的相同之处 虚函数和纯虚函数都重写的一种&#xff0c;什么是重写呢&#xff1f;重写是指在子类中写和父类中返…

第14章 处理用户输入《Linux命令行与Shell脚本编程大全笔记》

位置参数&#xff1a;$0是脚本名&#xff0c;$1对应第一个参数…参数中间包含空格要用双引号basename命令&#xff1a;返回不包含路径的脚本名。示例name$(basename $0)特殊参数变量&#xff1a; ①$#&#xff1a;统计脚本运行时携带的参数个数 ②${!#}&#xff1a;返回最后一个…

《0基础》学习Python——第十四讲__封装、继承、多态

<封装、继承、多态> 一、类和实例解析 1、面向对象最重要的概念就是类&#xff08;Class&#xff09;和实例&#xff08;Instance&#xff09;&#xff0c;必须牢记类是抽象的模板 &#xff0c;比如Student类&#xff0c;而 实例是根据类创建出来的一个个具体的“对象”…

day2 上下文Context

文章目录 使用效果设计Context路由(Router)框架入口 本文代码地址&#xff1a;day2 上下文Context 本文是 7天用Go从零实现Web框架Gee教程系列的第二篇。 主要内容如下&#xff1a; 将路由(router)独立出来&#xff0c;方便之后增强。设计上下文(Context)&#xff0c;封装 R…

04.阻塞赋值和非阻塞赋值

1.阻塞赋值 阻塞赋值的赋值号是用""表示,对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系.它的操作结构可以认为是只有一个步骤的操作,即计算赋号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他verilog语句的干扰,直到现行的赋值完成,才…

释放Conda通道束缚:启用自由通道恢复的终极指南

释放Conda通道束缚&#xff1a;启用自由通道恢复的终极指南 在Conda的生态中&#xff0c;通道&#xff08;channels&#xff09;是包来源的路径&#xff0c;而自由通道&#xff08;free channel&#xff09;通常指的是非限制性的包源&#xff0c;可以提供更多的包选择。有时&a…

《昇思25天学习打卡营第23天|onereal》

第23天学习内容简介&#xff1a; ----------------------------------------------------------------------------- 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 1 环境配置 配置网络线路 2 代码开发 下载权重大约需要10分钟 ------------------------------- 运…

大模型技术对学校有什么作用?

大模型技术对学校有多方面的作用&#xff0c;可以在教学、管理、决策等多个领域带来显著的改进。以下是大模型技术对学校的主要作用&#xff1a; 1. 个性化教学&#xff1a;大模型技术可以帮助教师分析学生的学习行为和历史成绩&#xff0c;从而定制个性化的教学计划和资源。这…

告别自动激活:掌握如何在Conda中禁用Base环境

告别自动激活&#xff1a;掌握如何在Conda中禁用Base环境 引言 在Python开发的世界中&#xff0c;环境管理是一个不可或缺的部分。Conda是一个强大的包管理器和环境管理器&#xff0c;它允许开发者为不同的项目创建隔离的环境&#xff0c;从而避免依赖冲突。默认情况下&#…

maven项目容器化运行之1-基于1Panel软件将docker镜像构建能力分享给局域网

一.背景 公司主机管理组的兄弟安装了1Panel(社区版v1.10.10-lts)&#xff0c;期望我们开发的小项目都通过docker来部署。我第一步要配置的就是怎么将docker镜像构建能力共享的问题&#xff0c;因为我本机是windows&#xff0c;不想再去折腾安装docker环境。 二.设置过程 个人…

ES6 对象的新增方法(十四)

1. Object.assign(target, …sources) 特性&#xff1a;将一个或多个源对象的所有可枚举属性复制到目标对象。 用法&#xff1a;用于对象属性的合并。 const obj1 { a: 1, b: 2 }; const obj2 { b: 3, c: 4 }; Object.assign(obj1, obj2);console.log(obj1); // 输出&#…