Excel密码保护的解除方法与解除原理Word文档格式.docx
《Excel密码保护的解除方法与解除原理Word文档格式.docx》由会员分享,可在线阅读,更多相关《Excel密码保护的解除方法与解除原理Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
Fork=65To66
Forl=65To66:
Form=65To66:
Fori1=65To66
Fori2=65To66:
Fori3=65To66:
Fori4=65To66
Fori5=65To66:
Fori6=65To66:
Forn=32To126
ActiveSheet.UnprotectChr(i)&
Chr(j)&
Chr(k)&
_
Chr(l)&
Chr(m)&
Chr(i1)&
Chr(i2)&
Chr(i3)&
Chr(i4)&
Chr(i5)&
Chr(i6)&
Chr(n)
IfActiveSheet.ProtectContents=FalseThen
MsgBox"
Oneusablepasswordis"
&
Chr(i)&
Chr(j)&
Chr(k)&
Chr(l)&
Chr(m)&
Chr(i1)&
Chr(i2)&
Chr(i3)&
Chr(i4)&
Chr(i5)&
Chr(i6)&
ActiveWorkbook.Sheets
(1).Select
Range("
a1"
).FormulaR1C1=Chr(i)&
ExitSub
EndIf
Next:
Next:
Next
EndSub
第三步:
再点击“宏”→“查看宏”,选择“宏名”下的“PasswordBreaker”并点击“执行”,密码就现形了(图4)。
第四步:
切换“审阅”选项卡,点击“撤消工作表保护”,然后输入密码即可解除锁定。
二、软件破解法
有许多专门为破解Excel各种密码而制作的软件,ExcelKey与AdvancedOfficePasswordRecovery就是其中的佼佼者。
它们的使用方法简单且破解速度极快。
1.ExcelKey
下载(下载地址:
2.AdvancedOfficePasswordRecovery
可以看出,用以上方法读出的密码完全不同,但它们确实均可以解除该工作表的密码保护,这实在是个有趣的问题。
在网上查找了许久,终于找到比较圆满的解释答案:
当Excel工作表采用密码保护时,就会生成一个16位(双字节)长hash值。
当输入密码进行验证时,真正进行比较的就是这个hash值。
事实上,有很多不同的密码都可以生成同样的hash值。
大家可以试试:
当你用“test”(不含双引号)作为Excel工作表保护密码,你同样可以用“zzyw”(同样不含双引号)这个密码进行解锁。
怎么样,神奇吧?
Excel对数据有很强的保护功能,可以对整个或部分数据隐藏、禁止复制和修改等,但有时候,由于忘记了密码,或者记不起以前自己到底做了哪些改动,这种保护反而会为难自己。
针对这种情况,我总结了几种解除保护的方法,供大家参考,并希望能够以此抛砖引玉。
一、解除单元格的保护
1.取消隐藏的行或列
被隐藏的行或列有一个明显的标志,那就是在行标题栏或列标题栏上有一条粗的黑线。
取消隐藏的行或列的方法有两种,一种是直接拖动隐藏处的行或列标题使之变宽,也可以选中包含隐藏区域的行或列,通过“格式”菜单中的行列项目输入非0数值调整行高或列宽,使数据有足够的空间显示出来;
另一种方法是选中包含隐藏内容的行或列区域,再通过“格式”菜单行列选项中的“取消隐藏”命令来恢复全部行列区域。
2.取消隐藏单元格或区域中的数据
为了不让他人直接看到单元格的内容,一种简单的方法就是把数据颜色设置成与背景色相同,这时我们只要拖选整个工作表即可让数据原形毕露;
如果用图片、矩形框之类的非字符内容将重要数据遮盖,需要先用拖选方式找出工作表中的图片位置,再将其移开,激活被遮住的单元格,一般在公式编辑栏中就会显示其内容。
若在单元格格式中使用了三个分号或空格之类的自定义格式,一般只要选中此单元格,在公式编辑栏中即可显示其内容,要想取消这种隐藏,可重新设置此单元格格式,在“数字”选项卡中选择“常规”即可。
如果选中怀疑有数据的单元格后并没有在公式编辑栏中显示数据,不一定它就真的没有数据,我们只要看一下单元格的格式能否设置,若不能的话说明工作表被保护,如果不用密码可以取消工作表保护的话,再在单元格格式设置中先查看数据格式是否为自定义,然后查看“保护”选项卡,看看是否已勾选了“隐藏”项,将这些都取消就可以知道单元格是否真的没有内容。
当然,如果在撤消工作表保护时需要密码的话,我们将无可奈何,除非用户设置的密码很简单,那我就告诉你一个秘密,当密码的形式是“*123*”或“*abc*”时,我们可以分别用“*333*”或“*ccc*”来破解,星号表示任意字符,到底是什么只有靠猜了,这种方法对工作表和工作簿保护的密码也适应。
3.取消单元格数据的只读属性
有时单元格中的数据虽然可见,但是我们既不能修改,也不能在当前工作表中复制,对于这种保护措施,取消的方法跟上面的第2点基本相同,只要取消单元格格式设置对话框中“保护”选项卡中的“锁定”一项即可。
当然还需要通过密码取消工作表的保护才行。
如果我们无法通过密码取消怎么办?
你可以将其复制粘贴到其他工作表中,再在新的工作表中进行修改。
二、解除工作表的保护
查看是否有被隐藏的工作表,若菜单中有“格式→工作表→取消隐藏”项,则可通过此项取消隐藏的工作表。
如果在菜单中也没有有效的“取消隐藏”项,仍然可能有被隐藏的工作表,这时我们可以任选一工作表右击,在弹出菜单中选择“查看代码”,然后在左窗格中的“MicrosoftExcel对象”列表中选择被隐藏的工作表,将其“Visible”属性值取“-1”退出即可,如图所示。
如果工作表被密码保护,则可复制当前表全部内容到另一张未保护的工作表中编辑。
三、VBA宏代码破解法:
第一步:
打开该文件,先解除默认的“宏禁用”状态,方法是点击工具栏下的“选项”状态按钮,打开“MicrosoftOffice安全选项”窗口,选择其中的“启用此内容”,“确定”退出(图2);
再点击“宏”→“查看宏”,选择“宏名”下的“PasswordBreaker”并点击“编辑”,打开“MicrosoftVisualBasic”编辑器,用如下内容替换右侧窗口中的所有代码:
Chr(i3)&
Chr(i)&
另一个能解除Excel工作表保护的VBA脚本
OptionExplicit
PublicSubAllInternalPasswords()
'
Breaksworksheetandworkbookstructurepasswords.BobMcCormick
probablyoriginatorofbasecodealgorithmmodifiedforcoverage
ofworkbookstructure/windowspasswordsandformultiplepasswords
NormanHarkerandJEMcGimpsey27-Dec-2002(Version1.1)
Modified2003-Apr-04byJEM:
Allmsgstoconstants,and
eliminateoneExitSub(Version1.1.1)
RevealshashedpasswordsNOToriginalpasswords
ConstDBLSPACEAsString=vbNewLine&
vbNewLine
ConstAUTHORSAsString=DBLSPACE&
vbNewLine&
_
"
AdaptedfromBobMcCormickbasecodeby"
NormanHarkerandJEMcGimpsey"
ConstHEADERAsString="
AllInternalPasswordsUserMessage"
ConstVERSIONAsString=DBLSPACE&
"
Version1.1.12003-Apr-04"
ConstREPBACKAsString=DBLSPACE&
Pleasereportfailure"
tothemicrosoft.public.excel.programmingnewsgroup."
ConstALLCLEARAsString=DBLSPACE&
Theworkbookshould"
nowbefreeofallpasswordprotection,somakesureyou:
DBLSPACE&
SAVEITNOW!
DBLSPACE&
andalso"
BACKUP!
BACKUP!
!
Also,rememberthatthepasswordwas"
putthereforareason.Don'
tstuffupcrucialformulas"
ordata."
Accessanduseofsomedata"
maybeanoffense.Ifindoubt,don'
t."
ConstMSGNOPWORDS1AsString="
Therewerenopasswordson"
sheets,orworkbookstructureorwindows."
AUTHORS&
VERSION
ConstMSGNOPWORDS2AsString="
Therewasnoprotectionto"
workbookstructureorwindows."
Proceedingtounprotectsheets."
ConstMSGTAKETIMEAsString="
AfterpressingOKbuttonthis"
willtakesometime."
Amountoftime"
dependsonhowmanydifferentpasswords,the"
passwords,andyourcomputer'
sspecification."
Justbepatient!
Makemeacoffee!
ConstMSGPWORDFOUND1AsString="
YouhadaWorksheet"
StructureorWindowsPasswordset."
Thepasswordfoundwas:
$$"
Noteitdownforpotentialfutureuseinotherworkbooksby"
thesamepersonwhosetthispassword."
Nowtocheckandclearotherpasswords."
ConstMSGPWORDFOUND2AsString="
passwordset."
Noteitdownforpotential"
futureuseinotherworkbooksbysamepersonwho"
setthispassword."
Nowtocheckandclear"
otherpasswords."
ConstMSGONLYONEAsString="
Onlystructure/windows"
protectedwiththepasswordthatwasjustfound."
ALLCLEAR&
VERSION&
REPBACK
Dimw1AsWorksheet,w2AsWorksheet
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger
DimmAsInteger,nAsInteger,i1AsInteger,i2AsInteger
Dimi3AsInteger,i4AsInteger,i5AsInteger,i6AsInteger
DimPWord1AsString
DimShTagAsBoolean,WinTagAsBoolean
Application.ScreenUpdating=False
WithActiveWorkbook
WinTag=.ProtectStructureOr.ProtectWindows
EndWith
ShTag=False
ForEachw1InWorksheets
ShTag=ShTagOrw1.ProtectContents
Nextw1
IfNotShTagAndNotWinTagThen
MsgBoxMSGNOPWORDS1,vbInformation,HEADER
ExitSub
EndIf
MsgBoxMSGTAKETIME,vbInformation,HEADER
IfNotWinTagThen
MsgBoxMSGNOPWORDS2,vbInformation,HEADER
Else
OnErrorResumeNext
Do'
dummydoloop
Fori=65To66:
Fork=65To66
Forl=65To66:
Fori1=65To66
Fori2=65To66:
Fori4=65To66
Fori5=65To66:
Forn=32To126
.UnprotectChr(i)&
Chr(l)&
Chr(i3)&
Chr(n)
If.ProtectStructure=FalseAnd_
.ProtectWindows=FalseThen
PWord1=Chr(i)&
Chr(m)&
Chr(i4)&
MsgBoxApplication.Substitute(MSGPWORDFOUND1,_
PWord1),vbInformation,HEADER
ExitDo'
Bypassallfor...nexts
Next:
Next
LoopUntilTrue
OnErrorGoTo0
IfWinTagAndNotShTagThen
MsgBoxMSGONLYONE,vbInformation,HEADER