【文章标题】: MSN聊天记录查看器注册分析
【文章作者】: bithaha
【软件名称】: MSN聊天记录查看器
【下载地址】: http://www.ngnsss.com
【加壳方式】: 无壳
【编写语言】: vc++
【使用工具】: OD
【软件介绍】: MSN聊天记录查看器3.1 本软件绿色软件,无需安装
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  在华军找了个软柿子.
  用peid一查没壳,心里好激动
  用OD载入,超级字符串搜索,有"注册成功",直接来到如下代码处.在00401CE0处下断,输入注册码,来到下面
  00401CE0   .  6A FF         PUSH -1
  00401CE2   .  68 48754200   PUSH msn聊天?00427548                      ;  SE 处理程序安装
  00401CE7   .  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
  00401CED   .  50            PUSH EAX 
  00401CEE   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP
  00401CF5   .  83EC 08       SUB ESP,8
  00401CF8   .  56            PUSH ESI
  00401CF9   .  8BF1          MOV ESI,ECX
  00401CFB   .  6A 01         PUSH 1
  00401CFD   .  E8 FFAA0100   CALL msn聊天?0041C801
  00401D02   .  A1 8C464300   MOV EAX,DWORD PTR DS:[43468C]               ; 
  00401D07   .  894424 04     MOV DWORD PTR SS:[ESP+4],EAX
  00401D0B   .  8D8E 1C010000 LEA ECX,DWORD PTR DS:[ESI+11C]
  00401D11   .  C74424 14 000>MOV DWORD PTR SS:[ESP+14],0
  00401D19   .  51            PUSH ECX
  00401D1A   .  8D4C24 08     LEA ECX,DWORD PTR SS:[ESP+8]
  00401D1E   .  E8 E9C00100   CALL msn聊天?0041DE0C
  00401D23   .  6A 08         PUSH 8
  00401D25   .  68 28414300   PUSH msn聊天?00434128                      ;  1163659294813585
  00401D2A   .  6A 08         PUSH 8
  00401D2C   .  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]              
  00401D30   .  E8 2DC30100   CALL msn聊天?0041E062                      
  00401D35   .  50            PUSH EAX
  00401D36   .  E8 D5A00000   CALL msn聊天?0040BE10                       ;比较注册码是否为上面的黑名单
  00401D3B   .  83C4 0C       ADD ESP,0C
  00401D3E   .  85C0          TEST EAX,EAX
  00401D40   .  75 10         JNZ SHORT msn聊天?00401D52
  00401D42   .  50            PUSH EAX
  00401D43   .  68 8C414300   PUSH msn聊天?0043418C                      ;  ngnsss
  00401D48   .  68 68414300   PUSH msn聊天?00434168                      ;  这是个盗版的注册号,请注册正式版本
  00401D4D   .  E9 96000000   JMP msn聊天?00401DE8
  00401D52   >  6A 08         PUSH 8
  00401D54   .  68 54414300   PUSH msn聊天?00434154                      ;  0386848021608060
  00401D59   .  6A 08         PUSH 8
  00401D5B   .  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
  00401D5F   .  E8 FEC20100   CALL msn聊天?0041E062
  00401D64   .  50            PUSH EAX
  00401D65   .  E8 A6A00000   CALL msn聊天?0040BE10                       ;又是比较黑名单
  00401D6A   .  83C4 0C       ADD ESP,0C
  00401D6D   .  85C0          TEST EAX,EAX
  00401D6F   .  75 0D         JNZ SHORT msn聊天?00401D7E
  00401D71   .  50            PUSH EAX
  00401D72   .  68 8C414300   PUSH msn聊天?0043418C                      ;  ngnsss
  00401D77   .  68 68414300   PUSH msn聊天?00434168                      ;  这是个盗版的注册号,请注册正式版本
  00401D7C   .  EB 6A         JMP SHORT msn聊天?00401DE8
  00401D7E   >  6A 08         PUSH 8
  00401D80   .  68 14414300   PUSH msn聊天?00434114                      ;  1191759292915277
  00401D85   .  6A 08         PUSH 8
  00401D87   .  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
  00401D8B   .  E8 D2C20100   CALL msn聊天?0041E062
  00401D90   .  50            PUSH EAX
  00401D91   .  E8 7AA00000   CALL msn聊天?0040BE10                       ;还是比较黑名单
  00401D96   .  83C4 0C       ADD ESP,0C
  00401D99   .  85C0          TEST EAX,EAX
  00401D9B   .  75 0D         JNZ SHORT msn聊天?00401DAA
  00401D9D   .  50            PUSH EAX
  00401D9E   .  68 8C414300   PUSH msn聊天?0043418C                      ;  ngnsss
  00401DA3   .  68 68414300   PUSH msn聊天?00434168                      ;  这是个盗版的注册号,请注册正式版本
  00401DA8   .  EB 3E         JMP SHORT msn聊天?00401DE8
  00401DAA   >  51            PUSH ECX                                  
  00401DAB   .  8D5424 08     LEA EDX,DWORD PTR SS:[ESP+8]
  00401DAF   .  8BCC          MOV ECX,ESP
  00401DB1   .  896424 0C     MOV DWORD PTR SS:[ESP+C],ESP
  00401DB5   .  52            PUSH EDX                                   ;注册码地址入栈
  00401DB6   .  E8 D1BC0100   CALL msn聊天?0041DA8C                      ;
  00401DBB   .  E8 B0FDFFFF   CALL msn聊天?00401B70                      ;这是关键比较函数
  00401DC0   .  83C4 04       ADD ESP,4
  00401DC3   .  85C0          TEST EAX,EAX
  00401DC5   .  6A 00         PUSH 0
  00401DC7   .  68 8C414300   PUSH msn聊天?0043418C                      ;  ngnsss
  00401DCC      74 15         JE SHORT msn聊天?00401DE3                  ;关键跳,但是直接修改这里
                                                                         ;会在弹出注册成功以后又弹出
                                                                         ;注册失败
  00401DCE   .  68 48414300   PUSH msn聊天?00434148                      ;  注册成功
  00401DD3   .  8BCE          MOV ECX,ESI
  00401DD5   .  E8 46A00100   CALL msn聊天?0041BE20
  00401DDA   .  8BCE          MOV ECX,ESI
  00401DDC   .  E8 19CB0100   CALL msn聊天?0041E8FA
  00401DE1   .  EB 0C         JMP SHORT msn聊天?00401DEF
  00401DE3   >  68 3C414300   PUSH msn聊天?0043413C                      ; 注册号无效
  00401DE8   >  8BCE          MOV ECX,ESI
  00401DEA   .  E8 31A00100   CALL msn聊天?0041BE20
  00401DEF   >  8D4C24 04     LEA ECX,DWORD PTR SS:[ESP+4]
  00401DF3   .  C74424 14 FFF>MOV DWORD PTR SS:[ESP+14],-1
  00401DFB   .  E8 17BF0100   CALL msn聊天?0041DD17
  00401E00   .  8B4C24 0C     MOV ECX,DWORD PTR SS:[ESP+C]
  00401E04   .  5E            POP ESI
  00401E05   .  64:890D 00000>MOV DWORD PTR FS:[0],ECX
  00401E0C   .  83C4 14       ADD ESP,14
  00401E0F   .  C3            RETN
  
  跟进00401DBB关键比较函数 如下.
  00401B70  /$  6A FF         PUSH -1
  00401B72  |.  68 28754200   PUSH msn聊天?00427528                      ;  SE 处理程序安装
  00401B77  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
  00401B7D  |.  50            PUSH EAX
  00401B7E  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP
  00401B85  |.  83EC 18       SUB ESP,18
  00401B88  |.  53            PUSH EBX
  00401B89  |.  6A 08         PUSH 8
  00401B8B  |.  33DB          XOR EBX,EBX
  00401B8D  |.  68 28414300   PUSH msn聊天?00434128                      ;  1163659294813585
  00401B92  |.  6A 08         PUSH 8
  00401B94  |.  8D4C24 38     LEA ECX,DWORD PTR SS:[ESP+38]
  00401B98  |.  895C24 30     MOV DWORD PTR SS:[ESP+30],EBX
  00401B9C  |.  E8 C1C40100   CALL msn聊天?0041E062                      ;和上面那个比较黑名单函数一样
  00401BA1  |.  50            PUSH EAX
  00401BA2  |.  E8 69A20000   CALL msn聊天?0040BE10
  00401BA7  |.  83C4 0C       ADD ESP,0C
  00401BAA  |.  85C0          TEST EAX,EAX
  00401BAC  |.  0F84 06010000 JE msn聊天?00401CB8
  00401BB2  |.  6A 08         PUSH 8
  00401BB4  |.  68 14414300   PUSH msn聊天?00434114                      ;  1191759292915277
  00401BB9  |.  6A 08         PUSH 8
  00401BBB  |.  8D4C24 38     LEA ECX,DWORD PTR SS:[ESP+38]
  00401BBF  |.  E8 9EC40100   CALL msn聊天?0041E062                  
  00401BC4  |.  50            PUSH EAX
  00401BC5  |.  E8 46A20000   CALL msn聊天?0040BE10                      ;仍然是比较黑名单
  00401BCA  |.  83C4 0C       ADD ESP,0C
  00401BCD  |.  85C0          TEST EAX,EAX
  00401BCF  |.  0F84 E3000000 JE msn聊天?00401CB8
  00401BD5  |.  8B4C24 2C     MOV ECX,DWORD PTR SS:[ESP+2C]
  00401BD9  |.  33C0          XOR EAX,EAX
  00401BDB  |.  894424 05     MOV DWORD PTR SS:[ESP+5],EAX
  00401BDF  |.  885C24 04     MOV BYTE PTR SS:[ESP+4],BL
  00401BE3  |.  66:894424 09  MOV WORD PTR SS:[ESP+9],AX
  00401BE8  |.  884424 0B     MOV BYTE PTR SS:[ESP+B],AL
  00401BEC  |.  8B41 F8       MOV EAX,DWORD PTR DS:[ECX-8]
  00401BEF  |.  83F8 10       CMP EAX,10                                 ;比较注册码是否为16位(10h)
                                                                         ;没啥好看的,因为黑名单都是16位.作者真是善解人意.
  00401BF2  |.  0F8C C0000000 JL msn聊天?00401CB8                        ; 
  00401BF8  |.  56            PUSH ESI
  00401BF9  |.  68 04010000   PUSH 104
  00401BFE  |.  8D4C24 34     LEA ECX,DWORD PTR SS:[ESP+34]
  00401C02  |.  E8 5BC40100   CALL msn聊天?0041E062
  00401C07  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]                 ;  
  00401C09  |.  33F6          XOR ESI,ESI
  00401C0B  |.  895424 10     MOV DWORD PTR SS:[ESP+10],EDX
  00401C0F  |.  8B48 04       MOV ECX,DWORD PTR DS:[EAX+4]
  00401C12  |.  894C24 14     MOV DWORD PTR SS:[ESP+14],ECX
  00401C16  |.  8B50 08       MOV EDX,DWORD PTR DS:[EAX+8]
  00401C19  |.  895424 18     MOV DWORD PTR SS:[ESP+18],EDX
  00401C1D  |.  8B40 0C       MOV EAX,DWORD PTR DS:[EAX+C]
  00401C20  |.  894424 1C     MOV DWORD PTR SS:[ESP+1C],EAX              ;把输入的注册码依次入栈,排列顺序和输入的
                                                                         ;顺序相同 比如输入的123456789
                                                                         ;在堆栈中就是31 32 33 34 35 36..
  00401C24  |>  8A4C34 10     /MOV CL,BYTE PTR SS:[ESP+ESI+10]           ;处理堆栈中输入码的循环
  00401C28  |.  51            |PUSH ECX
  00401C29  |.  E8 22FFFFFF   |CALL msn聊天?00401B50                     ;这个call是个很简单的字节处理
                                                                         ;挨个处理每个字节,如果字节在30-39H之间
                                                                         ;则减去30H,在41-46之间则减去37H
                                                                         ;其它的则变成FFH
                                                                            
  00401C2E  |.  83C4 04       |ADD ESP,4
  00401C31  |.  884434 10     |MOV BYTE PTR SS:[ESP+ESI+10],AL
  00401C35  |.  46            |INC ESI
  00401C36  |.  83FE 10       |CMP ESI,10
  00401C39  |.^ 7C E9         \JL SHORT msn聊天?00401C24
  00401C3B  |.  33C0          XOR EAX,EAX
  00401C3D  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
  00401C41  |.  5E            POP ESI
  00401C42  |>  8A51 01       /MOV DL,BYTE PTR DS:[ECX+1]                ;这个循环对刚才处理过的16个字节
                                                                         ;进一步处理,每次处理两个字节
                                                                         
  00401C45  |.  8A19          |MOV BL,BYTE PTR DS:[ECX]
  00401C47  |.  C0E2 04       |SHL DL,4                                  ;把两个字节的第二字节逻辑左移4位
  00401C4A  |.  02D3          |ADD DL,BL                                 ;再加上第一字节
  00401C4C  |.  83C1 02       |ADD ECX,2
  00401C4F  |.  885404 04     |MOV BYTE PTR SS:[ESP+EAX+4],DL            ;
  00401C53  |.  40            |INC EAX
  00401C54  |.  83F8 08       |CMP EAX,8                                 ;循环8次
                                                                         ;经过上面这个循环以后,会得到8个新字节
                                                                         
  00401C57  |.^ 7C E9         \JL SHORT msn聊天?00401C42                 ;对得到的8个新字节进行处理 
  00401C59  |.  8A4424 07     MOV AL,BYTE PTR SS:[ESP+7]                 ;第4个字节-->AL
  00401C5D  |.  8A5C24 04     MOV BL,BYTE PTR SS:[ESP+4]                 
  00401C61  |.  8A4C24 0B     MOV CL,BYTE PTR SS:[ESP+B]
  00401C65  |.  8A5424 05     MOV DL,BYTE PTR SS:[ESP+5]
  00401C69  |.  32C3          XOR AL,BL                                   ;第4个字节xor第1个字节-->AL
  00401C6B  |.  8A5C24 06     MOV BL,BYTE PTR SS:[ESP+6]
  00401C6F  |.  32CA          XOR CL,DL                                   ;第8个字节xor第2个字节-->CL
  00401C71  |.  8A5424 09     MOV DL,BYTE PTR SS:[ESP+9]
  00401C75  |.  32D3          XOR DL,BL                                   ;第6个字节xor第3个字节-->DL
  00401C77  |.  8A5C24 08     MOV BL,BYTE PTR SS:[ESP+8]
  00401C7B  |.  325C24 0A     XOR BL,BYTE PTR SS:[ESP+A]                  ;第5个字节xor第7个字节-->BL
  00401C7F  |.  3C 38         CMP AL,38                                   ;开始比较
  00401C81  |.  75 35         JNZ SHORT msn聊天?00401CB8 
  00401C83  |.  80F9 6E       CMP CL,6E                                 ;CL=3E
  00401C86  |.  75 30         JNZ SHORT msn聊天?00401CB8   ;否则完蛋
  00401C88  |.  80FA 4E       CMP DL,4E                                 ;DL=4E
  00401C8B  |.  75 2B         JNZ SHORT msn聊天?00401CB8
  00401C8D  |.  80FB 0C       CMP BL,0C                                 ;BL=0C
  00401C90  |.  75 26         JNZ SHORT msn聊天?00401CB8
  00401C92  |.  8D4C24 2C     LEA ECX,DWORD PTR SS:[ESP+2C]
  00401C96  |.  C74424 24 FFF>MOV DWORD PTR SS:[ESP+24],-1
  00401C9E  |.  E8 74C00100   CALL msn聊天?0041DD17                       ;到这里注册成功
  00401CA3  |.  B8 01000000   MOV EAX,1
  00401CA8  |.  5B            POP EBX
  00401CA9  |.  8B4C24 18     MOV ECX,DWORD PTR SS:[ESP+18]
  00401CAD  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
  00401CB4  |.  83C4 24       ADD ESP,24
  00401CB7  |.  C3            RETN
  00401CB8  |>  8D4C24 2C     LEA ECX,DWORD PTR SS:[ESP+2C]
  00401CBC  |.  C74424 24 FFF>MOV DWORD PTR SS:[ESP+24],-1
  00401CC4  |.  E8 4EC00100   CALL msn聊天?0041DD17
  00401CC9  |.  8B4C24 1C     MOV ECX,DWORD PTR SS:[ESP+1C]
  00401CCD  |.  33C0          XOR EAX,EAX
  00401CCF  |.  5B            POP EBX
  00401CD0  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
  00401CD7  |.  83C4 24       ADD ESP,24
  00401CDA  \.  C3            RETN
  从后往前一步一步推注册码,由于后面得到的8个字节有这样一组关系:
  5 xor 7=0C
  
  4 xor 1=38
  
  8 xor 2=6E
  
  3 xor 6=4E
  根据这组关系,随便取一组八个字节:05 06 07 3D 08 49 04  68 
  再根据第二个循环过程,可以得到16个字节:比如由05,是由16个字节的第二个字节左移四位加上第一个字节得到,可以
  得出这两个字节中的一组:05 00 .满足关系就成 其它类似 
  得出如下16字节:05 00 06 00 07 20 0D 03 08 20 09 04 04 20 08 06
  然后再根据第一个循环(00401B50这个call)得出原始的字节:这个比较简单,得出如下:
  35 30 36 30 37 30 44 33 38 30 39 34 34 30 38 36
  这就是一组注册码的ASCII值.
 这组注册码如下:
506070D380944086
  
  
  
  
  
  --------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年08月04日 上午 08:26:56