请教高人讲解一下破解密码的原理?大致的几
QQ密码本地破解的原理和方法
“本地破解”是指盗号者在本机中进行的QQ破解操作。这种破解方式分为两种情况:一种是盗号者所使用的电脑曾经登录过要破解的QQ号;另一种是别人的电脑中曾经登录过所要破解的QQ号,而盗号者通过黑客手段把相关的登录信息文件头了过来(在此我们不谈如何去偷,只假设盗号者已经获得了QQ的相关信息文件)。
本地破解的奥秘
QQ在使用时,会将用户的帐号、密码 、好友列表、个人信息和聊天记录等保存在本地电脑的QQ安装目录中(默认为C:\Program Files\Tecent),并且按照QQ安装目录分类(图1)。 对于QQ密码的本地破解,其实就是破解QQ登录后保存在...全部
QQ密码本地破解的原理和方法
“本地破解”是指盗号者在本机中进行的QQ破解操作。这种破解方式分为两种情况:一种是盗号者所使用的电脑曾经登录过要破解的QQ号;另一种是别人的电脑中曾经登录过所要破解的QQ号,而盗号者通过黑客手段把相关的登录信息文件头了过来(在此我们不谈如何去偷,只假设盗号者已经获得了QQ的相关信息文件)。
本地破解的奥秘
QQ在使用时,会将用户的帐号、密码 、好友列表、个人信息和聊天记录等保存在本地电脑的QQ安装目录中(默认为C:\Program Files\Tecent),并且按照QQ安装目录分类(图1)。
对于QQ密码的本地破解,其实就是破解QQ登录后保存在本地硬盘上的密码信息文件。
图1
虽说这些文件都是经过专业加密处理的,但依然有人开发出了能够读取其内容的破解软件(连微软老大的Windows操作系统都逃脱不了被破解的命运,更何况小小的QQ)。
参考文献:
OICQ本地密码破解软件的原理介绍
腾讯公司就此文提醒大家注意: OICQ密码的确几乎是明文存放的,不过只在自动登陆时成立。当OICQ设置成自动登陆后密码只是经过了简单的可逆变形就存到一个文件里,很容易可以算出来。
如果当前帐号可以自动登陆,任何人点OICQ的图标就可以直接登陆进这个号码了,甚至连密码都不用知道,根本就不需要破密码,密码已经没多大意义了。自动登陆不适合在网吧内使用,它是最不安全的,只适合在电脑使用者固定的情况下使用。
作者言:本文测试环境为OICQ 99C(作者的开发的软件对2000同时可以起作用,这回我真晕了!),只能破解本地最后使用的一个OICQ号码,且要求该号码选择过“下次登陆不显示登陆框”参数。
另外,本站提供一个测试程序,可以在瞬间找到这个OICQ号码的密码!
因为公司里的空气实在令我感到窒息,而本来就不想去完善那个所谓的无线电子邮局的我,正好找到一个可以不干活的理由。
其实,我并非是真的不想干活,主要是因为分配给我的活向来就不称我的心意。刚开始时打算做些编程开发的事情,但是我却被分配去做网站,真是大材小用嘛!然后,又是去做一些理论上的研究。等到我已经把编程都淡忘的时候,编程开发的事情终于来了,而我却已经忘了怎样编程,更可气的是,这些活又催得那么紧,哎!真不知道自己能不能干完!:(
头晕目眩,正在这时,一个网友发来一条消息,不知道为什么,我突发奇想,打算研究一下OICQ的密码破解方法,因为据我所知,目前还没有什么有效的OICQ密码破解工具呢!以前比较有名的就要算OICQPassOver和OIQHACK了,前者使用的是穷举的方法,对付一些比较弱智的密码还可以,但是象~!@qaz&165这样的密码呢?真不知道哪辈子会算出来?!至于后者,虽然可以远程破解密码,但是使用的无非还是穷举,效果自然也是不敢恭维了!这两者的区别在于前者只能是本地破解,可以在离线状态下进行,而后者随然可以远程破解,但是必须在连线状态,另外,要编制这样的程序必须非常清楚的了解OICQ的协议,所以对于一般人来说,想知道这个破解的原理恐怕是很难的。
而我下面将要介绍给大家的这种方法,相信凡是有一点计算机常识的人都是可以看得懂得的。好的,下面我就向大家介绍OICQ的加密机制的多么脆弱,多么不堪一击!本文的OICQ测试版本是OICQ 99C Build 0820,至于其它版本是否存在相同问题就不得而知了。
我推崇的是实例教学,先看一个例子,这是默认安装完OICQ后产生的一个文件,就是它,包含了OICQ使用者的密码信息,对Win9X而言,路径是C:\Program Files\Oicq\dat\ g。
我们用UltraEdit打开它:
滔葡扇缮 30906766
能看得懂吗?看得懂才怪,呵呵。。。我们选择Edit->Hex Edit,这下呢?有点眉目吧?我真心向大家推荐这个十六进制编辑器---UltraEdit,因为它的功能实在是太强大了。
知道我为什么知道是这个文件包含OICQ使用者的密码信息吗?就是靠的这个软件,因为它有实时文件监视功能哦!用UltraEdit打开OICQ目录中你认为可能包含使用者密码信息的文件,然后执行一次修改密码的操作,之后返回UltraEdit主界面,看到什么?是不是提示有文件被改动了,呵呵。
。。这就是包含密码信息的文件啦!怎么样?看到它的强大功能了吧?!
慢慢发掘吧,应该有很多的说!~这个文件的十六进制格式如下:
00000000h: 01 00 00 00 08 00 00 00 CC CF C6 CF C9 C8 C9 C9 ; 。
。。。。。。。滔葡扇缮
00000010h: 01 00 00 00 08 00 00 00 33 30 39 30 36 37 36 36 ; 。。。。。。。。30906766
经过分析(呵呵。
。。我喜欢分析,所以我叫analysist),我大概清楚这个文件的格式了,第一个01应该表示这是最后使用的OICQ号码,也就是最新使用的OICQ号码。随后的00 00 00应该是分割符, 然后的08表示密码是8位的,然后又是分割符,然后是加密的密码,然后的01表示本文件包含1个OICQ号码,然后是分割符, 然后的08表示OICQ号码是8位的,然后是分割符,接着就是OICQ号码的ASCII值。
其实, 如果你多看几个这样的文件的话,可能会看到包含多个OICQ号码的情况,其实情况大同小异,所以这里就以这个文件, 这种形式来分析了,其他情况可以类推。
经过进一步的分析,终于搞明白了这个加密的机制。
首先要说的是,30906766是我的OICQ号码, 测试密码是30906766,请看下面:
3 CC 33
0 CF 30
9 C6 39
0 CF 30
6 C9 36
7 C8 37
6 C9 36
6 C9 36
看到了吗?第二行的0和第四行的0对应的CF是相同的,因此,直觉告诉我这是一种对称加密方法。
再分析一下,0到9递增,CF到C6递减,呵呵。。。和是一样的,不会那么简单吧?再试一下其它的密码,如下:
00000000h: 01 00 00 00 08 00 00 00 9E 9D 9C 9B 9A 99 98 97 ; 。
。。。。。。。????????
00000010h: 01 00 00 00 08 00 00 00 33 30 39 30 36 37 36 36 ; 。。。。。。。。30906766
验证一下:
a 9E 61
b 9D 62
c 9C 63
d 9B 64
e 9A 65
f 99 66
g 98 67
h 97 68
不对了!那么,会是什么加密方法呢?我没灰心,想到了ASCII值,而ASCII值也是递增的,不会是后2项的和吧?经过对数字,小写字母,大写字母和特殊字符的验证,事实证明我的推断是正确的。
呵呵。。。原来OICQ的加密机制如此脆弱,如此不堪一击啊!
这样,只要你能访问到这个文件,那么得到其中的OICQ密码是不是如探囊取物一般容易呢?:P 当然,你只能拿到最后使用的用户的密码,但是这不就很好了吗?!
我曾试过手工修改密码来登陆,结果出现的情况和我在《BBS2000和BBS3000中存在的隐患》中描述的一样,但是因为我没有做进一步的研究(主要是太冷了!),所以我就没有多少发言权了,也许只要你经过一些简单的测试,就能发现服务器会自动把你指定的OICQ的密码发给你也说不定哦!~
破解原理(2)
再给你讲一下机器码,所谓的机器码。
就是你看到的那些个十六进制数据了。还记的它们与汇编指令是一一对应的吗?
以下这几个是爆破时要用到的,其它的如果感兴趣,可自行查看相关资料:
JZ=74;JNZ=75;JMP=EB;Nop=90
爆破的时候,只要对以上机器码进行相应的修改就行了,比如第一种情况的时候,可以将74修改为EB,即将JZ修改为JMP。
而第二种情况,责需将75修改为90,即将JNZ修改为Nop。
由于本章只讲原理,具体一点的。如怎样找到关键跳转等,我们在下一章中再讲。(一个砖头飞了上来!嘿嘿,这次被俺接到了)
上边讲了爆破的原理,你需要明白的是。
爆破只是你学习Crack的开始,是很简单的手段。刚入门的时候可以玩玩儿,但希望你不要就此不前!
(嘿嘿,再说了。人家的软件中不是都说了嘛,不准对其进行逆向修改。你动了人家的身子,怎么能不买帐呢? )
偶就不喜欢爆破,做不出注册机也要找出注册码。
否则我就不会去注册这个软件,既然想不掏钱,就要靠你自己的本事。(等以后我有钱了,会考虑去注册那些优秀的共享软件的 )。所以,从某种意义上来说,我是一个正人君子
其实要找到注册码并不是一件多么难的事,我是指你所针对的软件不太那个的时候 不过你无需惧怕。
刚才我们说爆破的时候不提到过关键CALL吗?一般情况下,这个关键CALL就是对两个注册码(一个是软件自身通过你的注册名或机器什么的计算出来的正确的注册码,令一个就是你输入的错误的注册码)进行比较。
我前边提到过,CALL之前一般会把所用到的数据先放到一个地方,CALL过去的时候再从这些地方把先前放入的数据取出来,进行相应的处理。这个关键CALL也是这样,在CALL之前,一般会把那两个注册码放到堆栈或某个寄存器中。
嘿嘿,我们只要在调试器中,单步执行到该CALL,在未进去之前通过CALL之前的指令判断其将正确的和不正确的注册码放到哪里了。然后再用相应指令进行查看就成了,我说过不难的。
下面列出两个最常见的情况(可参考相关教程):
no。
1
mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上,该条指令也可以是pop edx
call 00?????? 关键call
test eax eax
jz(jnz)或jne(je) 关键跳转
看明白了吧,在关键CALL之前,软件会把两个注册码分别放入eax和edx中,你只要在CALL处下d eax或d edx就能看到正确的注册码了。
no。2
mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上,该条指令也可以是pop edx
call 00?????? 关键call
jne(je) 关键跳转
以上两种情况最为常见,而那些个不太常见的情况,我们这里就不再提了。
到下下一章的时候,我会给你讲相关方法的。。。
关于查找软件注册码的部分,就到这里。具体内容,下下一章咱们再说。(不是说了吗?我以经可以接到你的砖头了,干嘛还要丢呢? )
最后,再来说最后的所谓的高级阶段,如果你相信自己。
并且热爱Crack,那么你一定会熬到这个阶段的,只是时间因人而异。
其实分析软件的算法,是有好多技巧在里面的。呵呵,最起码我刚开始的时候就摸不着头脑,那么多CALL,每个看起来,都很重要,都追一遍?结果连好多 API都被追了进去。
等你自己真正用心分析了一个软件的算法,并写出了注册机后。你就会明白其中的道理了,我们下下下一章再说。(大哥,你不是吧,连你家太阳能都丢过来了 )。收起