• 标 题:oicq build 0425 的不完全破解 (3千字)
  • 作 者:小楼
  • 时 间:2000-5-28 20:25:49
  • 链 接:http://bbs.pediy.com

oicq build 0425 的不完全破解

        申明:本文单纯从程序角度谈了oicq build 0425 的破解问题。欢
              迎阅读、指教。但本人对由使用本文进行的一切活动不负任
              何责任。


    如果你可以得到某人的oicq谈话记录文件,而又对他与其好友的谈话记录感兴趣,你会如何呢?用oicq谈话阅读器?可惜它不支持0220以后的版本;再说其作者也会叫你用“穷举法”来得到密码,如果设置的密码在9位以上,用“穷举法”的时间以日、月计,你就别想了。
    其实我们可以毫不费力的进入观看。
    首先将谈话文件夹(如7145021)放入oicq安装目录下,再在oicq\dat目录下用ultraedit打开oicq2000.cfg,在 00000009h处记录了所使用帐号的个数,后面即为帐号,只要按照“ 07 00 00 00 帐号的ascii码”形式(如 07 00 00 00 31 31 32 35 34 31 34) 加入即可。若帐号小于7位,还需用 20 补足位数(如 07 00 00 00 31 31 32 35 34 31 20)。
    这样你运行oicq build 0425 后,要看的帐号就出现了,选它,随便填个密码。用trw bpx hmemcpy设断后,按下“登录”,程序为trw阻断。
bd    中断断点
f12  按44下,改
f10  走,
直到
:004370E7 E808A6FFFF              call 004316F4
:004370EC 3BC3                    cmp eax, ebx  <-- ebx恒为0,
                                                  eax可为0或1
:004370EE 0F858F010000            jne 00437283  <-- 不跳就失败
:004370F4 A130D34E00              mov eax, dword ptr [004ED330]
:004370F9 8945E4                  mov dword ptr [ebp-1C], eax
:004370FC 8D45E4                  lea eax, dword ptr [ebp-1C]

* Possible Reference to String Resource ID=33357: "揺?
!焮U勂
"
                                  |
:004370FF 684D820000              push 0000824D
:00437104 50                      push eax
:00437105 C645FC04                mov [ebp-04], 04
:00437109 E8B707FFFF              call 004278C5
:0043710E 59                      pop ecx
:0043710F 59                      pop ecx
:00437110 53                      push ebx
:00437111 6804010000              push 00000104
:00437116 FF75E4                  push [ebp-1C]
:00437119 E830650500              call 0048D64E  <--密码错误画面
所以将    004370EE 0F858F010000            jne 00437283
改为      004370EE 0F848F010000            je  00437283
后,你就可以进入这一帐号了。

    如果还被设置了本地密码,你就先只能随便填个密码喽。用bpx hmemxpy设断后,f12要按56下,直到你来到
:00432E5D 8D4DF0                  lea ecx, dword ptr [ebp-10]
:00432E60 7525                    jne 00432E87  <-- 不跳就失败,所以要让它跳
:00432E62 E864350500              call 004863CB
:00432E67 E954FFFFFF              jmp 00432DC0
这样你就可以进入他的帐号,看看它的聊天记录,他的好友名单......

    所以我要说,腾讯公司是个不负责任的公司。它应该将输入的密码换算后,作为密钥来解开被加密的谈话记录,而不是仅将其作直接比较。

    关于密码的破解,实在让我感到烦琐,所以就没有去深追。有兴趣的朋友可以参考如下:
1、:0046E987 F3      repz 
  :0046E988 A7      cmpsd  <--edi放置了经变换后的输入密码,esi放置了加密后正确密码值。共比较16位,两者相等表示密码正确。
  :0046E989 7427    je 0046E9B2

2、整个密码的最重要的变形、换算在
:00442B40 030E    add ecx, dword ptr [esi]
.....
:0044343B C3      ret  <--很有规律,但也太烦

3、由此得到的数字又经
:004434D5 E821F6FFFF              call 00442AFB  <--f8进入,即为第3步
:004434DA 8B44241C                mov eax, dword ptr [esp+1C]
:004434DE 8B0E                    mov ecx, dword ptr [esi]
:004434E0 83C40C                  add esp, 0000000C
:004434E3 8BD1                    mov edx, ecx
......
:00443556 C3                      ret
变换,得到第2步中的edi值。