>> 欢迎您, 傲气雄鹰: 重登陆 | 退出 | 注册 | 资料 | 设置 | 排行 | 新贴 | 精华 | 管理 | 帮助 首页

  小榕软件实验室
  刀光雪影
  破解OICQ的密码算法 (转)
发表文章 发表涂鸦
  回复数:38  点击数:1816 将此页发给您的朋友        
作者 主题: 破解OICQ的密码算法 (转) ( 页: 1 2 3 ) 回复 | 收藏 | 打印 | 篇末
爱学帅哥哦
级别:高级站友
威望:0
经验:0
货币:692
体力:55.9
来源:211.90.83.*
总发帖数:113
注册日期:2002-03-03
查看 邮件 主页 QQ 消息 引用 复制 下载 

编辑:风中飞花 来源:QQ俱乐部 类别:黑客教学 日期:2002.03.17 今日/总浏览: 136/136
  这篇文章和OICQ本身没有什么联系,我只是想讲一下程序破解的原理和方法,我在这里会尽量用易懂的语言来描述,如果你是一个初学者,那么,此文就是为你而写的。
我以OICQ99C 0820版为例,其它版本如OICQ2000 的破解方法基本上和此版本没有区别。
首先,在OICQ目录下,每个使用者号码下有一个叫matrix.cnt的文件,此文件的长度是20字节,它的内容就是此号码的原密码经过加密后对应的密文。要证明这一点非常容易,只要稍有一点电脑能力的人都可以证明,所以这里我就不费口舌了。在正式开始前,请用二进制编辑器打开此文件,熟悉一下内容。
启动OICQ,出现OICQ用户登录画面,选择你自己的号码,然后输入一个错误的密码,此时按CTRL+D进入SOFTICE画面,设置断点。我们事先应该都知道OICQ检查密码是否正确的工作原理,即:先用GetWindowText()来取得密码框中的密码字符串,将此字符串用其内定的算法进行加密,得出加密后的密文,然后从磁盘中读取matrix.cnt,与用户输入的密码的加密结果进行比较,如果相同,则用户输入的密码为正确密码。(或者先读文件,后读取密码框中的值)跟据这个原理,这们应该把断点设在readfile上,即输入:bpx readfile。返回程序界面,点击“登录”,出现SOFTICE的画面,指针停在KERNEL32!READFILE上。按一下F12跳过此函数,将进入OICQ的领空。
我们现在要做的就是特别注意转折语句,就是JZ,JNZ,JMP等第一个字符是J的语句。因为这们己经假设,程序中必定存在一行转折语句,当用户输入的是正解密码时,它跳转(或不跳转),而当用户输入错误密码时,它不跳转(或跳转)。小心地按F10单步执行代码,在出现转折语句处设下一断点(只是做一个记号),并且记录它们的跳转情况(榉岣徽咧滥睦镉斜匾露系愣睦锩挥斜匾钡匠绦虺鱿置苈氪砦蟮亩曰翱蛭埂?br> 这时候你可能己经花去了1分钟的时间。好的,现在输入正确的密码作为比较。同样单步地执行代码,你将看到上次你在跳转语句上作的记号。比较两次的跳转是否相同。
你将看到,当程序运行到这里时,前后两次的跳转方向不同:

...
00441C1B call 0046c256
00441C20 cmp eax, ebx
00441C22 jz 00441C28----->就是这里!
00441C24 mov esi, edi
...

分析一下这几个代码,它首先调用函数0046C256,然后比较EAX与EBX的值,如果EAX与EBX的值相同,就跳转。我们重新执行程序,发现当输入正确密码时,EAX=1,当输入错误密码时,EAX=0,而EBX总是0。所以,函数0046C256是一个可疑的函数!
按F8进入函数0046C256,我们要看看它做了什么工作。

:0046C256 mov eax, 004CD33C
:0046C25B call 00486B88
:0046C260 sub esp, 00000010
:0046C263 push esi
:0046C264 push edi
:0046C265 mov esi, ecx
:0046C267 mov eax, dword ptr [ebp+08]
:0046C26A and dword ptr [ebp-04], 00000000
:0046C26E push [eax-08]
:0046C271 push eax
:0046C272 lea eax, dword ptr [ebp-1C]
:0046C275 push eax
:0046C276 call 00456718
:0046C27B add esp, 0000000C
:0046C27E push 00000001
:0046C280 pop edi
:0046C281 cmp dword ptr [esi+04], edi
:0046C284 jbe 0046C29E
:0046C286 lea eax, dword ptr [ebp-1C]
:0046C289 push 00000010
:0046C28B push eax
:0046C28C lea eax, dword ptr [ebp-1C]
:0046C28F push eax
:0046C290 call 00456718
:0046C295 add esp, 0000000C
:0046C298 inc edi
:0046C299 cmp edi, dword ptr [esi+04]
:0046C29C jb 0046C286
:0046C29E int 03
:0046C29F mov byte ptr [eax], 6A
:0046C2A2 adc byte ptr [ebp+5056E445], cl
:0046C2A8 call 00487900
:0046C2AD mov esi, eax
:0046C2AF add esp, 0000000C
:0046C2B2 neg esi
:0046C2B4 sbb esi, esi
:0046C2B6 or dword ptr [ebp-04], FFFFFFFF
:0046C2BA lea ecx, dword ptr [ebp+08]
:0046C2BD inc esi
:0046C2BE call 004A0665
:0046C2C3 int 03
:0046C2C4 dec ebp
:0046C2C5 hlt
:0046C2C6 mov eax, esi
:0046C2C8 pop edi
:0046C2C9 pop esi
:0046C2CA mov dword ptr fs00000000], ecx
:0046C2D1 leave
:0046C2D2 ret 0004
...

