首页
社区
课程
招聘
[原创]QQ密码键盘记录器061102的简单分析
发表于: 2007-3-5 19:23 8907

[原创]QQ密码键盘记录器061102的简单分析

2007-3-5 19:23
8907
收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 214
活跃值: (10)
能力值: ( 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
2007-3-5 19:26
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
http://bbs.pediy.com/showthread.php?s=&threadid=39415
这是KAN做出的分析的地址
2007-3-5 19:27
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
你按照你的规则,做出几组注册码,自己测试不就好了
2007-3-5 19:29
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
5
/不是一字节吗?
你用的什么输入法
2007-3-5 19:39
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
/的ASC是2F啊,不是就要占2位吗?
所以4510/510911000/7,即7/与01异或要 = 6E,我是不知道怎么异或了
2007-3-5 20:39
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
我跟踪了一下,结果 /5 = F4 , /7 = F6

不知道是怎么得出来的?有人指点下吗?谢过
2007-3-6 10:24
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
8
自己分析啊。。。你都已经分析出这么多了,把剩下的搞定,还不容易?
这个情况肯定是你把什么漏掉了
2007-3-6 10:39
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
我哭啊 不是吧  我头都大了
2007-3-6 13:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
自己试验成功了吗??
2007-3-6 14:59
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
是的 就是没办法处理 / 这样的字符
2007-3-6 15:22
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
是的 就是没办法处理 / 这样的字符

妈妈呀 找出这算法就已经够头大了 还整个这事你说 我哭啊
2007-3-6 15:24
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
是的 就是没办法处理 / 这样的字符

妈妈呀 找出这算法就已经够头大了 还整个这事你说 我哭啊
2007-3-6 15:24
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
KAN你来了吗?我知道你也分析过 看看我到底哪里出问题了行吗
2007-3-6 19:39
0
雪    币: 28965
活跃值: (7448)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
15
最初由 talaqi 发布
我跟踪了一下,结果 /5 = F4 , /7 = F6

不知道是怎么得出来的?有人指点下吗?谢过

00402793  |.  E8 68FFFFFF        |call QQPwd.00402700
这个过程中对/的处理是用FF替换,
5左移4位变为0x50,
/5转化为 0x50+0xFF=0x4F, /7转化为0x70+0xFF=0x6F
2007-3-12 07:11
0
雪    币: 28965
活跃值: (7448)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
16
我也给出一个注册码:AA/0/0/0/01B6E19
2007-3-12 07:38
0
游客
登录 | 注册 方可回帖
返回
//