iawen 发表于 2007-9-6 15:50:47

MSN 密码监控器 5.2算法分析

【文章标题】: MSN 密码监控器 5.2算法分析
【文章作者】: iawen
【作者邮箱】: [email protected]
【作者QQ号】: 160193626
【软件名称】: MSN 密码监控器 5.2
【软件大小】: 500KB
【下载地址】: http://www.onlinedown.net/soft/47884.htm
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: C++
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
      用OD加载程序,运行,用插件搜索ASCII字符,找到提示信息,双击来到反汇编代码处:
      1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
0040223D    6A 00         push 0
0040223F    68 BCA14100   push MSNPwd.0041A1BC                        ; ngnsss
00402244    68 B0A14100   push MSNPwd.0041A1B0                        ; 注册号无效
00402249    8BCE            mov ecx,esi
0040224B    E8 40AC0000   call MSNPwd.0040CE90

2<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
004025EC    68 B0A14100   push MSNPwd.0041A1B0 <-------|               ; 注册号无效
004025F1    8BCE            mov ecx,esi                       |
004025F3    E8 98A80000   call MSNPwd.0040CE90         |
                                                       |
向上跟踪:                                               |
004025CC    85C0            test eax,eax               |
004025CE    6A 00         push 0                       |
004025D0    68 BCA14100   push MSNPwd.0041A1BC         |               ; ngnsss
004025D5    74 15         je short MSNPwd.004025EC----->

      继续向上的第一个CALL就是注册码验证了呵呵,进去看看:
00402440    6A FF         push -1
00402442    68 88324100   push MSNPwd.00413288
00402447    64:A1 00000000mov eax,dword ptr fs:
0040244D    50            push eax
0040244E    64:8925 0000000>mov dword ptr fs:,esp
00402455    83EC 18         sub esp,18
00402458    53            push ebx
00402459    8B4C24 2C       mov ecx,dword ptr ss:
0040245D    33C0            xor eax,eax
0040245F    894424 05       mov dword ptr ss:,eax
00402463    33DB            xor ebx,ebx
00402465    66:894424 09    mov word ptr ss:,ax
0040246A    895C24 24       mov dword ptr ss:,ebx
0040246E    884424 0B       mov byte ptr ss:,al
00402472    8B41 F8         mov eax,dword ptr ds:
00402475    83F8 10         cmp eax,10                        ; 判断注册码位数,是否等于16位

00402478    885C24 04       mov byte ptr ss:,bl
0040247C    0F8C C0000000   jl MSNPwd.00402542
00402482    56            push esi
00402483    68 04010000   push 104
00402488    8D4C24 34       lea ecx,dword ptr ss:
0040248C    E8 DFC50000   call MSNPwd.0040EA70
00402491    8B10            mov edx,dword ptr ds:
00402493    33F6            xor esi,esi
00402495    895424 10       mov dword ptr ss:,edx
00402499    8B48 04         mov ecx,dword ptr ds:
0040249C    894C24 14       mov dword ptr ss:,ecx
004024A0    8B50 08         mov edx,dword ptr ds:
004024A3    895424 18       mov dword ptr ss:,edx
004024A7    8B40 0C         mov eax,dword ptr ds:
004024AA    894424 1C       mov dword ptr ss:,eax
004024AE    8A4C34 10       mov cl,byte ptr ss:   ; 循环对注册码进行处理,1
004024B2    51            push ecx
004024B3    E8 68FFFFFF   call MSNPwd.00402420
004024B8    83C4 04         add esp,4
004024BB    884434 10       mov byte ptr ss:,al
004024BF    46            inc esi
004024C0    83FE 10         cmp esi,10
004024C3^ 7C E9         jl short MSNPwd.004024AE
004024C5    33C0            xor eax,eax
004024C7    8D4C24 10       lea ecx,dword ptr ss:
004024CB    5E            pop esi
004024CC    8A51 01         mov dl,byte ptr ds:          ; 循环对注册码进行处理,2
004024CF    8A19            mov bl,byte ptr ds:
004024D1    C0E2 04         shl dl,4
004024D4    02D3            add dl,bl
004024D6    83C1 02         add ecx,2
004024D9    885404 04       mov byte ptr ss:,dl
004024DD    40            inc eax
004024DE    83F8 08         cmp eax,8
004024E1^ 7C E9         jl short MSNPwd.004024CC

