题目:图像转换工具“魔法转换2.0”注册码分析
功能:功能强大的图像转换工具(吹牛?)。包括图像浏览、批量转换、图像增强及作品预览四大部分。图像增强包括调整图像大小、调整层次、旋转、镜象,还有锐化、模糊、马塞克、浮雕、底片、旋涡、喷雾等效果。你可以将这些效果自定义成方案,然后再进行批量转换。而且它还支持拖入文件到批量转换列表。同时它还能方便的将图像生成.EXE可执行文件。
工具:softice,PEID,Casper
引子:今天又实验了一下这个图片批量转换工具,实在不敢恭维,里面没有帮助,我转换图片不成功,只是对其注册码机制感兴趣,所以才有了这篇破文。拿PEID检查一下,还是用ASPack 2.000 -> Alexey Solodovnikov加壳的。用CASPER可以脱壳,方便抓取代码写破文。启动程序,打开“帮助”菜单,点击“注册”,弹出注册窗口,输入姓名wanggang,注册码654321。调出Softice,下断点bpx hmemcpy,F5退出,然后点击“确定”,被拦截。按7次F12即可来到主程序空间内:
00561263 |> 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
00561266 |. 8B83 E8020000 MOV EAX,DWORD PTR DS:[EBX+2E8]
0056126C |. E8 FB78EDFF CALL MAGCT1.00438B6C
00561271 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] //注册码地址送EAX。
00561274 |. 50 PUSH EAX
00561275 |. 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10]
00561278 |. 8B83 E4020000 MOV EAX,DWORD PTR DS:[EBX+2E4]
0056127E |. E8 E978EDFF CALL MAGCT1.00438B6C
00561283 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00561286 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
00561289 |. E8 4E4CFFFF CALL MAGCT1.00555EDC //此函数产生注册码。分析在后面。 (1)
0056128E |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
00561291 |. 58 POP EAX
00561292 |. E8 052FEAFF CALL MAGCT1.0040419C //这个函数比较真假码。分析在后面。(2)
00561297 |. 0F85 CE000000 JNZ MAGCT1.0056136B //如果注册码正确,则这里就不跳。
0056129D |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
005612A0 |. E8 EF48FFFF CALL MAGCT1.00555B94
005612A5 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
005612A8 |. BA D8135600 MOV EDX,MAGCT1.005613D8 ; ASCII "\win.ini"
005612AD |. E8 E22DEAFF CALL MAGCT1.00404094 //把注册码和用户名写入win.ini内。
005612B2 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
005612B5 |. B2 01 MOV DL,1
005612B7 |. A1 9C344700 MOV EAX,DWORD PTR DS:[47349C]
005612BC |. E8 2B23F1FF CALL MAGCT1.004735EC
005612C1 |. A3 E4675700 MOV DWORD PTR DS:[5767E4],EAX
005612C6 |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
005612C9 |. 8B83 E4020000 MOV EAX,DWORD PTR DS:[EBX+2E4]
005612CF |. E8 9878EDFF CALL MAGCT1.00438B6C
005612D4 |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
005612D7 |. 50 PUSH EAX
005612D8 |. B9 EC135600 MOV ECX,MAGCT1.005613EC ; ASCII "name"
005612DD |. BA FC135600 MOV EDX,MAGCT1.005613FC ; ASCII "magct"
005612E2 |. A1 E4675700 MOV EAX,DWORD PTR DS:[5767E4]
005612E7 |. 8B30 MOV ESI,DWORD PTR DS:[EAX]
005612E9 |. FF56 04 CALL DWORD PTR DS:[ESI+4]
005612EC |. 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
005612EF |. 8B83 E8020000 MOV EAX,DWORD PTR DS:[EBX+2E8]
005612F5 |. E8 7278EDFF CALL MAGCT1.00438B6C
005612FA |. 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C]
005612FD |. 50 PUSH EAX
005612FE |. B9 0C145600 MOV ECX,MAGCT1.0056140C ; ASCII "code"
00561303 |. BA FC135600 MOV EDX,MAGCT1.005613FC ; ASCII "magct"
00561308 |. A1 E4675700 MOV EAX,DWORD PTR DS:[5767E4]
0056130D |. 8B30 MOV ESI,DWORD PTR DS:[EAX]
0056130F |. FF56 04 CALL DWORD PTR DS:[ESI+4]
00561312 |. A1 E4675700 MOV EAX,DWORD PTR DS:[5767E4]
00561317 |. E8 781DEAFF CALL MAGCT1.00403094
0056131C |. BA 1C145600 MOV EDX,MAGCT1.0056141C
00561321 |. 8B83 F4020000 MOV EAX,DWORD PTR DS:[EBX+2F4]
00561327 |. E8 7078EDFF CALL MAGCT1.00438B9C
0056132C |. 33D2 XOR EDX,EDX
0056132E |. 8B83 F0020000 MOV EAX,DWORD PTR DS:[EBX+2F0]
00561334 |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
00561336 |. FF51 5C CALL DWORD PTR DS:[ECX+5C]
00561339 |. 6A 40 PUSH 40
0056133B |. 68 24145600 PUSH MAGCT1.00561424
00561340 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
00561343 |. 8B83 E4020000 MOV EAX,DWORD PTR DS:[EBX+2E4]
00561349 |. E8 1E78EDFF CALL MAGCT1.00438B6C
0056134E |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
00561351 |. BA 38145600 MOV EDX,MAGCT1.00561438
00561356 |. E8 392DEAFF CALL MAGCT1.00404094
0056135B |. 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
0056135E |. E8 ED2EEAFF CALL MAGCT1.00404250
00561363 |. 50 PUSH EAX ; |Text = "U??鹩3?E鸶?V"
00561364 |. 6A 00 PUSH 0 ; |hOwner = NULL
00561366 |. E8 F567EAFF CALL <JMP.&user32.MessageBoxA> ; \MessageBox //显示注册成功。
=====================================================================================================
下面分析(1)处的函数:
00555EDC /$ 55 PUSH EBP
00555EDD |. 8BEC MOV EBP,ESP
00555EDF |. 83C4 F4 ADD ESP,-0C
00555EE2 |. 53 PUSH EBX
00555EE3 |. 56 PUSH ESI
00555EE4 |. 57 PUSH EDI
00555EE5 |. 33C9 XOR ECX,ECX
00555EE7 |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
00555EEA |. 8BFA MOV EDI,EDX
00555EEC |. 8BF0 MOV ESI,EAX
00555EEE |. 33C0 XOR EAX,EAX
00555EF0 |. 55 PUSH EBP
00555EF1 |. 68 A95F5500 PUSH MAGCT1.00555FA9
00555EF6 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
00555EF9 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00555EFC |. 85F6 TEST ESI,ESI
00555EFE |. 0F84 8F000000 JE MAGCT1.00555F93
00555F04 |. 8BC6 MOV EAX,ESI
00555F06 |. E8 81E1EAFF CALL MAGCT1.0040408C //取用户名长度。
00555F0B |. 85C0 TEST EAX,EAX
00555F0D |. 7E 4D JLE SHORT MAGCT1.00555F5C //用户名长度为0则错。
00555F0F |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX //用户名长度送[EBP-8],作为循环次数。
00555F12 |. BB 01000000 MOV EBX,1 //EBX初始化为1。
00555F17 |> 33C0 /XOR EAX,EAX
00555F19 |. 8A441E FF |MOV AL,BYTE PTR DS:[ESI+EBX-1] //用户名字符依次送AL。
00555F1D |. 99 |CDQ //扩展到EDX。
00555F1E |. F7FB |IDIV EBX //除以EBX。EBX分别取1到用户名长度。
00555F20 |. 8945 FC |MOV DWORD PTR SS:[EBP-4],EAX //EAX为商,保存到[EBP-4]
00555F23 |. 8BC6 |MOV EAX,ESI
00555F25 |. E8 62E1EAFF |CALL MAGCT1.0040408C //取用户名长度。
00555F2A |. 50 |PUSH EAX //长度压栈。
00555F2B |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4] //把商送EAX。
00555F2E |. 5A |POP EDX //长度出栈,送EDX。
00555F2F |. 8BCA |MOV ECX,EDX //EDX送ECX。
00555F31 |. 99 |CDQ
00555F32 |. F7F9 |IDIV ECX //EAX再次除以长度。
00555F34 |. 33D2 |XOR EDX,EDX
00555F36 |. 8A541E FF |MOV DL,BYTE PTR DS:[ESI+EBX-1] //用户名字符取到DL。
00555F3A |. 83C2 03 |ADD EDX,3 //字符加3。
00555F3D |. F7EA |IMUL EDX //EAX乘以EDX。
00555F3F |. 8D4D F4 |LEA ECX,DWORD PTR SS:[EBP-C]
00555F42 |. BA 03000000 |MOV EDX,3
00555F47 |. E8 BC34EBFF |CALL MAGCT1.00409408 //此函数把得到的3字节数字变换为对应的3个ASSIC码。(3)
00555F4C |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C] //新串地址送EDX。
00555F4F |. 8BC7 |MOV EAX,EDI
00555F51 |. E8 3EE1EAFF |CALL MAGCT1.00404094 //把每次得到的3位字符串接起来。
00555F56 |. 43 |INC EBX
00555F57 |. FF4D F8 |DEC DWORD PTR SS:[EBP-8] //计数器减1。
00555F5A |.^75 BB \JNZ SHORT MAGCT1.00555F17 //未完则继续循环。
00555F5C |> 8B07 MOV EAX,DWORD PTR DS:[EDI]
00555F5E |. E8 29E1EAFF CALL MAGCT1.0040408C //取新串长度。
00555F63 |. 83F8 08 CMP EAX,8
00555F66 |. 7D 10 JGE SHORT MAGCT1.00555F78 //大于8则OK。
00555F68 |. 8B0F MOV ECX,DWORD PTR DS:[EDI]
00555F6A |. 8BC7 MOV EAX,EDI
00555F6C |. BA C05F5500 MOV EDX,MAGCT1.00555FC0
00555F71 |. E8 62E1EAFF CALL MAGCT1.004040D8
00555F76 |. EB 1B JMP SHORT MAGCT1.00555F93
00555F78 |> 8B07 MOV EAX,DWORD PTR DS:[EDI] //新串地址送EAX。
00555F7A |. E8 0DE1EAFF CALL MAGCT1.0040408C //取串长。
00555F7F |. 83F8 0C CMP EAX,0C //与C比较。
00555F82 |. 7E 0F JLE SHORT MAGCT1.00555F93 //小于等于C则跳。
00555F84 |. 57 PUSH EDI
00555F85 |. 8B07 MOV EAX,DWORD PTR DS:[EDI]
00555F87 |. B9 0C000000 MOV ECX,0C
00555F8C |. 33D2 XOR EDX,EDX
00555F8E |. E8 01E3EAFF CALL MAGCT1.00404294 //此函数取产生的新串的前12位做为注册码。
00555F93 |> 33C0 XOR EAX,EAX
00555F95 |. 5A POP EDX
00555F96 |. 59 POP ECX
00555F97 |. 59 POP ECX
00555F98 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00555F9B |. 68 B05F5500 PUSH MAGCT1.00555FB0
00555FA0 |> 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00555FA3 |. E8 54DEEAFF CALL MAGCT1.00403DFC
00555FA8 \. C3 RETN
=====================================================================================================
下面分析(2)处函数:
0040419C /$ 53 PUSH EBX
0040419D |. 56 PUSH ESI
0040419E |. 57 PUSH EDI
0040419F |. 89C6 MOV ESI,EAX
004041A1 |. 89D7 MOV EDI,EDX
004041A3 |. 39D0 CMP EAX,EDX
004041A5 |. 0F84 8F000000 JE MAGCT1.0040423A
004041AB |. 85F6 TEST ESI,ESI
004041AD |. 74 68 JE SHORT MAGCT1.00404217
004041AF |. 85FF TEST EDI,EDI
004041B1 |. 74 6B JE SHORT MAGCT1.0040421E
004041B3 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] //假码长度送EAX。
004041B6 |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4] //真码长度送EDX。
004041B9 |. 29D0 SUB EAX,EDX
004041BB |. 77 02 JA SHORT MAGCT1.004041BF //假码比真码长则OVER。
004041BD |. 01C2 ADD EDX,EAX
004041BF |> 52 PUSH EDX
004041C0 |. C1EA 02 SHR EDX,2
004041C3 |. 74 26 JE SHORT MAGCT1.004041EB
004041C5 |> 8B0E /MOV ECX,DWORD PTR DS:[ESI] //假码送ECX。
004041C7 |. 8B1F |MOV EBX,DWORD PTR DS:[EDI] //真码送EBX。
004041C9 |. 39D9 |CMP ECX,EBX //比较。
004041CB |. 75 58 |JNZ SHORT MAGCT1.00404225 //不等则OVER。
004041CD |. 4A |DEC EDX
004041CE |. 74 15 |JE SHORT MAGCT1.004041E5 //比较结束则跳。
004041D0 |. 8B4E 04 |MOV ECX,DWORD PTR DS:[ESI+4]
004041D3 |. 8B5F 04 |MOV EBX,DWORD PTR DS:[EDI+4]
004041D6 |. 39D9 |CMP ECX,EBX
004041D8 |. 75 4B |JNZ SHORT MAGCT1.00404225
004041DA |. 83C6 08 |ADD ESI,8
004041DD |. 83C7 08 |ADD EDI,8
004041E0 |. 4A |DEC EDX
004041E1 |.^75 E2 \JNZ SHORT MAGCT1.004041C5 //未完则继续循环。
004041E3 |. EB 06 JMP SHORT MAGCT1.004041EB
004041E5 |> 83C6 04 ADD ESI,4
004041E8 |. 83C7 04 ADD EDI,4
004041EB |> 5A POP EDX
004041EC |. 83E2 03 AND EDX,3
*省去多行*
00404225 |> 5A POP EDX
00404226 |. 38D9 CMP CL,BL
00404228 |. 75 10 JNZ SHORT MAGCT1.0040423A
0040422A |. 38FD CMP CH,BH
0040422C |. 75 0C JNZ SHORT MAGCT1.0040423A
0040422E |. C1E9 10 SHR ECX,10
00404231 |. C1EB 10 SHR EBX,10
00404234 |. 38D9 CMP CL,BL
00404236 |. 75 02 JNZ SHORT MAGCT1.0040423A
00404238 |. 38FD CMP CH,BH
0040423A |> 5F POP EDI
0040423B |. 5E POP ESI
0040423C |. 5B POP EBX
0040423D \. C3 RETN
=====================================================================================================
下面分析(3)处函数:
00409408 /$ 83C4 F0 ADD ESP,-10
0040940B |. 6A 01 PUSH 1
0040940D |. 895424 04 MOV DWORD PTR SS:[ESP+4],EDX
00409411 |. C64424 08 00 MOV BYTE PTR SS:[ESP+8],0
00409416 |. 894424 0C MOV DWORD PTR SS:[ESP+C],EAX
0040941A |. C64424 10 00 MOV BYTE PTR SS:[ESP+10],0
0040941F |. 8D4424 04 LEA EAX,DWORD PTR SS:[ESP+4]
00409423 |. BA 3C944000 MOV EDX,MAGCT1.0040943C
00409428 |. 91 XCHG EAX,ECX
00409429 |. E8 7A0E0000 CALL MAGCT1.0040A2A8 //跟入这个函数,代码在后面: (4)
0040942E |. 83C4 10 ADD ESP,10
00409431 \. C3 RETN
*****
函数(4)代码如下:
0040A2A8 /$ 55 PUSH EBP
0040A2A9 |. 8BEC MOV EBP,ESP
0040A2AB |. 81C4 04F0FFFF ADD ESP,-0FFC
*省略多行*
0040A2F7 |. 8D85 F6EFFFFF LEA EAX,DWORD PTR SS:[EBP-100A]
0040A2FD |. E8 32FBFFFF CALL MAGCT1.00409E34 //这个函数分解得到16进制数为字符。 (5)
0040A302 |. EB 0C JMP SHORT MAGCT1.0040A310
0040A304 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040A307 |. E8 809DFFFF CALL MAGCT1.0040408C
0040A30C |. 8BD8 MOV EBX,EAX
0040A30E |. 8BC3 MOV EAX,EBX
0040A310 |> 8BD3 MOV EDX,EBX
0040A312 |. 4A DEC EDX
0040A313 |. 3BC2 CMP EAX,EDX
0040A315 |. 7C 43 JL SHORT MAGCT1.0040A35A //此处跳走。
*省去多行*
0040A35A |> 8D95 F6EFFFFF LEA EDX,DWORD PTR SS:[EBP-100A] //分解出的3位字符的地址送EDX。
0040A360 |. 8BCE MOV ECX,ESI
0040A362 |. 91 XCHG EAX,ECX
0040A363 |. E8 7C9BFFFF CALL MAGCT1.00403EE4 //复制得到3位字符到另外地址。
0040A368 |> 5E POP ESI
0040A369 |. 5B POP EBX
0040A36A |. 8BE5 MOV ESP,EBP
0040A36C |. 5D POP EBP
0040A36D \. C2 0400 RETN 4
函数(5)的代码如下:
*省去多行*
00409E84 > 8845 EB MOV BYTE PTR SS:[EBP-15],AL
00409E87 . 80F8 2D CMP AL,2D
00409E8A . 75 05 JNZ SHORT MAGCT1.00409E91
00409E8C . 39CE CMP ESI,ECX
00409E8E .^74 DA JE SHORT MAGCT1.00409E6A
00409E90 . AC LODS BYTE PTR DS:[ESI]
00409E91 > E8 80000000 CALL MAGCT1.00409F16
00409E96 . 80F8 3A CMP AL,3A
00409E99 . 75 0A JNZ SHORT MAGCT1.00409EA5
00409E9B . 895D F8 MOV DWORD PTR SS:[EBP-8],EBX
00409E9E . 39CE CMP ESI,ECX
00409EA0 .^74 C8 JE SHORT MAGCT1.00409E6A
00409EA2 . AC LODS BYTE PTR DS:[ESI]
00409EA3 .^EB DF JMP SHORT MAGCT1.00409E84
00409EA5 > 895D E4 MOV DWORD PTR SS:[EBP-1C],EBX
00409EA8 . BB FFFFFFFF MOV EBX,-1
00409EAD . 80F8 2E CMP AL,2E
00409EB0 . 75 0A JNZ SHORT MAGCT1.00409EBC
00409EB2 . 39CE CMP ESI,ECX
00409EB4 .^74 B4 JE SHORT MAGCT1.00409E6A
00409EB6 . AC LODS BYTE PTR DS:[ESI]
00409EB7 . E8 5A000000 CALL MAGCT1.00409F16
00409EBC > 895D E0 MOV DWORD PTR SS:[EBP-20],EBX
00409EBF . 8975 DC MOV DWORD PTR SS:[EBP-24],ESI
00409EC2 . 51 PUSH ECX
00409EC3 . 52 PUSH EDX
00409EC4 . E8 96000000 CALL MAGCT1.00409F5F //在这个函数内进行变换。 (6)
00409EC9 . 5A POP EDX
00409ECA . 8B5D E4 MOV EBX,DWORD PTR SS:[EBP-1C]
00409ECD . 29CB SUB EBX,ECX
00409ECF . 73 02 JNB SHORT MAGCT1.00409ED3
*省略多行*
00409EFB > F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] //把分解的字符复制到另外地址。
00409EFD . 837D F4 00 CMP DWORD PTR SS:[EBP-C],0
00409F01 . 74 0A JE SHORT MAGCT1.00409F0D
00409F03 . 52 PUSH EDX
00409F04 . 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00409F07 . E8 1CFFFFFF CALL MAGCT1.00409E28
00409F0C . 5A POP EDX
00409F0D > 59 POP ECX
00409F0E . 8B75 DC MOV ESI,DWORD PTR SS:[EBP-24]
00409F11 .^E9 42FFFFFF JMP MAGCT1.00409E58
函数(6)的代码如下:
00409F5F /$ 24 DF AND AL,0DF
00409F61 |. 88C1 MOV CL,AL
00409F63 |. B8 01000000 MOV EAX,1
00409F68 |. 8B5D F8 MOV EBX,DWORD PTR SS:[EBP-8]
00409F6B |. 3B5D 08 CMP EBX,DWORD PTR SS:[EBP+8]
00409F6E |. 77 5C JA SHORT MAGCT1.00409FCC
00409F70 |. FF45 F8 INC DWORD PTR SS:[EBP-8]
00409F73 |. 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C]
00409F76 |. 8D34DE LEA ESI,DWORD PTR DS:[ESI+EBX*8]
00409F79 |. 8B06 MOV EAX,DWORD PTR DS:[ESI] //取分解之前的数到EAX。
00409F7B |. 0FB65E 04 MOVZX EBX,BYTE PTR DS:[ESI+4]
00409F7F |. FF249D 869F400>JMP DWORD PTR DS:[EBX*4+409F86]
*省去多行*
0040A0AE |> 31D2 /XOR EDX,EDX
0040A0B0 |. F7F1 |DIV ECX //EAX除以ECX,ECX内为10h。
0040A0B2 |. 80C2 30 |ADD DL,30 //余数加30h。
0040A0B5 |. 80FA 3A |CMP DL,3A //与3A比较。
0040A0B8 |. 72 03 |JB SHORT MAGCT1.0040A0BD //如果小于则为数字。
0040A0BA |. 80C2 07 |ADD DL,7 //否则加7,变为大写字符。
0040A0BD |> 4E |DEC ESI
0040A0BE |. 8816 |MOV BYTE PTR DS:[ESI],DL
0040A0C0 |. 09C0 |OR EAX,EAX
0040A0C2 |.^75 EA \JNZ SHORT MAGCT1.0040A0AE //未完继续。
0040A0C4 |. 8D4D 9F LEA ECX,DWORD PTR SS:[EBP-61]
0040A0C7 |. 29F1 SUB ECX,ESI
0040A0C9 |. 8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20]
0040A0CC |. 83FA 10 CMP EDX,10
0040A0CF |. 76 01 JBE SHORT MAGCT1.0040A0D2
0040A0D1 |. C3 RETN
================================================================================
后记:
跟踪这个软件倒是没有费多大劲,写这篇破文也就用了1个小时。注册机制比较简单,就是根据用户名前4位计算得到12位注册码。下面附上一个比较简单的注册机,TC写的,非常糟糕,希望不要见笑!
#include "string.h"
main()
{
char name[20],s[3];
int i,j,yushu,temp;
int eax,ebx,ecx,edx;
printf("input your name\n");
scanf("%s",name);
ebx=1;
ecx=strlen(name);
for(i=0;i<4;i++)
{eax=name[i];
edx=eax;
eax=eax/ebx;
ebx++;
eax=eax/ecx;
eax=eax*(edx+3); //计算姓名前4位。
temp=eax;
{for(j=0;j<3;j++) //此循环把每个字符变ASSIC码。
{
yushu=temp%0x10;
yushu=(0xf&yushu)+0x30;
temp=temp/0x10;
if(yushu<0x3a)
s[2-j]=yushu;
else
{yushu=yushu+7;
s[2-j]=yushu;}
}
printf("%s",s);}
}
}
结论:
随便写出几个注册码:
用户名 注册码
cracker 5943A8190132
wanggang 6AC2581C413E
注册成功后,在win.ini文件内写入注册码和用户名,明码形式。如果修改里面的注册码就可以重新注册了。
最后感谢您的支持和关注!!
qduwg
qduwg@163.com
2006年2月5日完稿
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!