当前位置: 首页 > news >正文

VBA过程代码密码解除

VBA过程代码密码解除

注:不可恶意破解他人VBA工程。

  1 打开需解除的Excel,新建一个空白Excel文档

  2 Alt + F11 打开代码编辑,新建模块将以下代码复制

Option ExplicitPrivate Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr)Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongPtr, ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtrPrivate Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPtrPrivate Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, ByVal lpProcName As String) As LongPtrPrivate Declare PtrSafe Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As LongPtr, ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As IntegerDim HookBytes(0 To 5) As Byte
Dim OriginBytes(0 To 5) As Byte
Dim pFunc As LongPtr
Dim Flag As BooleanPrivate Function GetPtr(ByVal Value As LongPtr) As LongPtrGetPtr = Value
End FunctionPublic Sub RecoverBytes()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 LongPtrDim OriginProtect As LongPtrHook = FalsepFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")If VirtualProtect(ByVal pFunc, 6, &H40, OriginProtect) <> 0 ThenMoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6If TmpBytes(0) <> &H68 ThenMoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6p = GetPtr(AddressOf MyDialogBoxParam)HookBytes(0) = &H68MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4HookBytes(5) = &HC3MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6Flag = TrueHook = TrueEnd IfEnd If
End FunctionPrivate Function MyDialogBoxParam(ByVal hInstance As LongPtr, ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As IntegerIf pTemplateName = 4070 ThenMyDialogBoxParam = 1ElseRecoverBytesMyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, hWndParent, lpDialogFunc, dwInitParam)HookEnd If
End Function

  3 点击Sheet1,将以下代码复制

Sub 破解()If Hook ThenMsgBox "破解成功"End IfEnd SubSub 恢复()RecoverBytesMsgBox "恢复成功"End Sub

  4 运行破解和恢复即可


http://www.mrgr.cn/news/37313.html

相关文章:

  • 【玩转贪心算法专题】56. 合并区间【中等】
  • Java通过base64将文件生成到指定位置
  • JAVA学习-练习试用Java实现“翻转字符串里的单词”
  • css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis的使用
  • css div多边框斜角边框
  • 面试小妙招:轻松绕过五大“坑”,展现真实自我
  • ARM汇编语言: lesson 2(ADD, SUB, MUL, set CPSR)
  • 文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于自适应时段划分的含氢微能网中长期变分辨率调度》
  • APP商业化变现模
  • 理解CPU上下文切换-下
  • springboot中有哪些方式可以解决跨域问题
  • Java中使用ZXing和QRCode生成二维码(附Demo)
  • 【SpringBoot详细教程】-06-Restful风格【持续更新】
  • Lod2城市三维模型是什么意思?
  • 你要的录音播放录音功能,直接用!Air201资产定位模组LuatOS快速入门
  • Django Web开发基础介绍
  • SemiDrive E3 MCAL 开发系列(4) – Gpt 模块的使用
  • 软考高级:系统设计 - MDA 模型 AI 解读
  • 生信初学者教程(十二):数据汇总
  • Windows下jenkins执行远程sh脚本中文乱码问题