密码穷举破解EXCEL、WORD文档密码的论文-计算机理论论文

破解无线路由密码  时间:2021-04-20  阅读:()

穷举破解EXCEL、 WORD文档密码的论文计算机理论论文

摘要本文讨论了如何使用vb编程通过穷举法解除excel文档和word文档的密码。并在破解过程中加入了中断以方便用户随时中断破解过程。

关键字穷举法、解密、 excel文档、 word文档、密码excel和word提供了多种方法限制访问用户文档以免未经授权者的查看和更改。但在信息化的今天用户需要记忆的密码太多一旦密码丢失用户将无法打开或访问该文档给用户造成很大的损失。能否借助计算机的高速运行解开密码呢通过尝试笔者认为在无法弄清excel和word加密算法的情况下利用穷举法尝试解密文档是解密唯一的选择。

1 . 实现原理

本程序选用vb6.0编写并充分利用了off ice组件中的对象库穷举尝试各种口令达到解密文档的目的。

⑴巧用整数的取整及取余产生密码字符串excel和word文档密码可以是字母、数字、空格以及符号的任意组合最长可达15个字符且区分大小写。

本程序的破解过程利用一个两层循环产生选定字符的排列组合尝试密码 其中外层循环控制密码的位数 内层循环生成n位密码的所有排列组合。产生尝试密码的方法是将一个n位字符串密码password作为一个“数值” 该“数值”每个位上的“数字”属于选定字符范围且该“数值”与一个整数x一一对应并满足以下条件 0≤x

≤arraylenn-1 arraylen是选定密码字符范围的总字符数如仅选定数字时arraylen=10仅选定数字和小写字母时 arraylen=10+26=36 对x整除、取余n-1次对每次的余数y做以下操作 password = password + chararray(y) 注 chararray是存放选定字符的一维数组 最后做以下操作 password = chararray(x mod arraylen) +password产生的password就是整数x对应的n位字符串。 WwW. .coM

⑵利用vb的错误处理功能尝试口令破解

当运行程序尝试一个密码时用该密码打开文档 若密码错误则会产生运行错误。为此必须在尝试口令前使用on error语句打开一个错误处理程序 由于本程序是尝试各种口令 当一个口令错误时直接尝试下一个口令即可 因此应使用 “on error resumenext”语句。

那么如何得知找到口令了呢 vb有一个内部错误对象err 它的number属性中的值是用来确定发生错误的原因。在尝试一个口令后检查err. number中的值以确定该口令是否正确。

⑶破解过程中的中断

利用穷举法解密对系统资源的占用是十分惊人的在解密的过程中cpu的利用率几乎是100%若不加入解密过程中的中断计算机系统会处于一种假死机状态。为此在破解过程

的内循环中加入了doevents函数。 doevents函数提供了一种取消任务的简便方法 它将控制切换到操作环境内核。只要此环境中的所有应用程序都有机会响应待处理事件应用程序就又恢复控制。使用该函数的优点是不会使应用程序放弃焦点且后台事件能够得到有效处理。

2. 具体实现过程

编程实现时需要机器安装有vb应用程序及microsoft off ice组件。

⑴新建vb工程并对其初始化

新建一个vb工程取名get_password将启动窗体命名为frmmain。首先选择“工程”菜单中的“引用” 在“引用”对话框中选择“microsoft excel 10.0 object l ibrary”和

“microsoft word10.0 object l ibrary” 注意如果安装的是off ice2000或off ice97应该选择excel对象库和word对象库的9.0版或8.0版 。其次在“工程”菜单中“部件”对话框中选择添加“microsoft windows common controls -2.5(sp2)”和

“microsoft common dialog control 6.0” 以便在窗体设计中使用微调控件和对话框控件。

⑵在frmmain窗体上添加控件

在frmmain窗体上按照下图的位置添加表1中的控件然后根据表1修改每个对象的属性。表1 

序号 控件名称 控件属性及其属性值

1 frame name=frame1  caption=选择加密文件*.doc、 *.xls

2 frame name=frame2 caption=选定密码字符范围

3 frame name=frame3 caption=选择密码的长度

4 combobow name=combo1

5 commandbutton name=cmdbrowse caption=浏览

6 commandbutton name=cmdstartcrack=开始破解

7 commandbutton name=cmdquit caption=退出系统

8 checkbox name=chkdigital  caption=数字(10)

9 checkbox name=chklowercase caption=小写字母(26)

10 checkbox name=chkuppercase caption=大写字母(26)

1 1 checkbox name=chkspace caption=空格(1)

12 checkbox name=chkbracket caption=括号(6)