按F10单步执行。我们发现在这个函数中有一个非常有意思的地方:

:0046C286 lea eax, dword ptr [ebp-1C]
:0046C289 push 00000010
:0046C28B push eax
:0046C28C lea eax, dword ptr [ebp-1C]
:0046C28F push eax
:0046C290 call 00456718
:0046C295 add esp, 0000000C
:0046C298 inc edi
:0046C299 cmp edi, dword ptr [esi+04]
:0046C29C jb 0046C286

程序反复地执行这些代码!!
为了能看的更清楚些,我用C++语言来简述这几个语句:
for( long i=0 ; i< *(esi+04) ; i++)
{
eax=*(ebp-1c);
调用函数 00456718;
}

就是说,函数00456718要被调用很多次,这个次数就是ESI+04的值,用D ESI+04命令来查看其值,天哪!这不是matrix.cnt的内容吗?(你原先在二进制编辑器中己经打开过此文件并且看到过它的内容)而ESI+04正是matrix.cnt的前4个字节!我们现在有足够的理由相信,密码被加密成了128位(即16个字节),且加密函数存在于函数00456718中!
抬起眼睛看一下,在函数0046C256中,一开始也调用了一次00456718函数!为了再进一步地证实我们的设想,让我们再重新运行OICQ,输入一个错误的密码,但这次你输入的密码长度最好和正确密码的长度相同,在第一次调用00456718前设下一个断点:

:0046C265 mov esi, ecx
:0046C267 mov eax, dword ptr [ebp+08]
:0046C26A and dword ptr [ebp-04], 00000000----->在这里设一个断点
:0046C26E push [eax-08]
:0046C271 push eax
:0046C272 lea eax, dword ptr [ebp-1C]
:0046C275 push eax
:0046C276 call 00456718

当程序运行至断点处时,查看各个寄存器的值,你在EAX里看到了什么?是的,EAX里面是你输入的密码,你用这个密码进行登录,程序将出现密码错误的信息,但是,如果你此时修改一下EAX的值,把它改为正确的密码,你又惊喜地发现:OICQ己经成功地登录了!注意:只要你稍微留意一下,EAX-8的值正是密码的长度。以上的事实己经证明了:函数00456718就是OICQ的加密函数。

跟据种种迹象,这个函数具体是什么算法,学过密码学的朋友己经不用往下看了。但我们还必须深入证实。
按F8,将看到此函数:

:00456718 push ebp
:00456719 mov ebp, esp
:0045671B sub esp, 0000005C
:0045671E lea eax, dword ptr [ebp-5C]
:00456721 push eax
:00456722 call 00455A6E
:00456727 push [ebp+10]
:0045672A lea eax, dword ptr [ebp-5C]
:0045672D push [ebp+0C]
:00456730 push eax
:00456731 call 00455AA9
:00456736 lea eax, dword ptr [ebp-5C]
:00456739 push eax
:0045673A push [ebp+08]
:0045673D call 004565FD
:00456742 add esp, 00000018
:00456745 leave
:00456746 ret

函数看上去很短小,但它又调用了三个函数。查看第一个函数:

:00455A6E push esi
:00455A6F mov esi, dword ptr [esp+08]
:00455A73 push 0000005C
:00455A75 push 00000000
:00455A77 push esi
:00455A78 call 00486FD0
:00455A7D and dword ptr [esi+10], 00000000
:00455A81 and dword ptr [esi+14], 00000000
:00455A85 and dword ptr [esi+58], 00000000
:00455A89 add esp, 0000000C
:00455A8C mov dword ptr [esi], 67452301
:00455A92 mov [esi+04], EFCDAB89
:00455A99 mov [esi+08], 98BADCFE
:00455AA0 mov [esi+0C], 10325476
:00455AA7 pop esi
:00455AA8 ret

