Zhlw.com - 中华龙网

站长资讯通告:
搜索: 您的位置中华龙网 > 计算机网络 > 安全防御 > 破解文章 > 文章列表

EZ MP3 Recorder 1.15 注册算法分析(2)

作者:bear  来源:转载  发布时间:2006-4-30 15:11:03
进入 407C68 的关键call㈠

0042D95A  /$ 56            PUSH ESI
0042D95B  |. 8BF1          MOV ESI,ECX
0042D95D  |. 8B4C24 08      MOV ECX,DWORD PTR SS:[ESP+8]
0042D961  |. 8B01          MOV EAX,DWORD PTR DS:[ECX]  //注册名放入eax
0042D963  |. 8378 F4 00    CMP DWORD PTR DS:[EAX-C],0  //比较注册名长度是否为0,即是否已有注册名
0042D967  |. 7C 0E          JL SHORT Mp3Recor.0042D977  //注册表中没有注册名则跳
0042D969  |. 8906          MOV DWORD PTR DS:[ESI],EAX
0042D96B  |. 83C0 F4        ADD EAX,-0C
0042D96E  |. 50            PUSH EAX                                ; /pVar
0042D96F  |. FF15 8C334400  CALL DWORD PTR DS:[<&KERNEL32.Interlocke>; \InterlockedIncrement
0042D975  |. EB 10          JMP SHORT Mp3Recor.0042D987
0042D977  |> A1 803A4500    MOV EAX,DWORD PTR DS:[453A80]
0042D97C  |. 8906          MOV DWORD PTR DS:[ESI],EAX
0042D97E  |. FF31          PUSH DWORD PTR DS:[ECX]
0042D980  |. 8BCE          MOV ECX,ESI
0042D982  |. E8 E7030000    CALL Mp3Recor.0042DD6E
0042D987  |> 8BC6          MOV EAX,ESI
0042D989  |. 5E            POP ESI
0042D98A  \. C2 0400        RETN 4


------------------------------------------------------------------
进入 407C76 的关键call㈡

004080F0  /$ 6A FF          PUSH -1
004080F2  |. 68 E0004400    PUSH Mp3Recor.004400E0                  ;  SE handler installation
004080F7  |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004080FD  |. 50            PUSH EAX
004080FE  |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
00408105  |. 81EC D4000000  SUB ESP,0D4
0040810B  |. 53            PUSH EBX
0040810C  |. 33DB          XOR EBX,EBX
0040810E  |. 899C24 E000000>MOV DWORD PTR SS:[ESP+E0],EBX
00408115  |. 8B8424 E800000>MOV EAX,DWORD PTR SS:[ESP+E8]  //注册名放入eax
0040811C  |. 68 94674500    PUSH Mp3Recor.00456794                  ; /Arg2 = 00456794
00408121  |. 50            PUSH EAX                                ; |Arg1
00408122  |. C781 E4000000 >MOV DWORD PTR DS:[ECX+E4],1              ; |
0040812C  |. E8 24110100    CALL Mp3Recor.00419255                  ; \Mp3Recor.00419255
00408131  |. 83C4 08        ADD ESP,8
00408134  |. 85C0          TEST EAX,EAX
00408136  |. 0F84 19010000  JE Mp3Recor.00408255
0040813C  |. 8B8C24 EC00000>MOV ECX,DWORD PTR SS:[ESP+EC]  //假码放入ecx
00408143  |. 68 94674500    PUSH Mp3Recor.00456794                  ; /Arg2 = 00456794
00408148  |. 51            PUSH ECX                                ; |Arg1  //假码入栈
00408149  |. E8 07110100    CALL Mp3Recor.00419255                  ; \Mp3Recor.00419255
0040814E  |. 83C4 08        ADD ESP,8
00408151  |. 85C0          TEST EAX,EAX
00408153  |. 0F84 FC000000  JE Mp3Recor.00408255
00408159  |. 55            PUSH EBP
0040815A  |. 8BAC24 EC00000>MOV EBP,DWORD PTR SS:[ESP+EC]
00408161  |. 56            PUSH ESI
00408162  |. B0 72          MOV AL,72  //al=72
00408164  |. 8B75 F8        MOV ESI,DWORD PTR SS:[EBP-8]  //注册名长度送 esi
00408167  |. 33C9          XOR ECX,ECX  //ecx清零,做记数器
00408169  |. 3BF3          CMP ESI,EBX

0040816B  |. C64424 0C 6D  MOV BYTE PTR SS:[ESP+C],6D  //6D = m
00408170  |. C64424 0D 70  MOV BYTE PTR SS:[ESP+D],70  //70 = p
00408175  |. C64424 0E 33  MOV BYTE PTR SS:[ESP+E],33  //33 = 3
0040817A  |. 884424 0F      MOV BYTE PTR SS:[ESP+F],AL  //AL = 72 = r
0040817E  |. C64424 10 65  MOV BYTE PTR SS:[ESP+10],65  //65 = e
00408183  |. C64424 11 63  MOV BYTE PTR SS:[ESP+11],63  //63 = c
00408188  |. C64424 12 6F  MOV BYTE PTR SS:[ESP+12],6F  //6F = o
0040818D  |. 884424 13      MOV BYTE PTR SS:[ESP+13],AL  //AL = 72 = r
00408191  |. 885C24 14      MOV BYTE PTR SS:[ESP+14],BL  //BL = 0,这句无用途?
//以上代码是在 [ESP+C] 开始,依次放入 mp3recor 这个字串

00408195  |. 7E 3D          JLE SHORT Mp3Recor.004081D4
00408197  |. 57            PUSH EDI
00408198  |. 8D7C34 1B      LEA EDI,DWORD PTR SS:[ESP+ESI+1B]

//循环运算开始
0040819C  |> 8A0429        /MOV AL,BYTE PTR DS:[ECX+EBP]  //逐位取注册名的ASCII值,并放入 al
0040819F  |. 8BD1          |MOV EDX,ECX  //edx=ecx
004081A1  |. 81E2 07000080  |AND EDX,80000007  //edx∧80000007,此时edx为循环的次数
004081A7  |. 79 05          |JNS SHORT Mp3Recor.004081AE  //非负数则跳到 4081AE 继续
004081A9  |. 4A            |DEC EDX
004081AA  |. 83CA F8        |OR EDX,FFFFFFF8
004081AD  |. 42            |INC EDX
004081AE  |> 0FBE5414 10    |MOVSX EDX,BYTE PTR SS:[ESP+EDX+10]  //从预设字串 mp3recor 中逐位取字符,放入 edx
004081B3  |. 0FBEC0        |MOVSX EAX,AL  //取用户名ASCII
004081B6  |. 8BD9          |MOV EBX,ECX  //ebx=ecx,ecx 为循环次数,从0开始算
004081B8  |. 03DA          |ADD EBX,EDX  //ebx=ebx+edx,edx 中是取得的预设字串的ASCII值(第N次循环就取第N个,预设字串长度为8,所以8次后从头开始取)
004081BA  |. 03C3          |ADD EAX,EBX  //eax=eax+ebx
004081BC  |. BB 09000000    |MOV EBX,9  //ebx=9
004081C1  |. 03C6          |ADD EAX,ESI  //eax=eax+esi,esi中是注册名长度
004081C3  |. 99            |CDQ  //edx双字扩展(清零)
004081C4  |. F7FB          |IDIV EBX  //eax=eax/9,余数放入 edx
004081C6  |. 80C2 30        |ADD DL,30  //dl=dl+30,即余数+30
004081C9  |. 41            |INC ECX  //记数器+1
004081CA  |. 8817          |MOV BYTE PTR DS:[EDI],DL  //dl->[EDI],dl中是对应注册名计算出来的注册码
004081CC  |. 4F            |DEC EDI  //edi-1,地址往前推,所以求出的注册码是逆着放的,即注册名第一个字符计算出来的数,应该是此部分注册码的最后一个数
004081CD  |. 3BCE          |CMP ECX,ESI  //比较注册名是否已取完
004081CF  |.^7C CB          \JL SHORT Mp3Recor.0040819C  //没有取完则跳回去继续
//循环结束

        用户名: 验证码: 验证码,看不清楚?请点击刷新验证码 (注“”为必填内容。)


文章评论: [ 查看全部 ] 网友评论
关于本站 - 网站帮助 - 广告合作 - 友情连接 - 网站地图