//通过以上循环,可以得到对应注册名的注册码的第一部分“55181870”
//以上循环算法可总结如下: //注册名长度为L,N(I)为注册名第I位字符,M(I)为预设字串“mp3recor”第I位字符,循环次数为X,则 //注册码(X-I+1)位为:(N(I)+M(I)+X+I-1)/9 的余数+30
//以我填入的注册名第7位“r”为例,注册码第(8-7+1)为: //(72+6F+8+7-1)/9=EF/9=1A,r=5 //所以第2位注册码为5
004081D1 |. 33DB XOR EBX,EBX 004081D3 |. 5F POP EDI 004081D4 |> 8D46 72 LEA EAX,DWORD PTR DS:[ESI+72] //esi中是注册名长度,所以这里是取注册名长度+72 004081D7 |. B9 09000000 MOV ECX,9 //ecx=9 004081DC |. 99 CDQ //edx双字扩展(清零) 004081DD |. F7F9 IDIV ECX //eax=eax/9,余数放入 edx 004081DF |. 8B8424 F400000>MOV EAX,DWORD PTR SS:[ESP+F4] //假码放入eax 004081E6 |. 80C2 30 ADD DL,30 //dl+30,这是注册码的最后一位 004081E9 |. 885434 18 MOV BYTE PTR SS:[ESP+ESI+18],DL //dl 放入[ESP+ESI+18],ESP+18 是第一部分注册码的起始地址,所以这里就是放到之前算出的第一部分注册码之后 //这是注册码第二部分的计算,其值为 ((L+72)/9 的余数)+30 //我输入的注册名为8个字符,则(8+72)/9=D,r=5,所以这一位注册码为5
004081ED |. 885C34 19 MOV BYTE PTR SS:[ESP+ESI+19],BL 004081F1 |. 8D7424 18 LEA ESI,DWORD PTR SS:[ESP+18] //真码放入esi
004081F5 |> 8A10 /MOV DL,BYTE PTR DS:[EAX] 004081F7 |. 8ACA |MOV CL,DL 004081F9 |. 3A16 |CMP DL,BYTE PTR DS:[ESI] 004081FB |. 75 1C |JNZ SHORT Mp3Recor.00408219 004081FD |. 3ACB |CMP CL,BL 004081FF |. 74 14 |JE SHORT Mp3Recor.00408215 00408201 |. 8A50 01 |MOV DL,BYTE PTR DS:[EAX+1] 00408204 |. 8ACA |MOV CL,DL 00408206 |. 3A56 01 |CMP DL,BYTE PTR DS:[ESI+1] 00408209 |. 75 0E |JNZ SHORT Mp3Recor.00408219 0040820B |. 83C0 02 |ADD EAX,2 0040820E |. 83C6 02 |ADD ESI,2 00408211 |. 3ACB |CMP CL,BL 00408213 |.^75 E0 \JNZ SHORT Mp3Recor.004081F5 //以上是逐位对比输入的注册码和真码是否相同
00408215 |> 33C0 XOR EAX,EAX 00408217 |. EB 05 JMP SHORT Mp3Recor.0040821E 00408219 |> 1BC0 SBB EAX,EAX 0040821B |. 83D8 FF SBB EAX,-1 0040821E |> 5E POP ESI 0040821F |. 3BC3 CMP EAX,EBX 00408221 |. 5D POP EBP 00408222 |. 889C24 E000000>MOV BYTE PTR SS:[ESP+E0],BL 00408229 |. 8D8C24 E800000>LEA ECX,DWORD PTR SS:[ESP+E8] 00408230 |. 75 31 JNZ SHORT Mp3Recor.00408263 00408232 |. E8 AE590200 CALL Mp3Recor.0042DBE5 00408237 |. 8D8C24 EC00000>LEA ECX,DWORD PTR SS:[ESP+EC] 0040823E |. C78424 E000000>MOV DWORD PTR SS:[ESP+E0],-1 00408249 |. E8 97590200 CALL Mp3Recor.0042DBE5 0040824E |. B8 01000000 MOV EAX,1 00408253 |. EB 2C JMP SHORT Mp3Recor.00408281 00408255 |> 889C24 E000000>MOV BYTE PTR SS:[ESP+E0],BL 0040825C |. 8D8C24 E800000>LEA ECX,DWORD PTR SS:[ESP+E8] 00408263 |> E8 7D590200 CALL Mp3Recor.0042DBE5 00408268 |. 8D8C24 EC00000>LEA ECX,DWORD PTR SS:[ESP+EC] 0040826F |. C78424 E000000>MOV DWORD PTR SS:[ESP+E0],-1 0040827A |. E8 66590200 CALL Mp3Recor.0042DBE5 0040827F |. 33C0 XOR EAX,EAX 00408281 |> 8B8C24 D800000>MOV ECX,DWORD PTR SS:[ESP+D8] 00408288 |. 5B POP EBX 00408289 |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX 00408290 |. 81C4 E0000000 ADD ESP,0E0 00408296 \. C2 0800 RETN 8
所以注册码由两部分组成,长度为注册名长度+1。至此,EZ MP3 Recorder 1.15 注册算法分析完成。
一组可用的注册码:Name: lovefire S/N: 551818705
|