以下是引用ttui在2007-4-24 9:45:00的发言:'*************************************************************************** '* '* 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代码肯定运行出错,就不要测试了 '* '* '*************************************************************************** 欢迎反馈
不错不错,谢了 [em23][em23][em23][em23][em23][em23][em24][em24][em24] |