GGLHY 发表于 2011-2-20 01:15:14

快速看算法之钢琴***的注册解码分析实录

本帖最后由 GGLHY 于 2011-2-20 01:16 编辑

快速看算法之钢琴***的注册解码分析实录

    在病房里陪护实在无聊,看到这个软件顺便弄了下它的算法。比较简单,就贴出来了。
    之所以说快速看算法,呵呵,是因为略去了一些不是很重要的CALL,毕竟那些CALL连看带猜都**不离十。也算是偷了点懒吧。
    本文如有错误,敬请指正!



现在进入正文:
在软件目录下,看到这个文件musicreg.exe。运行下,确实是注册的
硬件ID:WD-WCAT11223415
好,OD载入,我们F9,输入注册假码15987530



我们直接来到:
00481D55|.837D EC 00    cmp   dword ptr , >;判断是否输入了注册码
00481D59|.75 0F         jnz   short 00481D6A
00481D5B|.B8 601E4800   mov   eax, 00481E60
00481D60|.E8 BB74FAFF   call    00429220
00481D65|.E9 AA000000   jmp   00481E14
00481D6A|>8B55 F8       mov   edx,          ;假码15987530
00481D6D|.8B45 FC       mov   eax,          ;硬件ID:WD-WCAT11223415
00481D70|.E8 FFF8FFFF   call    00481674             ;寻宝之旅,我们F7
00481D75|.84C0          test    al, al               ;标志位判断!
00481D77|.0F84 8D000000 je      00481E0A             ;关键跳
00481D7D|.E8 3EF8FFFF   call    004815C0             ;写注册信息到注册表
00481D82|.84C0          test    al, al               ;是否写入成功!
00481D84|.74 78         je      short 00481DFE       ;注册发生无法预测的错误!



