快速看算法之钢琴***的注册解码分析实录
本帖最后由 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"
删除变回未注册版本!
好一个西数硬盘被暴露。。。
好一个伪装MSSQL5.01\MSSQL5.01 呵呵,不错的分析过程 不错 回头写个C的Keygen吧 哈哈老G给力哈,谢谢分享 学习学习算法 看看,不懂算法,顶上~~~ 这个早就用不了了 这个早就用不了了
tomjdx 发表于 2011-2-26 19:59 https://www.chinapyg.com/images/common/back.gif
呵呵,我的算法分析只是为学习和了解软件作者对软件的保护思想而已。不做其他之用。/:017
页:
[1]