|
本帖最后由 baomaboy 于 2024-9-12 10:34 编辑
放了好多年没发终于放成了垃圾代码,xls复合文档格式逐渐退出历史舞台被OpenXML格式代替,发下当年有关与xls文件Sheet密码的代码权当一段历史记忆。
一、简要说明:
都知道巨硬的工作表sheet密码保护做的比较敷衍,一个设定密码对应多个可用密码,例如密码:123
可以用下面很多组密码打开:
102
123
140
161
186
312
AAAAABBAAAA'
下面附件代码中列举了32768组工作表密码作为密码库,无论输入密码如何变化,都能在这32768组密码中找到对应解密码。
二、使用方法:
1、将加密过工作表的xls工作簿文件拖放到“工作表密码.vbs”上。
2、使用记事本打开“工作表密码.vbs”文件,明文修改其中的xls工作簿文件路径为实际路径。
3、解压密码:excelhome
三、注意事项:
附件代码和For i = 65 to 66不是一个原理,不要用来比较,没有可比性(原理就是2秒钟和2分钟的区别怎么来的)。
1、你所知道的解密过程:使用For i = 65 to 66方法遍历194560个密码逐个尝试Unprotect工作表(耗时2分钟)
2、你不知道的解密过程:使用For i = 65 to 66方法遍历194560个密码经过高低位取反逐位异或等运算后得到一个16进制的4位数新密码,使用此新密码逐个尝试Unprotect工作表(耗时2分钟)
3、本例使用的解密过程:二进制读取xls整体文件数据,并从中(需要知道密码所在特定位置)读取4位的16进制密码,将此读取到的密码与词典中预存的密码库(全部共32768组)中密文对比匹配迅速得到明文密码(耗时2秒)
4、如上所述本例方法与For i = 65 to 66方法是本质不同,一个是循环遍历暴力尝试,一个是直接读取密码保存位置密文内容,不要相提并论。
5、另外也不用教我.Protect DrawingObjects:=True, Scenarios:=True, AllowFiltering:=True, Contents:=True的方法,我只是想发一个新的方法,这方法和For i = 65 to 66的方法我自己都能找到。
四、相关讨论
1、Excel工作表密码速配(秒杀)_演示版(原SheetPassword的VB6编译版本)
https://club.excelhome.net/thread-737725-1-1.html
2、Excel保护密码的脆弱
https://club.excelhome.net/forum ... 9&page=1#pid5351019
补充1:附件压缩文件注释中的解压密码:excelhome 中el字母顺序颠倒了,特此更正。
|
|