看到标有红色的四个语句了吗?加密函数在一开始设置了4个32位的常数!!接下来,在函数00455D5A中连续鱿至?4次诸如:

00455D60 mov edi, dword ptr [ebp+08]
00455D63 xor ebx, edx
00455D65 add ebx, dword ptr [eax]
00455D67 lea edi, dword ptr [edi+ebx-28955B88] ;注意,这是个常数!
00455D6E mov ebx, edi

形式的语句。至此为止,OICQ用的是什么加密算法,己经是不言而明了。

编辑: 风中飞花
来源: QQ俱乐部

小城天空试过了。不错啊


编辑 删除 发表时间发表于 2002-03-18.17:09:12   MSIE 6.0 Windows XPIP: 已记录
hataso帅哥哦
级别:一般站友
威望:0
经验:0
货币:
体力:
来源:湖南
总发帖数:13
注册日期:2002-03-18
查看 邮件 主页 QQ 消息 引用 复制 下载 

等我实验过在来谢你(前提是要行得通)!

编辑 删除 发表时间发表于 2002-03-18.17:38:33   MSIE 6.0 Windows XPIP: 已记录
eheart帅哥哦
级别:新手上路
威望:0
经验:0
货币:
体力:
来源:湖北
总发帖数:8
注册日期:2002-03-14
查看 邮件 主页 QQ 消息 引用 复制 下载 

我用的是QQ2000b Build 0710,根本没有matrix.cnt文件
----------------------------------------------------------
万维兴亡,匹夫有责

编辑 删除 发表时间发表于 2002-03-18.17:43:44   MSIE 6.0 Windows 2000IP: 已记录
〖醉〗帅哥哦
级别:高级站友
威望:0
经验:0
货币:0
体力:0.5
来源:辽宁
总发帖数:157
注册日期:2002-03-17
查看 邮件 主页 QQ 消息 引用 复制 下载 

不明白!
----------------------------------------------------------
喝酒就没数,开车就上树,打架没次数,晚上哪都住,手机没屏幕,晚上看不到路,尿尿得数数,,遇到美女也忍不住,找个女朋友不知道咋处,见面就把她搂住,最后女友和我说不,有时我也无助,很多女孩都说我这么做实在太酷.

编辑 删除 发表时间发表于 2002-03-18.18:32:56   MSIE 5.0 Windows 98IP: 已记录
libertine帅哥哦
级别:开国大老
威望:0
经验:0
货币:1715
体力:57.6
来源:192.168.0.1
总发帖数:2365
注册日期:2002-02-12
查看 邮件 主页 QQ 消息 引用 复制 下载 

很好,我成功了
----------------------------------------------------------
http://www.adhacker.net/

编辑 删除 发表时间发表于 2002-03-18.18:59:34   MSIE 6.0 Windows XPIP: 已记录
BEYOND帅哥哦
级别:长 老 级
威望:0
经验:0
货币:137
体力:4.9
来源:218.24.128.*
总发帖数:633
注册日期:2002-02-07
查看 邮件 主页 QQ 消息 引用 复制 下载 

二进制编辑器
这个上哪弄?
----------------------------------------------------------
『刀』',◥◣↘╬小榕╬↙◢◤',『光』        『刀』',◥◣↘╬小榕╬↙◢◤',『光』
','〃,〃◢◤ 黑██客 ◥◣','〃,〃       ','〃,〃◢◤ 黑██客 ◥◣','〃,〃
','〃,〃◥◣红◥██◤客◢◤','〃,〃       ','〃,〃◥◣红◥██◤客◢◤','〃,〃
『雪』''◢◤↗蓝◥◤客↖◥◣''『影』        『雪』''◢◤↗蓝◥◤客↖◥◣''『影』

编辑 删除 发表时间发表于 2002-03-18.19:23:03   MSIE 5.01 Windows 2000IP: 已记录
baofeng帅哥哦
级别:老 站 友
威望:0
经验:0
货币:599
体力:23.3
来源:202.101.203.*
总发帖数:350
注册日期:2001-05-16
查看 邮件 主页 QQ 消息 引用 复制 下载 

我看了,很谢谢你把它转过来!!!
----------------------------------------------------------
I 'm like win32sdk.
http://win32sdk.com

编辑 删除 发表时间发表于 2002-03-22.18:24:35   MSIE 6.0 Windows MeIP: 已记录
小城天空帅哥哦
级别:精灵王
威望:0
经验:1
货币:1970
体力:100
来源:211.90.83.*
总发帖数:434
注册日期:2002-03-17
查看 邮件 主页 QQ 消息 引用 复制 下载 

