【文章标题】: 某QQ聊天记录察看器 注册流程分析
【文章作者】: jzfcf
【作者邮箱】: jzfcf@126.com
【作者主页】: http://nice-crack.af99.com
【作者QQ号】:
【软件名称】: QQ聊天记录察看器 5.3
【软件大小】: 648K
【下载地址】: http://www.pcsoft.com.cn/soft/Soft_3407.htm
【加壳方式】: 无壳
【保护方式】: 未保护
【编写语言】: Delphi
【使用工具】: OD
【操作平台】: XP/2000/2003
【软件介绍】: 这是一款查看QQ聊天记录的软件,只能试用2次,不爽!
【作者声明】: 只是感兴趣,没有其他目的。
--------------------------------------------------------------------------------
【详细过程】
这个软件的破解过程稍微简单了点,给新手当入门教程,呵呵!
进入正题,OD打开软件,选择好QQ的安装目录和QQ号,点查看按钮,弹出一个注册框,提示只能试用2次,汗...,下MessageBox 断点(command窗口输入 bp MessageBoxA),随便填入注册码,注册,断下来后,Alt+F9返回.停在 0046EFAD 这,以上就是显示注册码错误的提示框,往上还有一个MessageBox,猜想这肯定是注册成功的提示框,
我们可以验证一下,在0046EF57这个地址下断,重新点注册,
断下后,修改Z标志位,出现注册成功了,呵呵.那上面那个call就是关键call了!
0046EF04 /. 55 push ebp
0046EF05 |. 8BEC mov ebp, esp
0046EF07 |. 83C4 F4 add esp, -0C
0046EF0A |. 33C9 xor ecx, ecx
0046EF0C |. 894D F4 mov dword ptr [ebp-C], ecx
0046EF0F |. 8955 F8 mov dword ptr [ebp-8], edx
0046EF12 |. 8945 FC mov dword ptr [ebp-4], eax
0046EF15 |. 33C0 xor eax, eax
0046EF17 |. 55 push ebp
0046EF18 |. 68 C3EF4600 push 0046EFC3
0046EF1D |. 64:FF30 push dword ptr fs:[eax]
0046EF20 |. 64:8920 mov dword ptr fs:[eax], esp
0046EF23 |. 8D55 F4 lea edx, dword ptr [ebp-C]
0046EF26 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EF29 |. 8B80 F0020000 mov eax, dword ptr [eax+2F0]
0046EF2F |. E8 2096FCFF call 00438554
0046EF34 |. 8B55 F4 mov edx, dword ptr [ebp-C]
0046EF37 |. B8 E89C4800 mov eax, 00489CE8 ; ASCII "糽?
0046EF3C |. E8 8F53F9FF call 004042D0
0046EF41 |. A1 E89C4800 mov eax, dword ptr [489CE8]
0046EF46 |. E8 19FDFFFF call 0046EC64 ;关键call
0046EF4B |. A3 EC9C4800 mov dword ptr [489CEC], eax
0046EF50 |. 833D EC9C4800>cmp dword ptr [489CEC], 0
0046EF57 |. 74 34 je short 0046EF8D ;关键跳
0046EF59 |. 6A 00 push 0
0046EF5B |. A1 E89C4800 mov eax, dword ptr [489CE8]
0046EF60 |. E8 C757F9FF call 0040472C
0046EF65 |. 50 push eax
0046EF66 |. 68 D0EF4600 push 0046EFD0
0046EF6B |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EF6E |. E8 61FCFCFF call 0043EBD4
0046EF73 |. 50 push eax ; |hOwner
0046EF74 |. E8 2F80F9FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0046EF79 |. A1 E89C4800 mov eax, dword ptr [489CE8]
0046EF7E |. E8 A1FEFFFF call 0046EE24
0046EF83 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EF86 |. E8 615DFEFF call 00454CEC
0046EF8B |. EB 20 jmp short 0046EFAD
0046EF8D |> 6A 00 push 0
0046EF8F |. A1 E89C4800 mov eax, dword ptr [489CE8]
0046EF94 |. E8 9357F9FF call 0040472C
0046EF99 |. 50 push eax
0046EF9A |. 68 DCEF4600 push 0046EFDC
0046EF9F |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EFA2 |. E8 2DFCFCFF call 0043EBD4
0046EFA7 |. 50 push eax ; |hOwner
0046EFA8 |. E8 FB7FF9FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0046EFAD |> 33C0 xor eax, eax ;// Alt+F9 返回后停在这!上面这个MessageBox就是显示注册错误!
0046EFAF |. 5A pop edx
0046EFB0 |. 59 pop ecx
0046EFB1 |. 59 pop ecx
0046EFB2 |. 64:8910 mov dword ptr fs:[eax], edx
0046EFB5 |. 68 CAEF4600 push 0046EFCA
0046EFBA |> 8D45 F4 lea eax, dword ptr [ebp-C]
0046EFBD |. E8 BA52F9FF call 0040427C
0046EFC2 \. C3 retn
好,大概流程明白后,我们可以分析一下它的注册流程!在0046EF46这下F2断点,重新点注册,在这个地址断下,F7跟进去.
0046EC64 /$ 55 push ebp
0046EC65 |. 8BEC mov ebp, esp
0046EC67 |. 83C4 C8 add esp, -38
0046EC6A |. 8945 FC mov dword ptr [ebp-4], eax
0046EC6D |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EC70 |. E8 A75AF9FF call 0040471C
0046EC75 |. 33C0 xor eax, eax
0046EC77 |. 55 push ebp
0046EC78 |. 68 A3ED4600 push 0046EDA3
0046EC7D |. 64:FF30 push dword ptr fs:[eax]
0046EC80 |. 64:8920 mov dword ptr fs:[eax], esp
0046EC83 |. 33C0 xor eax, eax
0046EC85 |. 8945 F8 mov dword ptr [ebp-8], eax
0046EC88 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EC8B |. E8 A458F9FF call 00404534
0046EC90 |. 83F8 10 cmp eax, 10
0046EC93 |. 0F8C F4000000 jl 0046ED8D
0046EC99 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046EC9C |. E8 9358F9FF call 00404534
0046ECA1 |. 83F8 10 cmp eax, 10
0046ECA4 |. 0F8F E3000000 jg 0046ED8D
0046ECAA |. 8B45 FC mov eax, dword ptr [ebp-4]
0046ECAD |. BA BCED4600 mov edx, 0046EDBC ; ASCII "1163659294813585"
0046ECB2 |. E8 C159F9FF call 00404678
0046ECB7 |. 0F84 D0000000 je 0046ED8D
0046ECBD |. 8B45 FC mov eax, dword ptr [ebp-4]
0046ECC0 |. BA D8ED4600 mov edx, 0046EDD8 ; ASCII "0386848021608060"
0046ECC5 |. E8 AE59F9FF call 00404678
0046ECCA |. 0F84 BD000000 je 0046ED8D
0046ECD0 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046ECD3 |. BA F4ED4600 mov edx, 0046EDF4 ; ASCII "8319E4005F00PYG0"
0046ECD8 |. E8 9B59F9FF call 00404678
0046ECDD |. 0F84 AA000000 je 0046ED8D
0046ECE3 |. 8B45 FC mov eax, dword ptr [ebp-4]
0046ECE6 |. BA 10EE4600 mov edx, 0046EE10 ; ASCII "0566838690673180"
0046ECEB |. E8 8859F9FF call 00404678
0046ECF0 |. 0F84 97000000 je 0046ED8D
0046ECF6 |. 33C0 xor eax, eax
0046ECF8 |. 8945 DC mov dword ptr [ebp-24], eax
0046ECFB |> 8B45 FC /mov eax, dword ptr [ebp-4]
0046ECFE |. 8B55 DC |mov edx, dword ptr [ebp-24]
0046ED01 |. 8A0410 |mov al, byte ptr [eax+edx]
0046ED04 |. E8 13FFFFFF |call <atoi> ;伪注册码的每一位字符转换成数字
0046ED09 |. 8B55 DC |mov edx, dword ptr [ebp-24]
0046ED0C |. 884415 CB |mov byte ptr [ebp+edx-35], al
0046ED10 |. FF45 DC |inc dword ptr [ebp-24]
0046ED13 |. 837D DC 10 |cmp dword ptr [ebp-24], 10
0046ED17 |.^ 75 E2 \jnz short 0046ECFB
0046ED19 |. 33C0 xor eax, eax
0046ED1B |. 8945 E0 mov dword ptr [ebp-20], eax
0046ED1E |> 8B45 E0 /mov eax, dword ptr [ebp-20]
0046ED21 |. 03C0 |add eax, eax
0046ED23 |. 8A4405 CC |mov al, byte ptr [ebp+eax-34] ;X(偶位)<<4 + X(奇位) = Y
0046ED27 |. C1E0 04 |shl eax, 4
0046ED2A |. 8B55 E0 |mov edx, dword ptr [ebp-20]
0046ED2D |. 03D2 |add edx, edx
0046ED2F |. 024415 CB |add al, byte ptr [ebp+edx-35]
0046ED33 |. 8B55 E0 |mov edx, dword ptr [ebp-20]
0046ED36 |. 884415 EF |mov byte ptr [ebp+edx-11], al
0046ED3A |. FF45 E0 |inc dword ptr [ebp-20]
0046ED3D |. 837D E0 09 |cmp dword ptr [ebp-20], 9
0046ED41 |.^ 75 DB \jnz short 0046ED1E
0046ED43 |. 8A45 F2 mov al, byte ptr [ebp-E]
0046ED46 |. 3245 EF xor al, byte ptr [ebp-11] ;Y(1)^Y(4)
0046ED49 |. 8845 E6 mov byte ptr [ebp-1A], al
0046ED4C |. 8A45 F0 mov al, byte ptr [ebp-10]
0046ED4F |. 3245 F6 xor al, byte ptr [ebp-A]
0046ED52 |. 8845 E7 mov byte ptr [ebp-19], al
0046ED55 |. 8A45 F1 mov al, byte ptr [ebp-F]
0046ED58 |. 3245 F4 xor al, byte ptr [ebp-C]
0046ED5B |. 8845 E8 mov byte ptr [ebp-18], al
0046ED5E |. 8A45 F5 mov al, byte ptr [ebp-B]
0046ED61 |. 3245 F3 xor al, byte ptr [ebp-D]
0046ED64 |. 8845 E9 mov byte ptr [ebp-17], al
0046ED67 807D E6 A6 cmp byte ptr [ebp-1A], 38 ;如果Y1^Y4的值是38,就比较下一个!
0046ED6B |. 75 1B jnz short 0046ED88
0046ED6D 807D E7 26 cmp byte ptr [ebp-19], 6E ;比较Y2^Y8是否是6E
0046ED71 |. 75 15 jnz short 0046ED88
0046ED73 807D E8 44 cmp byte ptr [ebp-18], 4E ;............
0046ED77 |. 75 0F jnz short 0046ED88
0046ED79 807D E9 4A cmp byte ptr [ebp-17], 1A ;............
0046ED7D |. 75 09 jnz short 0046ED88
0046ED7F |. C745 F8 FFFFF>mov dword ptr [ebp-8], -1
0046ED86 |. EB 05 jmp short 0046ED8D
0046ED88 |> 33C0 xor eax, eax
0046ED8A |. 8945 F8 mov dword ptr [ebp-8], eax
0046ED8D |> 33C0 xor eax, eax
0046ED8F |. 5A pop edx
0046ED90 |. 59 pop ecx
0046ED91 |. 59 pop ecx
0046ED92 |. 64:8910 mov dword ptr fs:[eax], edx
0046ED95 |. 68 AAED4600 push 0046EDAA
0046ED9A |> 8D45 FC lea eax, dword ptr [ebp-4]
0046ED9D |. E8 DA54F9FF call 0040427C
0046EDA2 \. C3 retn
软件首先判断注册码是否为"0566838690673180""0386848021608060""1163659294813585"这几个中的一个,是的话就注册错误了,呵呵.(估计这三个是以前版本的注册码)
而后,就是把我们输入的注册码字符转换成数字,注册码的偶数位左移4位加奇数位;
注册码:X1,X2,X3,X4,X5,X6,X7,X8,X9,Xa,Xb,Xc,Xd,Xe,Xf,X10
X2 << 4 + X1 = Y1
X4 << 4 + X3 = Y2
X6 << 4 + X5 = Y3
X8 << 4 + X7 = Y4
Xa << 4 + X9 = Y5
Xc << 4 + Xb = Y6
Xe << 4 + Xd = Y7
X10<< 4 + Xf = Y8
而后,再把
Y1^Y4 == 38
Y2^Y8 == 6E
Y3^Y6 == 4E
Y7^Y5 == 1A
38, 6E, 4E, 1A 是固定的,只要上面的 Y^Y 得到的值是这几个数,就注册成功!
注册码就不算了,看了都烦,呵呵!我们随便输个注册码,把38, 6E, 4E, 1A这几个数改成我们自己注册码算出的数,就OK了!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年01月18日 11:53:20
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课