今天客户要求分析一个VBA为何不能执行,但是VBA工程加了密码,为了看到整个工程,不得已将许久以前用过的破解代码拿了出来,发现在Office2013(64bit)下不能用。

分析原因,主要是有两个,一个是在使用API的生命语句的Declare后面要加PtrSate。另外一个是很多Long型变量要替换成LongLong变量。

修改后的代码如下。

Option Explicit
Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
        (Destination As LongLong, Source As LongLong, ByVal Length As LongLong)
Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongLong, _
        ByVal dwSize As LongLong, ByVal flNewProtect As LongLong, lpflOldProtect As LongLong) As LongLong
         
Private Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongLong
    
Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongLong, _
        ByVal lpProcName As String) As LongLong
    
Private Declare PtrSafe Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As LongLong, _
        ByVal pTemplateName As LongLong, ByVal hWndParent As LongLong, _
        ByVal lpDialogFunc As LongLong, ByVal dwInitParam As LongLong) As Integer
         
Dim HookBytes(0 To 5) As Byte
Dim OriginBytes(0 To 5) As Byte
Dim pFunc As LongLong
Dim Flag As Boolean
 
Private Function GetPtr(ByVal Value As LongLong) As LongLong
    '获得函数的地址
    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 LongLong
    Dim OriginProtect As LongLong
    
    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 LongLong, _
        ByVal pTemplateName As LongLong, ByVal hWndParent As LongLong, _
        ByVal lpDialogFunc As LongLong, ByVal dwInitParam As LongLong) 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

在Office 2013(64bit)下破解VBA工程密码相关推荐

  1. Excel2013破解vba工程密码以及工作表保护密码

    今天从网上学到如何破解vba工程密码以及工作表保护密码,在这里分享一下.  破解vba工程密码:(引用自http://jingyan.baidu.com/article/2009576170cc05c ...

  2. EXCEL2013 vba工程密码破解

    EXCEL vba工程密码破解 这种方法实际是避开VBA工程密码验证,即,骗vba编辑器,该密码输入成功,请求放行. 原理不多说了,先将方法公布: ========================== ...

  3. EXCEL vba工程密码破解

    这里写自定义目录标题 方法一: 方法二: 方法一: 这种方法实际是避开VBA工程密码验证,即骗vba编辑器,该密码输入成功,请求放行. 不管他是破解还是欺骗 能达到我们的目的角开就行 1.新建一个工作 ...

  4. VBA代码助手,代码库收藏管理工具,代码对齐,破解Excel工程密码,设置隐藏模块

    历时一个月的紧张开发,VBA代码助手专业版终于问世了,对原加载宏版VBA代码助手进行了全面升级,焕然一新的代码助手重装上阵,希望一如既往的带给大家最好的代码收藏管理和快速插入体验 ! 以前的老朋友应该 ...

  5. 深入讲解破解Excel Vba工程密码

    Notice:虽然网上好多破解的教程,但是因为EXCEL版本时有更新,很多小白都不知道怎么破解,这边做一个举一反三的教程,做到vba excel工程密码几乎全部可以破解. 这边先给出一遍参考文章: h ...

  6. 忘记CAD VBA工程密码,如何去掉

    http://blog.163.com/mudong@126/blog/static/369751952014026492735/ 一.下载二进制文本编辑器:Hex Editor II(二进制.十六进 ...

  7. Excel VBA工程密码破解程序 (绝对可以破解)

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

  8. Linux系统下破解root用户密码

    说明:当忘记root用户密码,无法登录linux系统时,可以采用以下方法重置root密码,然后重新登录. 1.启动linux系统出现GRUP菜单后,按下任意键,让系统进入如下状态,然后按"e ...

  9. ebs R12下破解apps用户密码

    apps用户在ebs中的重要程度不用多赘述,但是总是用客户会告诉你apps密码忘了怎么办(怎么办,凉拌),遇到这样的客户真想大喊一声臣妾做不到. 没办法客户是上帝,谁让他给钱呢.昨天又看到一个群里的兄 ...

  10. 在不借助其他工具的情况下破解Windows开机密码

    文章:http://www.cnblogs.com/vforbox/p/4828855.html#!comments. 从该文章我们也可以得到一个快速启动某个程序的方法:将自己常用的程序命名为seth ...

最新文章

  1. PCL环境配置失败和运行PCL自带例子
  2. 全球及中国自动驾驶行业应用领域及投资前景展望报告2022-2028年版
  3. MyBatis从缓存查找数据的依据
  4. uniapp增加百度统计代码(h5)
  5. restful风格的增删改查
  6. 腾讯云服务器 ubuntu 设置允许root用户登录和禁用ubuntu用户
  7. java值传递string_关于java:按值传递(StringBuilder与String)
  8. oracle中特殊字符处理
  9. oracle学习日志---返回RemoteOperationException: ERROR: Wrong password for user-错误的用户名密码-的错误的解决办法...
  10. spark运行wordcount
  11. Python基础二--基本控制语句
  12. 面向对象之多态、多态性
  13. Python练习题10道(含答案)
  14. win10无网络安装.Net Framework3.5
  15. Spring Boot-1 (IntelliJ IDEA + gradle)
  16. javaScript中值传递和引用传递
  17. 一度智信|拼多多店铺取名大全
  18. 使用jQuery跳转到指定页面
  19. Windows To Go详解
  20. 手工清除AUTO病毒

热门文章

  1. 计算机研究生申请 MIT,麻省理工计算机专业研究生申请条件有什么?
  2. MAC安装Securecrt破解
  3. Linux 教你如何预防删库到跑路
  4. python网络爬虫——自学笔记2.1用requests库和re库爬取图片
  5. 用树莓派打拳皇游戏(运行 SWF 游戏文件)【Adobe Flash Player + Chromium】
  6. 青少年CTF wp合集
  7. idea社区版创建springboot_IDEA社区版创建spring boot项目的安装插件的图文教程
  8. linux命令行打开写字板,在Linux操作系统中使用手写板
  9. 单总体分布卡方拟合优度检验
  10. Android 安卓腾讯云互动直播开发新手入坑几点建议