【文章标题】: 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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!