能力值:
( LV6,RANK:90 )
|
-
-
2 楼
再发一次,
【文章标题】: QQ密码键盘记录器061102的简单分析(原创)
【文章作者】: talaqi
【下载地址】: 自己搜索下载
【保护方式】: 注册码
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OD、PEID
【软件介绍】: QQ本地盗号软件。
------------------------------------------------------------------------------------------
【详细过程】
1、 先用Peid查壳,无壳,Microsoft Visual C++ 6.0编写。
2、 用OD载入,查找字符串“注册号无效”,有两处:
0040247E push QQPwd.00418110 software\ngnsss
004024AD push QQPwd.00418104 qqpwdreg
004024CB push QQPwd.004181F8 注册成功
0040251F push QQPwd.004181F0 NGNSSS
00402524 push QQPwd.004181E4 注册号无效
004025A2 push QQPwd.004117D3 给OA
004028B0 push QQPwd.004181F0 NGNSSS
004028B7 push QQPwd.004181F8 注册成功
004028CC push QQPwd.004181E4 注册号无效
分别双击来到:
第一处:
00402464 . E8 39A60000 call QQPwd.0040CAA2
00402469 . E8 B2020000 call QQPwd.00402720 ; 算法CALL,下断失败
0040246E . 83C4 04 add esp,4
00402471 . 85C0 test eax,eax
00402473 . 0F84 A4000000 je QQPwd.0040251D
00402479 . 8D4424 08 lea eax,dword ptr ss:[esp+8]
0040247D . 50 push eax
0040247E . 68 10814100 push QQPwd.00418110
00402483 . 68 02000080 push 80000002
00402488 . FF15 04204100 call dword ptr ds:[<&ADVAPI32.RegCreateKeyA>]
0040248E . 8B4C24 04 mov ecx,dword ptr ss:[esp+4]
00402492 . 8B41 F8 mov eax,dword ptr ds:[ecx-8]
00402495 . 8D4C24 04 lea ecx,dword ptr ss:[esp+4]
00402499 . 50 push eax
0040249A . 68 04010000 push 104
0040249F . E8 E1AA0000 call QQPwd.0040CF85
004024A4 . 8B5424 0C mov edx,dword ptr ss:[esp+C]
004024A8 . 50 push eax
004024A9 . 6A 01 push 1
004024AB . 6A 00 push 0
004024AD . 68 04814100 push QQPwd.00418104
004024B2 . 52 push edx
004024B3 . FF15 08204100 call dword ptr ds:[<&ADVAPI32.RegSetValueExA>]
004024B9 . 8B4424 08 mov eax,dword ptr ss:[esp+8]
004024BD . 50 push eax
004024BE . FF15 20204100 call dword ptr ds:[<&ADVAPI32.RegCloseKey>]
004024C4 . 8B4C24 04 mov ecx,dword ptr ss:[esp+4]
004024C8 . 6A 00 push 0
004024CA . 51 push ecx
004024CB . 68 F8814100 push QQPwd.004181F8 ; 注册成功
004024D0 . 8BCE mov ecx,esi
004024D2 . C786 14010000 0>mov dword ptr ds:[esi+114],1
004024DC . E8 508E0000 call QQPwd.0040B331
004024E1 . 6A 00 push 0
004024E3 . 8D4E 5C lea ecx,dword ptr ds:[esi+5C]
004024E6 . E8 59A00000 call QQPwd.0040C544
004024EB . 8D4C24 04 lea ecx,dword ptr ss:[esp+4]
004024EF . C68424 34010000>mov byte ptr ss:[esp+134],0
004024F7 . E8 31A80000 call QQPwd.0040CD2D
004024FC . 8D8C24 28010000 lea ecx,dword ptr ss:[esp+128]
00402503 . C78424 34010000>mov dword ptr ss:[esp+134],3
0040250E . E8 1AA80000 call QQPwd.0040CD2D
00402513 . C68424 34010000>mov byte ptr ss:[esp+134],2
0040251B . EB 43 jmp short QQPwd.00402560
0040251D > 6A 00 push 0
0040251F . 68 F0814100 push QQPwd.004181F0 ; ASCII "NGNSSS"
00402524 . 68 E4814100 push QQPwd.004181E4 ; 注册码无效
第二处:
0040289F . E8 FEA10000 call QQPwd.0040CAA2
004028A4 . E8 77FEFFFF call QQPwd.00402720 ; 算法CALL,下断成功
004028A9 . 83C4 04 add esp,4
004028AC . 85C0 test eax,eax
004028AE . 6A 00 push 0
004028B0 . 68 F0814100 push QQPwd.004181F0 ; ASCII "NGNSSS"
004028B5 . 74 15 je short QQPwd.004028CC
004028B7 . 68 F8814100 push QQPwd.004181F8 ; 注册成功
004028BC . 8BCE mov ecx,esi
004028BE . E8 6E8A0000 call QQPwd.0040B331
004028C3 . 8BCE mov ecx,esi
004028C5 . E8 E2B60000 call QQPwd.0040DFAC
004028CA . EB 0C jmp short QQPwd.004028D8
004028CC > 68 E4814100 push QQPwd.004181E4 ; 注册码无效
因为第2处的算法CALL才能下断成功,所以调用地址00402720的真正CALL是第2处,跟进后来到这里:
00402720 /$ 6A FF push -1
00402722 |. 68 18184100 push QQPwd.00411818 ; SE handler installation
00402727 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
0040272D |. 50 push eax
0040272E |. 64:8925 00000000 mov dword ptr fs:[0],esp
00402735 |. 83EC 18 sub esp,18
00402738 |. 53 push ebx
00402739 |. 8B4C24 2C mov ecx,dword ptr ss:[esp+2C]
0040273D |. 33C0 xor eax,eax
0040273F |. 894424 05 mov dword ptr ss:[esp+5],eax
00402743 |. 33DB xor ebx,ebx
00402745 |. 66:894424 09 mov word ptr ss:[esp+9],ax
0040274A |. 895C24 24 mov dword ptr ss:[esp+24],ebx
0040274E |. 884424 0B mov byte ptr ss:[esp+B],al
00402752 |. 8B41 F8 mov eax,dword ptr ds:[ecx-8] ; 取注册码位数送EAX
00402755 |. 83F8 10 cmp eax,10 ; 注册码必须≥16位
00402758 |. 885C24 04 mov byte ptr ss:[esp+4],bl
0040275C |. 0F8C C0000000 jl QQPwd.00402822 ; 小于则跳死
00402762 |. 56 push esi
00402763 |. 68 04010000 push 104
00402768 |. 8D4C24 34 lea ecx,dword ptr ss:[esp+34]
0040276C |. E8 14A80000 call QQPwd.0040CF85
00402771 |. 8B10 mov edx,dword ptr ds:[eax] ; 注册码1-4位送EDX
00402773 |. 33F6 xor esi,esi ; ESI清零
00402775 |. 895424 10 mov dword ptr ss:[esp+10],edx ; 再存入SS:[ESP+10]
00402779 |. 8B48 04 mov ecx,dword ptr ds:[eax+4] ; 5-8位送ECX
0040277C |. 894C24 14 mov dword ptr ss:[esp+14],ecx ; 再存入SS:[ESP+14]
00402780 |. 8B50 08 mov edx,dword ptr ds:[eax+8] ; 9-12位送EDX
00402783 |. 895424 18 mov dword ptr ss:[esp+18],edx ; 再存入SS:[ESP+18]
00402787 |. 8B40 0C mov eax,dword ptr ds:[eax+C] ; 13-16位送EAX,16
; 位以后的不做运算
0040278A |. 894424 1C mov dword ptr ss:[esp+1C],eax ; 再存入SS:[ESP+1C]
0040278E |> 8A4C34 10 /mov cl,byte ptr ss:[esp+esi+10] ; 按位依次取注册码
; 的前16位字符送cl
00402792 |. 51 |push ecx ; cl里放的是注册码
; 各位的ASC值
00402793 |. E8 68FFFFFF |call QQPwd.00402700
00402798 |. 83C4 04 |add esp,4
0040279B |. 884434 10 |mov byte ptr ss:[esp+esi+10],al ; al里放的是注册码
; 各位的10进制值
0040279F |. 46 |inc esi ; ESI是注册码当前位
004027A0 |. 83FE 10 |cmp esi,10
004027A3 |.^ 7C E9 \jl short QQPwd.0040278E ; 没取完继续循环
004027A5 |. 33C0 xor eax,eax ; EAX清零
004027A7 |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004027AB |. 5E pop esi
004027AC |> 8A51 01 /mov dl,byte ptr ds:[ecx+1] ; 注册码的偶数位依
; 次取出送dl
004027AF |. 8A19 |mov bl,byte ptr ds:[ecx] ; 注册码的奇数位依
; 次取出送dl
004027B1 |. C0E2 04 |shl dl,4 ; dl逻辑左移4
004027B4 |. 02D3 |add dl,bl ; dl+bl
004027B6 |. 83C1 02 |add ecx,2
004027B9 |. 885404 04 |mov byte ptr ss:[esp+eax+4],dl
004027BD |. 40 |inc eax
004027BE |. 83F8 08 |cmp eax,8
004027C1 |.^ 7C E9 \jl short QQPwd.004027AC ; 没取完继续循环
004027C3 |. 8A4424 07 mov al,byte ptr ss:[esp+7]
004027C7 |. 8A5C24 04 mov bl,byte ptr ss:[esp+4]
004027CB |. 8A4C24 0B mov cl,byte ptr ss:[esp+B]
004027CF |. 8A5424 05 mov dl,byte ptr ss:[esp+5]
004027D3 |. 32C3 xor al,bl ; 异或得到al
004027D5 |. 8A5C24 06 mov bl,byte ptr ss:[esp+6]
004027D9 |. 32CA xor cl,dl ; 异或得到cl
004027DB |. 8A5424 09 mov dl,byte ptr ss:[esp+9]
004027DF |. 32D3 xor dl,bl ; 异或得到dl
004027E1 |. 8A5C24 08 mov bl,byte ptr ss:[esp+8]
004027E5 |. 325C24 0A xor bl,byte ptr ss:[esp+A] ; 异或得到bl
004027E9 |. 3C 55 cmp al,55 ; al必须=55
004027EB |. 75 35 jnz short QQPwd.00402822
004027ED |. 80F9 6E cmp cl,6E ; cl必须=6E
004027F0 |. 75 30 jnz short QQPwd.00402822
004027F2 |. 80FA 4E cmp dl,4E ; dl必须=4E
004027F5 |. 75 2B jnz short QQPwd.00402822
004027F7 |. 80FB 19 cmp bl,19 ; bl必须=19
004027FA |. 75 26 jnz short QQPwd.00402822
004027FC |. 8D4C24 2C lea ecx,dword ptr ss:[esp+2C]
00402800 |. C74424 24 FFFFFFFF mov dword ptr ss:[esp+24],-1
00402808 |. E8 20A50000 call QQPwd.0040CD2D
0040280D |. B8 01000000 mov eax,1
00402812 |. 5B pop ebx
00402813 |. 8B4C24 18 mov ecx,dword ptr ss:[esp+18]
00402817 |. 64:890D 00000000 mov dword ptr fs:[0],ecx
0040281E |. 83C4 24 add esp,24
00402821 |. C3 retn
00402822 |> 8D4C24 2C lea ecx,dword ptr ss:[esp+2C]
00402826 |. C74424 24 FFFFFFFF mov dword ptr ss:[esp+24],-1
0040282E |. E8 FAA40000 call QQPwd.0040CD2D
00402833 |. 8B4C24 1C mov ecx,dword ptr ss:[esp+1C]
00402837 |. 33C0 xor eax,eax
00402839 |. 5B pop ebx
0040283A |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00402841 |. 83C4 24 add esp,24
00402844 \. C3 retn
--------------------------------------------------------------------------------
【经验总结】
本人对esp的堆栈做了跟踪得出如下规律:(所有字符都表示位数)
堆栈地址 数值 所取的内容
ss:[esp+4] 0 1 2 3 4 5 6 7 10
ss:[esp+5] 2 3 4 5 6 7 8 9 32
ss:[esp+6] 4 5 6 7 8 9 A B 54
ss:[esp+7] 6 7 8 9 A B C D 76
ss:[esp+8] 8 9 A B C D E F 98
ss:[esp+9] A B C D E F 0 BA
ss:[esp+A] C D E F 0 1 DC
ss:[esp+B] E F 0 1 2 FE
又知:
al’ = al xor bl = 55 ( al = 76 , bl = 10 )
cl’ = cl xor dl = 6E ( cl = FE , dl = 32 )
dl’ = dl xor bl = 4E ( dl = BA , bl = 54 )
bl’ = bl xor ss:[esp+A] ( bl = 98 )
得出结论如下:
[8][7]与[2][1]异或,结果必须等于55
[16][15]与[4][3]异或,结果必须等于6E
[6][5]与[12][11]异或,结果必须等于4E
[10][9]与[14][13]异或,结果必须等于19
满足以上的注册码即为真正的注册码,给个例子:7CE5F929871D1603。
但是总觉得不对,因为KAN也出了个分析,并给了个注册码:4510/510911000/7,按我的算法,这里的/应该是不合法的,因为/本身就占了2个字节,这是为什么,斑竹明鉴!・
-------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年03月6日 11:55:31
|