13 checkbox name=chkothers caption=其他oem字符(26)

14 textbox name=txtpasswordstartlong text=2

15 textbox name=txtpasswordendlong text=2

16 textbox name=text1

buddycontrol=txtpasswordstartlong max=15 min=

18 updown name=updown2 buddyproperty=text wrap=true increment=1buddycontrol=txtpasswordendlong max=15 min=1

19 commondialog name=dialog dialogtitle=请选择加密的excel或word文档f i lter=excel (*.xls)  word(*.doc) |*.xls;*.doc

20 label name=label 1  caption=破解进度

21 label name=label3 caption=从

22 label name=label5 caption=到

⑶为以上对象编写下列代码

为了便于理解程序中增加了适当的注释。option expl icitpr ivate sub cmdbrowse_cl ick()dialog. showopen 'show the dialogcombo1 .text = dialog.f i lename 'set the f i lename text box to the selectedfi lecombo1 . refreshend subpr ivate sub cmdquit_cl ick()endend subpr ivate sub cmdstartcrack_cl ick()static blnprocessing as booleandim wd as new word.appl ication, xls as new excel .appl icationdim openreturndim strpath, pass, strtemp, al l_char (100) as str ingdim j, k, password_start_long, password_end_long, arraylen as integerdim i , temp as longarraylen = 0 '数组初始化if chkdigital .value = 1 thenfor j = arraylen to arraylen + 9al l_char (j) = chr (asc("0") + j - arraylen)next jarraylen = arraylen + 10

end ifif chklowercase.value = 1 thenfor j = arraylen to arraylen + 25al l_char (j) = chr (asc("a") + j - arraylen)next jarraylen = arraylen + 26end ifif chkuppercase.value = 1 thenfor j = arraylen to arraylen + 25al l_char (j) = chr (asc("a") + j - arraylen)next jarraylen = arraylen + 26end ifif chkspace.value = 1 thenal l_char (arraylen) = " "arraylen = arraylen + 1end ifif chkbracket.value = 1 thenal l_char (arraylen) = " ("al l_char (arraylen+1) = ") "al l_char (arraylen+2) = " {"al l_char (arraylen+3) = "} "al l_char (arraylen+4) = " ["al l_char (arraylen+5) = "] "arraylen = arraylen + 6end ifif chkothers.value = 1 thenfor j = arraylen to arraylen + 6 '33 to 39al l_char (j) = chr (33 + j - arraylen)nextarraylen = arraylen + 7for j = arraylen to arraylen + 5 '42 to 47al l_char (j) = chr (42 + j - arraylen)next jarraylen = arraylen + 6

for j = arraylen to arraylen + 6 '58 to 64al l_char (j) = chr (58 + j - arraylen)next jarraylen = arraylen + 7al l_char (arraylen) = chr (92)arraylen = arraylen + 1for j = arraylen to arraylen + 2 '94 to 96al l_char (j) = chr (94 + j - arraylen)next jarraylen = arraylen + 3al l_char (arraylen) = chr (124)al l_char (arraylen+1) = chr (126)arraylen = arraylen + 2end ifif arraylen = 0 thenmsgbox "错误没有选择'密码使用的字符' ", , "请选择密码使用的字符范围. . . "exit subend ifif blnprocessing thenif msgbox("真的要中断解密过程吗 ", vbyesno, "用户中断任务") = vbyesthen blnprocessing = falseelsecmdstartcrack.caption = "中断破解"blnprocessing = truestrpath = combo1 .textif strpath = " " thenmsgbox "错误没有选择'需要解密的文件' ", , "请选择需要解密的文件. . . "exit subend ifstrpath = tr im(strpath)password_start_long = val (txtpasswordstartlong.text)password_end_long = val (txtpasswordendlong.text)if password_start_long > password_end_long thenpassword_start_long = val (txtpasswordendlong.text)password_end_long = val (txtpasswordstartlong.text)

end iflabel 1 .caption = "破解进度 "label 1 . refreshon error resume nextif ucase(r ight(strpath, 3) ) = "xls" thenfor k = password_start_long to password_end_long '破解excel开始for i = 0 to arraylen ^ k - 1pass = ""temp = ifor j = 1 to k - 1temp = temp \ arraylepass = al l_char (temp mod arraylen) + passnext jpass = pass + al l_char (i mod arraylen)set openreturn = xls.workbooks.open(f i lename:=strpath,password:=pass)text1 .text = pass '显示破解进度text1 . refreshif err. number <> 0 then '如果解密成功,打开文档,显示密码,退出过程err.clearelselabel 1 .caption = "文档密码 "text1 .text = passme. refreshxls.visible = truecmdstartcrack.mousepointer = 0cmdstartcrack.caption = "开始破解"blnprocessing = falseset xls = nothingexit subend ifdoeventsif not blnprocessing then exit fornext i