00481D70 这里 call   00481674处的寻宝之旅,我们F7进入:
00481674/$55            push    ebp                  本地调用来自 0048152A(重起验证), 00481D70(注册)
00481675|.8BEC          mov   ebp, esp
00481677|.B9 0A000000   mov   ecx, 0A
0048167C|>6A 00         /push    0
0048167E|.6A 00         |push    0
00481680|.49            |dec   ecx
00481681|.^ 75 F9         \jnz   short 0048167C
00481683|.53            push    ebx
00481684|.56            push    esi
00481685|.57            push    edi
00481686|.8955 F8       mov   , edx         ;假码15987530
00481689|.8945 FC       mov   , eax         ;硬件ID:WD-WCAT11223415
0048168C|.8B45 FC       mov   eax,
0048168F|.E8 C42DF8FF   call    00404458
00481694|.8B45 F8       mov   eax,          ;假码15987530
00481697|.E8 BC2DF8FF   call    00404458
0048169C|.33C0          xor   eax, eax
0048169E|.55            push    ebp
0048169F|.68 591A4800   push    00481A59
004816A4|.64:FF30       push    dword ptr fs:
004816A7|.64:8920       mov   fs:, esp
004816AA|.33DB          xor   ebx, ebx
004816AC|.8D45 F4       lea   eax,
004816AF|.8B55 FC       mov   edx,          ;硬件ID:WD-WCAT11223415
004816B2|.E8 8929F8FF   call    00404040
004816B7|.8B45 F4       mov   eax,
004816BA|.E8 A92BF8FF   call    00404268
004816BF|.8BF0          mov   esi, eax             ;硬件ID的长度
004816C1|.85F6          test    esi, esi
004816C3|.7E 33         jle   short 004816F8
004816C5|.BF 01000000   mov   edi, 1               ;EDI=1
004816CA|>8D45 E0       /lea   eax,
004816CD|.50            |push    eax
004816CE|.B9 01000000   |mov   ecx, 1
004816D3|.8BD7          |mov   edx, edi
004816D5|.8B45 F4       |mov   eax,       ;硬件ID:WD-WCAT11223415
004816D8|.E8 EB2DF8FF   |call    004044C8
004816DD|.8B45 E0       |mov   eax,
004816E0|.E8 832DF8FF   |call    00404468
004816E5|.8A00          |mov   al,          ;依次取硬件ID每一位ASC
004816E7|.25 FF000000   |and   eax, 0FF
004816EC|.03D8          |add   ebx, eax            ;累加(EBX初始为0)
004816EE|.81C3 04040000 |add   ebx, 404            ;再+404
004816F4|.47            |inc   edi
004816F5|.4E            |dec   esi
004816F6|.^ 75 D2         \jnz   short 004816CA
004816F8|>D1EB          shr   ebx, 1               ;累加的结果 / 2
004816FA|.81F3 DA870C00 xor   ebx, 0C87DA          ;商 XOR常数0C87DA
00481700|.03DB          add   ebx, ebx             ;和 * 2
00481702      81CB 94850C00 or      ebx, 0C8594          ;积 OR 常数0C8594
00481708|.D1EB          shr   ebx, 1               ;结果 / 2
0048170A|.81C3 BA040000 add   ebx, 4BA             ;商 + 4BA
00481710|.81F3 E0E00800 xor   ebx, 8E0E0         ;和 XOR 常数8E0E0
00481716|.8D55 F0       lea   edx,       ;本例得到的结果EBX=63F55,设为S1
00481719|.8BC3          mov   eax, ebx             ;S1
0048171B|.E8 B469F8FF   call    004080D4             ;f7!
00481720|.8B45 F0       mov   eax,       ;S2
00481723|.33DB          xor   ebx, ebx
00481725|.8A58 05       mov   bl,           ;S2的第6位ASC
00481728|.8BC3          mov   eax, ebx
0048172A|.8B55 F0       mov   edx,       ;S2
0048172D|.33C9          xor   ecx, ecx
0048172F|.8A4A 02       mov   cl,           ;S2的第3位ASC
00481732|.03C1          add   eax, ecx             ;二者相加
00481734|.03C3          add   eax, ebx             ;和 + S2的第6位ASC
00481736|.BE 05000000   mov   esi, 5               ;ESI=5
0048173B|.99            cdq
0048173C|.F7FE          idiv    esi                  ;/5
0048173E|.80C2 61       add   dl, 61               ;余数 + 61
00481741|.8855 E6       mov   , dl         ;其和(及其对应的字符)保存到
00481744|.8B45 F0       mov   eax,       ;S2
00481747|.0FB670 01   movzx   esi, byte ptr [eax+1>;S2的第2位
0048174B|.8BC6          mov   eax, esi
0048174D|.03C6          add   eax, esi             ;* 2
0048174F|.BF 05000000   mov   edi, 5               ;EDI=5
00481754|.99            cdq
00481755|.F7FF          idiv    edi                  ;   / 5
00481757|.80C2 61       add   dl, 61               ;余数 + 61
0048175A|.8855 E7       mov   , dl         ;其和(及其对应的字符)保存到
0048175D|.8BC3          mov   eax, ebx             ;S2的第6位ASC
0048175F|.8B55 F0       mov   edx,       ;S2
00481762|.0FB63A      movzx   edi, byte ptr ;S2的第1位ASC
00481765|.03C7          add   eax, edi             ;S2的第1位 + 第6位
00481767|.51            push    ecx
00481768|.B9 05000000   mov   ecx, 5
0048176D|.99            cdq
0048176E|.F7F9          idiv    ecx                  ;/ 5
00481770|.59            pop   ecx
00481771|.80C2 61       add   dl, 61               ;余数 + 61
00481774|.8855 E8       mov   , dl         ;其和(及其对应的字符)保存到
00481777|.8BC7          mov   eax, edi             ;S2的第1位ASC
00481779|.8B55 F0       mov   edx,
0048177C|.0FB652 04   movzx   edx, byte ptr [edx+4>;S2的第5位ASC
00481780|.03C2          add   eax, edx             ;S2的第1位ASC + 第5位ASC
00481782|.03C1          add   eax, ecx             ;再 + 第3位
00481784|.51            push    ecx
00481785|.B9 05000000   mov   ecx, 5
0048178A|.99            cdq
0048178B|.F7F9          idiv    ecx                  ;/ 5
0048178D|.59            pop   ecx                  ;S2第3位
0048178E|.80C2 61       add   dl, 61               ;余数 + 61
00481791|.8855 E9       mov   , dl         ;其和(及其对应的字符)保存到
00481794|.8BC1          mov   eax, ecx             ;S2第3位
00481796|.03C3          add   eax, ebx             ;S2第3位 + S2第6位
00481798|.51            push    ecx
00481799|.B9 05000000   mov   ecx, 5
0048179E|.99            cdq
0048179F|.F7F9          idiv    ecx                  ;/ 5
004817A1|.59            pop   ecx                  ;S2第3位
004817A2|.80C2 61       add   dl, 61               ;余数 + 61
004817A5|.8855 EA       mov   , dl         ;其和(及其对应的字符)保存到
004817A8|.8BC1          mov   eax, ecx             ;S2第3位
004817AA|.03C6          add   eax, esi             ;S2第2位?
004817AC|.8B55 F0       mov   edx,
004817AF|.0FB652 05   movzx   edx, byte ptr [edx+5>;S2第6位
004817B3|.03C2          add   eax, edx             ;再加S2第6位
004817B5|.51            push    ecx
004817B6|.B9 05000000   mov   ecx, 5
004817BB|.99            cdq
004817BC|.F7F9          idiv    ecx                  ;/ 5
004817BE|.59            pop   ecx
004817BF|.80C2 61       add   dl, 61               ;余数 + 61
004817C2|.8855 EB       mov   , dl         ;其和(及其对应的字符)保存到
004817C5|.8BC1          mov   eax, ecx             ;S2第3位
004817C7|.8B55 F0       mov   edx,
004817CA|.0FB652 04   movzx   edx, byte ptr [edx+4>;S2第5位
004817CE|.03C2          add   eax, edx             ;S2第3位 + S2第5位
004817D0|.51            push    ecx
004817D1|.B9 05000000   mov   ecx, 5
004817D6|.99            cdq
004817D7|.F7F9          idiv    ecx                  ;/5
004817D9|.59            pop   ecx
004817DA|.80C2 61       add   dl, 61               ;余数 + 61
004817DD|.8855 EC       mov   , dl         ;其和(及其对应的字符)保存到
004817E0|.8BC7          mov   eax, edi             ;S2第1位
004817E2|.03C7          add   eax, edi             ;*2
004817E4|.8B55 F0       mov   edx,
004817E7|.0FB652 02   movzx   edx, byte ptr [edx+2>;S2第3位
004817EB|.03C2          add   eax, edx             ;再加S2第3位
004817ED|.BF 05000000   mov   edi, 5
004817F2|.99            cdq
004817F3|.F7FF          idiv    edi                  ;/5
004817F5|.80C2 61       add   dl, 61               ;余数 + 61
004817F8|.8855 ED       mov   , dl         ;其和(及其对应的字符)保存到
004817FB|.8BC6          mov   eax, esi             ;S2第2位
004817FD|.03C1          add   eax, ecx             ;   + 第3位
004817FF|.B9 05000000   mov   ecx, 5
00481804|.99            cdq
00481805|.F7F9          idiv    ecx                  ;/5
00481807|.80C2 61       add   dl, 61               ;余数 + 61
0048180A|.8855 EE       mov   , dl         ;其和(及其对应的字符)保存到
0048180D|.8B45 F0       mov   eax,
00481810|.0FB640 04   movzx   eax, byte ptr [eax+4>;第5位
00481814|.03C3          add   eax, ebx             ;+第6位
00481816|.8B55 F0       mov   edx,
00481819|.0FB612      movzx   edx, byte ptr ;第1位
0048181C|.03C2          add   eax, edx             ;再加第1位
0048181E|.B9 05000000   mov   ecx, 5
00481823|.99            cdq
00481824|.F7F9          idiv    ecx                  ;/5
00481826|.80C2 61       add   dl, 61               ;余数 + 61
00481829|.8855 EF       mov   , dl         ;其和(及其对应的字符)保存到
0048182C|.8D45 DC       lea   eax,
0048182F|.8A55 ED       mov   dl,          ;Q8[本例为62("b")]
00481832|.E8 5929F8FF   call    00404190
00481837|.8B45 DC       mov   eax,       ;=62
0048183A|.8D55 F0       lea   edx,       ;S2
0048183D|.B9 01000000   mov   ecx, 1               ;注意ECX=1,放到S2的第一位!开始变形了!
00481842|.E8 092DF8FF   call    00404550
00481847|.8D45 D8       lea   eax,
0048184A|.8A55 EB       mov   dl,          ;Q6
0048184D|.E8 3E29F8FF   call    00404190
00481852|.8B45 D8       mov   eax,
00481855|.8D55 F0       lea   edx,       ;对S2开始变形中.....
00481858|.B9 02000000   mov   ecx, 2               ;放到变形中的第2位
0048185D|.E8 EE2CF8FF   call    00404550
00481862|.8D45 D4       lea   eax,
00481865|.8A55 EF       mov   dl,          ;Q10
00481868|.E8 2329F8FF   call    00404190
0048186D|.8B45 D4       mov   eax,
00481870|.8D55 F0       lea   edx,       ;S2继续变形中的字符串,下同
00481873|.B9 04000000   mov   ecx, 4               ;放到变形中的第4位
00481878|.E8 D32CF8FF   call    00404550
0048187D|.8D45 D0       lea   eax,
00481880|.8A55 E9       mov   dl,          ;Q4
00481883|.E8 0829F8FF   call    00404190
00481888|.8B45 D0       mov   eax,       ;Q4
0048188B|.8D55 F0       lea   edx,
0048188E|.B9 06000000   mov   ecx, 6               ;放到变形中的第6位
00481893|.E8 B82CF8FF   call    00404550
00481898|.8D45 CC       lea   eax,
0048189B|.8A55 E7       mov   dl,          ;Q2
0048189E|.E8 ED28F8FF   call    00404190
004818A3|.8B45 CC       mov   eax,       ;Q2
004818A6|.8D55 F0       lea   edx,
004818A9|.B9 07000000   mov   ecx, 7               ;放到变形中的第7位
004818AE|.E8 9D2CF8FF   call    00404550
004818B3|.8D45 C8       lea   eax,
004818B6|.8A55 EA       mov   dl,          ;Q5
004818B9|.E8 D228F8FF   call    00404190
004818BE|.8B45 C8       mov   eax,       ;Q5
004818C1|.8D55 F0       lea   edx,
004818C4|.B9 09000000   mov   ecx, 9               ;放到变形中的第9位
004818C9|.E8 822CF8FF   call    00404550
004818CE|.8D45 C4       lea   eax,
004818D1|.8A55 E6       mov   dl,          ;Q1
004818D4|.E8 B728F8FF   call    00404190
004818D9|.8B45 C4       mov   eax,
004818DC|.8D55 F0       lea   edx,
004818DF|.B9 0A000000   mov   ecx, 0A            ;放到变形中的第10位
004818E4|.E8 672CF8FF   call    00404550
004818E9|.8D45 C0       lea   eax,
004818EC|.8A55 E8       mov   dl,          ;Q3
004818EF|.E8 9C28F8FF   call    00404190
004818F4|.8B45 C0       mov   eax,
004818F7|.8D55 F0       lea   edx,
004818FA|.B9 0C000000   mov   ecx, 0C            ;放到变形中的第12位
004818FF|.E8 4C2CF8FF   call    00404550
00481904|.8D45 BC       lea   eax,
00481907|.8A55 EE       mov   dl,          ;Q9
0048190A|.E8 8128F8FF   call    00404190
0048190F|.8B45 BC       mov   eax,       ;Q9
00481912|.8D55 F0       lea   edx,
00481915|.B9 0D000000   mov   ecx, 0D            ;放到变形中的第13位
0048191A|.E8 312CF8FF   call    00404550
0048191F|.8D45 B8       lea   eax,
00481922|.8A55 EC       mov   dl,          ;Q7
00481925|.E8 6628F8FF   call    00404190
0048192A|.8B45 B8       mov   eax,
0048192D|.8D55 F0       lea   edx,
00481930|.B9 0F000000   mov   ecx, 0F            ;放到变形中的第15位
00481935|.E8 162CF8FF   call    00404550
0048193A|.8D55 F0       lea   edx,
0048193D|.B9 08000000   mov   ecx, 8               ;注意这里参数=8
00481942|.B8 741A4800   mov   eax, 00481A74      ;这个地址00481A74对应字符"S"
00481947|.E8 042CF8FF   call    00404550
0048194C|.8D55 F0       lea   edx,       ;变形中的第8位为"S"
0048194F|.B9 07000000   mov   ecx, 7               ;这里参数为7
00481954|.B8 801A4800   mov   eax, 00481A80      ;这个地址00481A80对应字符"X"
00481959|.E8 F22BF8FF   call    00404550
0048195E|.8D55 F0       lea   edx,       ;变形中的第7位为"X"
00481961|.B9 02000000   mov   ecx, 2
00481966|.B8 8C1A4800   mov   eax, 00481A8C      ;这个地址00481A8C对应字符"5"
0048196B|.E8 E02BF8FF   call    00404550
00481970|.8D55 F0       lea   edx,       ;变形中的第2位为"5"
00481973|.B9 0C000000   mov   ecx, 0C            ;第12位
00481978|.B8 741A4800   mov   eax, 00481A74      ;这个地址00481A74对应字符"S"
0048197D|.E8 CE2BF8FF   call    00404550
00481982|.8D55 F0       lea   edx,       ;变形中的第12位为"S"
00481985|.B9 06000000   mov   ecx, 6               ;第6位
0048198A|.B8 981A4800   mov   eax, 00481A98      ;这个地址00481A98对应字符"B"
0048198F|.E8 BC2BF8FF   call    00404550
00481994|.8D55 F0       lea   edx,       ;变形中的第6位为"B"
00481997|.B9 05000000   mov   ecx, 5               ;第5位
0048199C|.B8 A41A4800   mov   eax, 00481AA4      ;这个地址00481AA4对应字符"-"
004819A1|.E8 AA2BF8FF   call    00404550
004819A6|.8D55 F0       lea   edx,       ;变形中的第5位为"-"
004819A9|.B9 0A000000   mov   ecx, 0A            ;第10位
004819AE|.B8 A41A4800   mov   eax, 00481AA4      ;"-"
004819B3|.E8 982BF8FF   call    00404550
004819B8|.8D55 F0       lea   edx,       ;变形中的第10位为"-"
004819BB|.B9 0F000000   mov   ecx, 0F            ;第15位
004819C0|.B8 A41A4800   mov   eax, 00481AA4      ;"-"
004819C5|.E8 862BF8FF   call    00404550
004819CA|.8D55 F0       lea   edx,       ;变形中的第15位为"-"
004819CD|.B9 12000000   mov   ecx, 12            ;第18位
004819D2|.B8 A41A4800   mov   eax, 00481AA4      ;"-"
004819D7|.E8 742BF8FF   call    00404550
004819DC|.8D55 F0       lea   edx,       ;变形中的第18位为"-"
004819DF|.B9 14000000   mov   ecx, 14            ;第20位
004819E4|.B8 A41A4800   mov   eax, 00481AA4      ;"-"
004819E9|.E8 622BF8FF   call    00404550
004819EE|.8D55 B4       lea   edx,
004819F1|.8B45 F0       mov   eax,       ;变形中的第20位为"-"
004819F4|.E8 CB64F8FF   call    00407EC4
004819F9|.8B55 B4       mov   edx,       ;转换成大写
004819FC|.8B45 F8       mov   eax,          ;假码
004819FF|.E8 B029F8FF   call    004043B4             ;真假注册码的比较
00481A04|.75 29         jnz   short 00481A2F       ;关键跳
00481A06|.B3 01         mov   bl, 1                ;不跳这里BL会置1,跳则EBX会清零
00481A08|.B8 E45C4800   mov   eax, 00485CE4
00481A0D|.8B55 F4       mov   edx,
00481A10|.E8 E725F8FF   call    00403FFC
00481A15|.8D55 B0       lea   edx,
00481A18|.8B45 F0       mov   eax,
00481A1B|.E8 A464F8FF   call    00407EC4
00481A20|.8B55 B0       mov   edx,
00481A23|.B8 E85C4800   mov   eax, 00485CE8
00481A28|.E8 CF25F8FF   call    00403FFC
00481A2D|.EB 02         jmp   short 00481A31
00481A2F|>33DB          xor   ebx, ebx
00481A31|>33C0          xor   eax, eax
00481A33|.5A            pop   edx
00481A34|.59            pop   ecx
00481A35|.59            pop   ecx
00481A36|.64:8910       mov   fs:, edx
00481A39|.68 601A4800   push    00481A60
00481A3E|>8D45 B0       lea   eax,
00481A41|.BA 0D000000   mov   edx, 0D
00481A46|.E8 8125F8FF   call    00403FCC
00481A4B|.8D45 F0       lea   eax,
00481A4E|.BA 04000000   mov   edx, 4
00481A53|.E8 7425F8FF   call    00403FCC
00481A58\.C3            retn
00481A59   .^ E9 4E1FF8FF   jmp   004039AC
00481A5E   .^ EB DE         jmp   short 00481A3E
00481A60   .8BC3          mov   eax, ebx
00481A62   .5F            pop   edi
00481A63   .5E            pop   esi
00481A64   .5B            pop   ebx
00481A65   .8BE5          mov   esp, ebp
00481A67   .5D            pop   ebp
00481A68   .C3            retn



0048171B处的call    004080D4
我们F7后:
004080D4/$56            push    esi
004080D5|.89E6          mov   esi, esp
004080D7|.83EC 10       sub   esp, 10
004080DA|.31C9          xor   ecx, ecx
004080DC|.52            push    edx
004080DD|.31D2          xor   edx, edx
004080DF|.E8 A4FFFFFF   call    00408088             ;继续F7
004080E4|.89F2          mov   edx, esi             ;S2
004080E6|.58            pop   eax
004080E7|.E8 ACBFFFFF   call    00404098
004080EC|.83C4 10       add   esp, 10
004080EF|.5E            pop   esi
004080F0\.C3            retn


004080DF的call 00408088、
我们继续F7:
00408088/$08C9          or      cl, cl
0040808A|.75 17         jnz   short 004080A3
0040808C|.09C0          or      eax, eax             ;S1
0040808E|.79 0E         jns   short 0040809E
00408090|.F7D8          neg   eax
00408092|.E8 07000000   call    0040809E
00408097|.B0 2D         mov   al, 2D
00408099|.41            inc   ecx
0040809A|.4E            dec   esi
0040809B|.8806          mov   , al
0040809D|.C3            retn
0040809E|$B9 0A000000   mov   ecx, 0A            ;ECX=0A
004080A3|>52            push    edx
004080A4|.56            push    esi
004080A5|>31D2          /xor   edx, edx
004080A7|.F7F1          |div   ecx               ;/ 0A
004080A9|.4E            |dec   esi
004080AA|.80C2 30       |add   dl, 30            ;余数 + 30
004080AD|.80FA 3A       |cmp   dl, 3A            ;其和与3A比较
004080B0|.72 03         |jb      short 004080B5      ;小则跳
004080B2|.80C2 07       |add   dl, 7               ;不跳则再 + 7
004080B5|>8816          |mov   , dl         ;结果保存到这里
004080B7|.09C0          |or      eax, eax            ;EAX OR EAX 为空则下面结束循环
004080B9|.^ 75 EA         \jnz   short 004080A5
004080BB|.59            pop   ecx                  ;循环结束得到字符串"409429",设为S2
004080BC|.5A            pop   edx
004080BD|.29F1          sub   ecx, esi             ;ESI为S2的长度
004080BF|.29CA          sub   edx, ecx             ;不高于循环中最后一次的DL值则跳
004080C1|.76 10         jbe   short 004080D3
004080C3|.01D1          add   ecx, edx             ;否则,EDX再 + ECX(S2的长度)
004080C5|.B0 30         mov   al, 30
004080C7|.29D6          sub   esi, edx
004080C9|.EB 03         jmp   short 004080CE
004080CB|>880432      /mov   , al
004080CE|>4A             dec   edx
004080CF|.^ 75 FA         \jnz   short 004080CB
004080D1|.8806          mov   , al
004080D3\>C3            retn

算法总结:
0.依次取硬件ID的ASC累加,其和加上硬件ID长度值*404H(1028),其结果除以2再XOR常数0C87DAH(821210);
XOR的结果再乘以2,其积再OR常数0C8594H(820628);
然后再除以2;商+4BAH(1210),得到的和再和 XOR 常数8E0E0H(581856),结果设为S1。
本例S1=63F55
1.S1除以10,取余数(余数ASC大于等于3A,则余数ASC+7),商则继续除以10,取余数,直到商为0为止。余数转换成对应的字符形式,且倒序,得到S2。
本例S2为字符串“409429”。
3.对S2按下列顺序进行运算:
第6位 + 第3位 + 第6位的和除以5,取余 + 61,      设为Q1                   对应字符:b
第2位 + 第2位的和      除以5,取余 + 61      设为Q2                   对应字符:b
第6位 + 第1位的和      除以5,取余 + 61      设为Q3                   对应字符:e
第1位 + 第5位 + 第3位的和除以5,取余 + 61      设为Q4                   对应字符:e
第6位 + 第3位的和      除以5,取余 + 61      设为Q5                   对应字符:e               
第3位 + 第2位 + 第6位的和除以5,取余 + 61      设为Q6                   对应字符:c
第3位 + 第5位的和      除以5,取余 + 61      设为Q7                   对应字符:c
第1位 + 第1位 + 第3位的和除以5,取余 + 61      设为Q8                   对应字符:b
第2位 + 第3位的和      除以5,取余 + 61      设为Q9                   对应字符:a
第5位 + 第6位 + 第1位的和除以5,取余 + 61      设为Q10                  对应字符:e
4.对第3步运算的结果,在S2的基础上按下面顺序依次连接:
Q8放到S2的第一位去。(不是取代S2的第一位而是相当于Q8连接S2,即开始变形了),本例为“b409429”;
Q6放到变形中的字符串(即“b409429”)第2位,再次变形为“bc409429”;
接着是Q10放到“bc409429”的第4位,成为“bc4e09429”;
然后是Q4放到第6位;
Q2放到第7位;
Q5放到第9位;
Q1放到第10位;
Q3放到第12位;
Q9放到第13位;
Q7放到第15位,这时得到字符串:"bc4e0eb9eb4ea2c9";
取固定字符“S”放到"bc4e0eb9eb4ea2c9"的第8位,得到,"bc4e0ebS9eb4ea2c9";
同样,再取固定字符“X”,“5”、“S”、“B”依次放到第7、2、12、6位,得到字符串"b5c4eB0eXbS9Seb4ea2c9";
再取“-”依次放到第5、10、15、18、20位,直到得字符串"b5c4-eB0e-XbS9-Se-b-4ea2c9"。
5.转大写即为注册码。




注册信息会保存在:
    HKEY_USERS\.DEFAULT\Software\MSSQL5.01\MSSQL5.01
    "XB_N"="WD-WCAT11223415"
    "XB_P"="B5C4-EB0E-XBS9-SE-B-4EA2C9"

删除变回未注册版本!







飘云 发表于 2011-2-20 01:41:41

好一个西数硬盘被暴露。。。

好一个伪装MSSQL5.01\MSSQL5.01

cjteam 发表于 2011-2-20 09:10:30

呵呵,不错的分析过程

Nisy 发表于 2011-2-20 13:43:42

不错 回头写个C的Keygen吧

月之精灵 发表于 2011-2-20 14:03:26

哈哈老G给力哈,谢谢分享

sdzzb 发表于 2011-2-20 21:08:11

学习学习算法

316325 发表于 2011-2-22 00:33:36

看看,不懂算法,顶上~~~

kk378 发表于 2011-2-22 20:25:52

tomjdx 发表于 2011-2-26 19:59:28

这个早就用不了了

GGLHY 发表于 2011-2-27 15:06:52

这个早就用不了了
tomjdx 发表于 2011-2-26 19:59 https://www.chinapyg.com/images/common/back.gif


    呵呵,我的算法分析只是为学习和了解软件作者对软件的保护思想而已。不做其他之用。/:017
页: [1]
查看完整版本: 快速看算法之钢琴***的注册解码分析实录