//这两处是对用户输入的注册码进行初步处理,处理的方式是:
//               1:将16位注册码分成8对
//               2:将每对字符的顺序颠倒,如12 34 56 78 90 12 34 56==>21 43 65 87 09 21 43 65


004024E3    8A4424 07       mov al,byte ptr ss:
004024E7    8A5C24 04       mov bl,byte ptr ss:
004024EB    8A4C24 0B       mov cl,byte ptr ss:
004024EF    8A5424 05       mov dl,byte ptr ss:

//如果将注册码看成是一个包含8个整型的数组Num,则这里的处理方式就是如下:
//                   al=Num,bl=Num,cl=Num,dl=Num

004024F3    32C3            xor al,bl
                              //al=al^bl

004024F5    8A5C24 06       mov bl,byte ptr ss:
                              //bl=Num

004024F9    32CA            xor cl,dl
                              //cl=cl^dl

004024FB    8A5424 09       mov dl,byte ptr ss:
                              //dl=Num

004024FF    32D3            xor dl,bl
                              //dl=dl^bl

00402501    8A5C24 08       mov bl,byte ptr ss:
                              //bl=Num
00402505    325C24 0A       xor bl,byte ptr ss:
                              //bl=bl^Num

00402509    3C 4D         cmp al,4D
0040250B    75 35         jnz short MSNPwd.00402542
0040250D    80F9 6E         cmp cl,6E
00402510    75 30         jnz short MSNPwd.00402542
00402512    80FA 4E         cmp dl,4E
00402515    75 2B         jnz short MSNPwd.00402542
00402517    80FB 19         cmp bl,19
0040251A    75 26         jnz short MSNPwd.00402542
//这里是对四个寄存器的值分别判断
//其实上面的流程可以简单的用C代码表述如下:
//int Num;
//If((Num^Num)!=0x4D)
      break;
//If((Num^Num)!=0x6E)
      break;
//If((Num^Num)!=0x4E)
      break;
//If((Num^Num)!=0x19)
      break;

//只要符合这四个条件的数组就是正确的注册码了,呵呵


0040251C    8D4C24 2C       lea ecx,dword ptr ss:
00402520    C74424 24 FFFFF>mov dword ptr ss:,-1
00402528    E8 5FC30000   call MSNPwd.0040E88C
0040252D    B8 01000000   mov eax,1
00402532    5B            pop ebx
00402533    8B4C24 18       mov ecx,dword ptr ss:
00402537    64:890D 0000000>mov dword ptr fs:,ecx
0040253E    83C4 24         add esp,24
00402541    C3            retn
00402542    8D4C24 2C       lea ecx,dword ptr ss:
00402546    C74424 24 FFFFF>mov dword ptr ss:,-1
0040254E    E8 39C30000   call MSNPwd.0040E88C
00402553    8B4C24 1C       mov ecx,dword ptr ss:
00402557    33C0            xor eax,eax
00402559    5B            pop ebx
0040255A    64:890D 0000000>mov dword ptr fs:,ecx
00402561    83C4 24         add esp,24
00402564    C3            retn


--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年09月06日 15:52:18

kangroo 发表于 2007-9-7 21:32:48

如果写出注册机 那就更好了。

iawen 发表于 2007-9-7 22:19:42

已经给出了C代码了,见:
https://www.chinapyg.com/viewthread.php?tid=18273&extra=page%3D1

pyzlq 发表于 2008-3-28 02:19:04

支持一下吧!!!!!!!!

找不着北 发表于 2008-3-28 22:11:39

/:018 /:018

zgmap 发表于 2008-4-2 00:09:49

老鸦终究是老亚,没的说

HeartBrokenKid 发表于 2009-8-10 12:55:17

支持一下吧!!!!!!!!
页: [1]
查看完整版本: MSN 密码监控器 5.2算法分析