if not blnprocessing then exit fornext kxls.quitset xls = nothingelsefor k = password_start_long to password_end_long '破解word开始for i = 0 to arraylen ^ k - 1pass = ""temp = ifor j = 1 to k -temp = temp \ arraylenpass = al l_char (temp mod arraylen) + passnext jpass = pass + al l_char (i mod arraylen)openreturn = wd.documents.open(f i lename:=strpath,passworddocument:=pass)text1 .text = pass '显示破解进度text1 . refreshif err. number <> 0 then '如果解密成功,打开文档,显示密码,退出过程err.clearelse

'msgbox "word password"label 1 .caption = "文档密码 "text1 .text = passme. refreshwd.visible = truecmdstartcrack.mousepointer = 0cmdstartcrack.caption = "开始破解"blnprocessing = falseset wd = nothingexit subend ifdoeventsif not blnprocessing then exit for

next iif not blnprocessing then exit fornext kwd.quitset wd = nothingend ifcmdstartcrack.caption = "开始破解"if blnprocessing then msgbox "没有找到密码可能是密码位数不对! ", , "提示信息. . . "blnprocessing = falseend sub

3. 时间复杂度分析

一个算法的时间复杂度是指该算法的时间耗费是该算法所求解问题规模n的函数。根据前面讲的实现原理我们知道破解算法的时间耗费主要集中在尝试打开off ice文档上因此 当我们假设破解一个n位字符串密码且选定密码字符范围的总字符数为arraylen时该算法的时间复杂度是o(arraylen^n) 。即 当n确定后该算法的时间复杂度是n次方阶当arraylen确定后该算法的时间复杂度是指数阶。都是高数量级的时间复杂度。

4.说明

穷举法解密对系统资源的占用是十分惊人的在解密的过程中最好不要运行其他应用程序。如果安装有瑞星等杀毒软件应将杀毒软件的“off ice安全助手”去掉以便加快程序的运行速度。

该程序在winxp+off icexp+vb6.0环境下测试通过笔者随便测试了一个5位数字密码在p4机器上 8分钟左右即可解开口令。

参考文献

[1 ]王建华译. visual basic 6开发人员指南. 北京机械工业出版社 1999-全文完-

ProfitServer$34.56/年,5折限时促销/可选西班牙vps、荷兰vps、德国vps/不限制流量/支持自定义ISO

ProfitServer怎么样?ProfitServer好不好。ProfitServer是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对...

零途云月付31.9元起,香港cn2 gia线路

零途云是一家香港公司,主要产品香港cn2 gia线路、美国Cera线路云主机,美国CERA高防服务器,日本CN2直连服务器;同时提供香港多ip站群云服务器。即日起,购买香港/美国/日本云服务器享受9折优惠,新用户有优惠码:LINGTUYUN,使用即可打折。目前,零途云还推出性价比非常高香港多ip站群云服务器,有需要的,可以关注一下。零途云优惠码:优惠码:LINGTUYUN (新用户优惠,享受9折优...

收到几个新商家投稿(HostMem,无忧云,青云互联,TTcloud,亚洲云端,趣米云),一起发布排名不分先后

7月份已经过去了一半,炎热的夏季已经来临了,主机圈也开始了大量的夏季促销攻势,近期收到一些商家投稿信息,提供欧美或者亚洲地区主机产品,价格优惠,这里做一个汇总,方便大家参考,排名不分先后,以邮件顺序,少部分因为促销具有一定的时效性,价格已经恢复故暂未列出。HostMem部落曾经分享过一次Hostmem的信息,这是一家提供动态云和经典云的国人VPS商家,其中动态云硬件按小时计费,流量按需使用;而经典...

破解无线路由密码为你推荐
urlcsspracticescsscontributionsgraph支持ipad支持ipad图书馆学、情报学期刊投稿指南columnios5勒索病毒win7补丁求问win7 64位旗舰版怎么预防勒索病毒fusioncharts如何自定义FusionCharts图表上的工具提示?google中国地图强大的谷歌地图,为什么中国不用起来
论坛虚拟主机 com域名 网站备案域名查询 php主机租用 php空间租用 免费vps vir vultr美国与日本 免费名片模板 godaddy 服务器cpu性能排行 tk域名 湖南服务器托管 坐公交投2700元 php空间申请 搜索引擎提交入口 支付宝扫码领红包 web服务器是什么 shuang12 net空间 更多