Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 14881|回复: 36

API hook及解除VBA工程密码保护的应用

 关闭 [复制链接]
发表于 2007-4-24 09:45 | 显示全部楼层 |阅读模式

'***************************************************************************
'*
'* MODULE NAME:     Protected VBA project Picklock(PVP)
'* AUTHOR & DATE:   tt.t
'*                  23 April 2007
'* E-Mail:          ttui(AT)163.com, sohu邮箱垃圾邮件太多已经不用了
'*
'* Usage:           运行FrmHookMain窗口,点补丁,然后双击工程窗口中有密码保护的模块
'*                  应该能够直接打开了:)
'*
'*
'* DESCRIPTION:     在写中文字符串转换为拼音函数(HzToPy)过程中,第一次发现VBA功能的强大.
'*                  于是这次尝试将其他语言中比较好写的API HOOK移植成VBA代码,
'*                  正好顺便把VBA密码保护去掉,喜欢加密码的朋友不要生气啊:)
'*                  总的来说VBA的写法和其他语言区别不大,但VBA毕竟不太方便,代码必须放在标准模块中.
'*                  再有就是对指针的支持实在有限,于是最后选择了一种写起来最简单的API hook方法,
'*                  就是所谓的陷阱法.如果你不太清楚什么是API HOOK,请求助于google.
'*
'* Theory:         这里就不说API hook的方法了,都是传统方法没什么可说的,这里只
'*                  简单说下VBA模块密码破解.其实这些我也不是很了解,毕竟知道加密过程
'*                  用处不大,这个问题上我比较关心结果:)
'*                  判断有密码以及提示输入密码都是VBE6.dll干得好事.如果有密码,
'*                  VBE6.dll会调用DialogBoxParamA显示VB6INTL.dll资源中的第4070号
'*                  对话框(就是那个输入密码的窗口),若DialogBoxParamA返回值非0,
'*                  则VBE会认为密码正确,然后乖乖展开加密模块的资源.很显然其中存在很大
'*                  漏洞,就像给日记本加上了锁,但里面全是活页,我们不需要打开锁,只要从侧面
'*                  取出活页就可以了.这个从侧面取活页的过程就是hook住DialogBoxParamA函数,
'*                  若程序调用DialogBoxParamA装入4070号对话框,我们就直接返回1,让
'*                  VBE以为密码正确.
'*
'* PS:              PVP是在一个叫Advanced VBA Password Recovery (AVPR)的软件启发下
'*                  作出来的,AVPR提供了一个VBA Backdoor功能就是跳过密码直接查看工程资源.
'*                  它的原理和PVP一样,但用了通用性比较差的方法,适用系统比较有限,而PVP的方法
'*                  理论上适用于所有采用第4070号对话框录入密码的Office系统.
'*                  经测试PVP适用于Office 2002, 2003, 2007,其他版本尚未测试,但估计依然有效.
'*                  在2000和XP系统上测试通过,但条件限制没有在Vista系统上测试,听说Vista有些机制
'*                  可能影响API hook,暂时没机会测试就先这样吧~
'*
'*                  *64位操作系统下面的API hook代码肯定运行出错,就不要测试了
'*
'*
'***************************************************************************

欢迎反馈

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2007-4-24 09:54 | 显示全部楼层
回复

使用道具 举报

发表于 2007-4-24 11:10 | 显示全部楼层

请问这个是怎么用的?运行了一下,但是没有出来什么结果。。。。
回复

使用道具 举报

发表于 2007-4-24 11:48 | 显示全部楼层
本帖最后由 爱疯 于 2015-8-27 23:13 编辑

谢谢分享

'* Theory:         这里就不说API hook的方法了,都是传统方法没什么可说的,这里只
'*                  简单说下VBA模块密码破解.其实这些我也不是很了解,毕竟知道加密过程
'*                  用处不大,这个问题上我比较关心结果:)
'*                  判断有密码以及提示输入密码都是VBE6.dll干得好事.如果有密码,
'*                  VBE6.dll会调用DialogBoxParamA显示VB6INTL.dll资源中的第4070号
'*                  对话框(就是那个输入密码的窗口),若DialogBoxParamA返回值非0,
'*                  则VBE会认为密码正确,然后乖乖展开加密模块的资源.很显然其中存在很大
'*                  漏洞,就像给日记本加上了锁,但里面全是活页,我们不需要打开锁,只要从侧面
'*                  取出活页就可以了.这个从侧面取活页的过程就是hook住DialogBoxParamA函数,
'*                  若程序调用DialogBoxParamA装入4070号对话框,我们就直接返回1,让
'*                  VBE以为密码正确.

回复

使用道具 举报

发表于 2007-4-29 02:18 | 显示全部楼层

好帖[em17]
回复

使用道具 举报

发表于 2007-4-29 21:06 | 显示全部楼层

收藏,谢谢分享
回复

使用道具 举报

发表于 2007-5-12 22:49 | 显示全部楼层

不错不错,谢了

对autoCAD的VBA也有效

[em17]
回复

使用道具 举报

发表于 2007-5-14 23:57 | 显示全部楼层

收到,谢谢谢谢

回复

使用道具 举报

发表于 2007-6-17 21:30 | 显示全部楼层

收到,谢谢谢谢
回复

使用道具 举报

发表于 2007-9-24 21:59 | 显示全部楼层

真是厉害!!!收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 13:02 , Processed in 0.505945 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表