二进制编辑器随便找啊,那个都行的。

编辑 删除 发表时间发表于 2002-03-22.19:33:48   MSIE 5.01 Windows 2000IP: 已记录
〖醉〗帅哥哦
级别:高级站友
威望:0
经验:0
货币:0
体力:0.5
来源:辽宁
总发帖数:157
注册日期:2002-03-17
查看 邮件 主页 QQ 消息 引用 复制 下载 

这个方法真的有用吗?
----------------------------------------------------------
喝酒就没数,开车就上树,打架没次数,晚上哪都住,手机没屏幕,晚上看不到路,尿尿得数数,,遇到美女也忍不住,找个女朋友不知道咋处,见面就把她搂住,最后女友和我说不,有时我也无助,很多女孩都说我这么做实在太酷.

编辑 删除 发表时间发表于 2002-03-22.19:45:05   MSIE 5.0 Windows 98IP: 已记录
小城天空帅哥哦
级别:精灵王
威望:0
经验:1
货币:1970
体力:100
来源:211.90.83.*
总发帖数:434
注册日期:2002-03-17
查看 邮件 主页 QQ 消息 引用 复制 下载 

方法是死的,重要是道理要明白,如果你对QQ通讯的xianyi很清楚,又精通VC的话,就能做个发水消息的东东了。呵呵,谁会教我啊

编辑 删除 发表时间发表于 2002-03-22.19:49:36   MSIE 5.01 Windows 2000IP: 已记录
艾慧帅哥哦
级别:一般站友
威望:0
经验:0
货币:150
体力:32.2
来源:上海
总发帖数:14
注册日期:2002-01-28
查看 邮件 主页 QQ 消息 引用 复制 下载 

QQ2000b Build 得要到服务器上去验证密码了,直接跳转好象行不通嘛!

编辑 删除 发表时间发表于 2002-03-22.20:02:42   MSIE 5.0 Windows 98IP: 已记录
xiaojun帅哥哦
级别:高级站友
威望:0
经验:0
货币:275
体力:11
来源:江苏
总发帖数:158
注册日期:2001-06-01
查看 邮件 主页 QQ 消息 引用 复制 下载 

ok

编辑 删除 发表时间发表于 2002-03-23.20:53:47   MSIE 6.0 Windows 2000IP: 已记录
天上飞帅哥哦
级别:新手上路
威望:0
经验:0
货币:141
体力:31.7
来源:10.79.223.*
总发帖数:9
注册日期:2002-03-01
查看 邮件 主页 QQ 消息 引用 复制 下载 

我的也不行

编辑 删除 发表时间发表于 2002-03-23.21:00:26   MSIE 5.01 Windows 2000IP: 已记录
ijlfmvnx帅哥哦
级别:中级站友
威望:0
经验:0
货币:32
体力:1.1
来源:浙江
总发帖数:59
注册日期:2002-03-19
查看 邮件 主页 QQ 消息 引用 复制 下载 

不好用啊

编辑 删除 发表时间发表于 2002-03-25.12:19:09   MSIE 5.0 Windows 98IP: 已记录
黑色星期五帅哥哦
级别:中级站友
威望:0
经验:0
货币:209
体力:33.8
来源:黑龙江
总发帖数:34
注册日期:2002-03-25
查看 邮件 主页 QQ 消息 引用 复制 下载 

哈哈你是骇客
我是菜鸟
----------------------------------------------------------
******

编辑 删除 发表时间发表于 2002-03-25.21:12:35   MSIE 5.0 Windows 98IP: 已记录
最弱帅哥哦
级别:新手上路
威望:0
经验:0
货币:118
体力:30.6
来源:山西
总发帖数:6
注册日期:2002-03-24
查看 邮件 主页 QQ 消息 引用 复制 下载 

信念+执着=成功
不明白*不会英语=菜小鸟
----------------------------------------------------------
我行,我素。我最弱!

编辑 删除 发表时间发表于 2002-03-25.21:28:46   MSIE 5.0 Windows 98IP: 已记录
选择回复        
 快速回复主题: >>>高级模式
  用户名: 没有注册? 密码: 忘记密码?
记住密码
HTML语法
禁止IDB代码
禁止表情字符

[按 Ctrl+Enter 快捷键可直接提交帖子]
 投票评分: 共 0 票  
所有时间均为: 北京时间 ↑TOP [第 1 2 3 页]
关闭主题 拉前主题 移动主题 主题置顶 取消置顶 总固顶主题 取消总固顶 加入精华 移出精华 删除主题