MIDI to MP3 Maker V3.1算法分析
【文章标题】: MIDI to MP3 Maker V3.1算法分析【文章作者】: 网游难民
【作者主页】: https://www.chinapyg.com/index.php
【软件名称】: MIDI to MP3 Maker V3.1
【软件大小】: 398 KB
【下载地址】: http://www3.skycn.com/soft/25150.html
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: Microsoft Visual C++ 7.0
【使用工具】: PEID,OD
【操作平台】: XP SP2
【软件介绍】: 将文件目录结构或CD/DVD节目列表显示、输出为TXT文
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
OD载入,搜索字符串下断,开始分析~~~
00406EA3 .55 PUSH EBP
00406EA4 .56 PUSH ESI
00406EA5 .57 PUSH EDI
00406EA6 .BF 01000000 MOV EDI,1
00406EAB .57 PUSH EDI
00406EAC .8BF1 MOV ESI,ECX
00406EAE .E8 F3BC0100 CALL midi2mp3.00422BA6
00406EB3 .8B86 B4010000 MOV EAX,DWORD PTR DS: ;用户名放入EAX中~~
00406EB9 .8B68 F4 MOV EBP,DWORD PTR DS: ;用户名位数放在EBP中~
00406EBC .83FD 02 CMP EBP,2 ;用户名位数要大于2~
00406EBF .7D 15 JGE SHORT midi2mp3.00406ED6
00406EC1 .6A 00 PUSH 0
00406EC3 .6A 00 PUSH 0
00406EC5 .68 7C074300 PUSH midi2mp3.0043077C ;please input correct user name!
00406ECA .E8 C4180200 CALL midi2mp3.00428793
00406ECF .5F POP EDI
00406ED0 .5E POP ESI
00406ED1 .5D POP EBP
00406ED2 .83C4 0C ADD ESP,0C
00406ED5 .C3 RETN
00406ED6 >8B8E B8010000 MOV ECX,DWORD PTR DS: ;注册码放在ECX中~~
00406EDC .8379 F4 08 CMP DWORD PTR DS:,8 ;注册码位数要大于8
00406EE0 .7D 15 JGE SHORT midi2mp3.00406EF7
00406EE2 .6A 00 PUSH 0
00406EE4 .6A 00 PUSH 0
00406EE6 .68 54074300 PUSH midi2mp3.00430754 ;please input correct registration code!
00406EEB .E8 A3180200 CALL midi2mp3.00428793
00406EF0 .5F POP EDI
00406EF1 .5E POP ESI
00406EF2 .5D POP EBP
00406EF3 .83C4 0C ADD ESP,0C
00406EF6 .C3 RETN
00406EF7 >8B86 B4010000 MOV EAX,DWORD PTR DS:
00406EFD .8B48 F4 MOV ECX,DWORD PTR DS:
00406F00 .85C9 TEST ECX,ECX
00406F02 .7D 0A JGE SHORT midi2mp3.00406F0E
00406F04 .68 57000780 PUSH 80070057
00406F09 .E8 82A6FFFF CALL midi2mp3.00401590
00406F0E >8A10 MOV DL,BYTE PTR DS: ;用户名第一位ASCII码
00406F10 .8B86 B4010000 MOV EAX,DWORD PTR DS:
00406F16 .3978 F4 CMP DWORD PTR DS:,EDI
00406F19 .7D 0A JGE SHORT midi2mp3.00406F25
00406F1B .68 57000780 PUSH 80070057
00406F20 .E8 6BA6FFFF CALL midi2mp3.00401590
00406F25 >8A40 01 MOV AL,BYTE PTR DS: ;用户名第二位ASCII码
00406F28 .884424 0E MOV BYTE PTR SS:,AL
00406F2C .8B86 B4010000 MOV EAX,DWORD PTR DS:
00406F32 .8B48 F4 MOV ECX,DWORD PTR DS:
00406F35 .85C9 TEST ECX,ECX
00406F37 .7D 0A JGE SHORT midi2mp3.00406F43
00406F39 .68 57000780 PUSH 80070057
00406F3E .E8 4DA6FFFF CALL midi2mp3.00401590
00406F43 >8B8E B4010000 MOV ECX,DWORD PTR DS:
00406F49 .53 PUSH EBX
00406F4A .8A18 MOV BL,BYTE PTR DS: ;用户名第一位ASCII码放在BL中~
00406F4C .3979 F4 CMP DWORD PTR DS:,EDI
00406F4F .7D 0A JGE SHORT midi2mp3.00406F5B
00406F51 .68 57000780 PUSH 80070057
00406F56 .E8 35A6FFFF CALL midi2mp3.00401590
00406F5B >0FB6C2 MOVZX EAX,DL
00406F5E .83C8 4D OR EAX,4D ;用户名第一位ASCII码与4D逻辑或运算~,结果记为A
00406F61 .99 CDQ
00406F62 .BF 0A000000 MOV EDI,0A
00406F67 .F7FF IDIV EDI ;A除EDI中的值,即0A,余数记为a。
00406F69 .0FB64424 12 MOVZX EAX,BYTE PTR SS: ;用户名第二位ASCII码
00406F6E .83C8 44 OR EAX,44 ;用户名第一位ASCII码与44逻辑或运算~,结果记为B
00406F71 .885424 16 MOV BYTE PTR SS:,DL ;a储存在SS:中~~~
00406F75 .99 CDQ
00406F76 .F7FF IDIV EDI ;B除0A,余数记为b;
00406F78 .0FB6C3 MOVZX EAX,BL ;用户名第一位ASCII码放在EAX中~
00406F7B .83C8 32 OR EAX,32 ;用户名第一位ASCII码与32进行逻辑或运算,结果记为C~
00406F7E 885424 12 MOV BYTE PTR SS:,DL ;b储存在SS:中~~
00406F82 .99 CDQ
00406F83 .F7FF IDIV EDI ;C除以0A,余数记为c~
00406F85 .0FB641 01 MOVZX EAX,BYTE PTR DS: ;用户名第二位ASCII码放在EAX中~
00406F89 .83C8 4D OR EAX,4D ;用户名第二位ASCII码与4D进行逻辑或运算~结果记为D~~
00406F8C .8BCF MOV ECX,EDI
00406F8E 885424 17 MOV BYTE PTR SS:,DL ;c保存在SS:中~~
00406F92 .99 CDQ
00406F93 .F7F9 IDIV ECX ;D除以0A,余数记为d~
00406F95 .33C0 XOR EAX,EAX
00406F97 .33C9 XOR ECX,ECX
00406F99 .85ED TEST EBP,EBP
00406F9B .885424 18 MOV BYTE PTR SS:,DL ;d保存在SS:中~~
00406F9F .7E 22 JLE SHORT midi2mp3.00406FC3
00406FA1 >85C9 TEST ECX,ECX
00406FA3 .0F8C ED000000 JL midi2mp3.00407096
00406FA9 .8BBE B4010000 MOV EDI,DWORD PTR DS:
00406FAF .3B4F F4 CMP ECX,DWORD PTR DS:
00406FB2 .0F8F DE000000 JG midi2mp3.00407096
00406FB8 .0FB6140F MOVZX EDX,BYTE PTR DS:
00406FBC .03C2 ADD EAX,EDX
00406FBE .41 INC ECX
00406FBF .3BCD CMP ECX,EBP
00406FC1 .^ 7C DE JL SHORT midi2mp3.00406FA1 ;循环,求注册名的ASCII累加和~结果记为E~~
00406FC3 >8B8E B8010000 MOV ECX,DWORD PTR DS:
00406FC9 .8B51 F4 MOV EDX,DWORD PTR DS:
00406FCC .85D2 TEST EDX,EDX
00406FCE .7D 0A JGE SHORT midi2mp3.00406FDA
00406FD0 .68 57000780 PUSH 80070057
00406FD5 .E8 B6A5FFFF CALL midi2mp3.00401590
00406FDA >8A11 MOV DL,BYTE PTR DS: ;注册码第一位ASCII码放在DL中~
00406FDC .8B8E B8010000 MOV ECX,DWORD PTR DS:
00406FE2 .8379 F4 01 CMP DWORD PTR DS:,1
00406FE6 .885424 19 MOV BYTE PTR SS:,DL ;注册码第一位ASCII码放在SS:中~
00406FEA .7D 0A JGE SHORT midi2mp3.00406FF6
00406FEC .68 57000780 PUSH 80070057
00406FF1 .E8 9AA5FFFF CALL midi2mp3.00401590
00406FF6 >8A49 01 MOV CL,BYTE PTR DS: ;注册码第二位ASCII码放在CL中~
00406FF9 .8BBE B8010000 MOV EDI,DWORD PTR DS:
00406FFF 884C24 13 MOV BYTE PTR SS:,CL ;注册码第二位ASCII码放在SS:中~
00407003 .837F F4 02 CMP DWORD PTR DS:,2
00407007 .7D 0A JGE SHORT midi2mp3.00407013
00407009 .68 57000780 PUSH 80070057
0040700E .E8 7DA5FFFF CALL midi2mp3.00401590
00407013 >8A4F 02 MOV CL,BYTE PTR DS: ;注册码第三位ASCII码放在CL中~
00407016 .8BBE B8010000 MOV EDI,DWORD PTR DS:
0040701C .884C24 14 MOV BYTE PTR SS:,CL ;注册码第三位ASCII码放在SS:中~
00407020 .837F F4 03 CMP DWORD PTR DS:,3
00407024 .7D 0A JGE SHORT midi2mp3.00407030
00407026 .68 57000780 PUSH 80070057
0040702B .E8 60A5FFFF CALL midi2mp3.00401590
00407030 >8A4F 03 MOV CL,BYTE PTR DS: ;注册码第四位ASCII码放在CL中~
00407033 .8BBE B8010000 MOV EDI,DWORD PTR DS:
00407039 .884C24 15 MOV BYTE PTR SS:,CL ;注册码第四位ASCII码放在SS:中~
0040703D .837F F4 04 CMP DWORD PTR DS:,4
00407041 .7D 0A JGE SHORT midi2mp3.0040704D
00407043 .68 57000780 PUSH 80070057
00407048 .E8 43A5FFFF CALL midi2mp3.00401590
0040704D >8A4F 04 MOV CL,BYTE PTR DS: ;注册码第五位ASCII码放在CL中~
00407050 .8BBE B8010000 MOV EDI,DWORD PTR DS:
00407056 .837F F4 05 CMP DWORD PTR DS:,5
0040705A .7D 0A JGE SHORT midi2mp3.00407066
0040705C .68 57000780 PUSH 80070057
00407061 .E8 2AA5FFFF CALL midi2mp3.00401590
00407066 >8A5F 05 MOV BL,BYTE PTR DS: ;注册码第六位ASCII码放在BL中~
00407069 .8BBE B8010000 MOV EDI,DWORD PTR DS:
0040706F .885C24 1A MOV BYTE PTR SS:,BL ;注册码第六位ASCII码放在SS:中~~
00407073 .837F F4 06 CMP DWORD PTR DS:,6
00407077 .7D 0A JGE SHORT midi2mp3.00407083
00407079 .68 57000780 PUSH 80070057
0040707E .E8 0DA5FFFF CALL midi2mp3.00401590
00407083 >8A5F 06 MOV BL,BYTE PTR DS: ;注册码第七位ASCII码放在BL中~
00407086 .8BBE B8010000 MOV EDI,DWORD PTR DS:
0040708C .885C24 1B MOV BYTE PTR SS:,BL ;注册码第七位ASCII码放在SS:中~
00407090 .837F F4 07 CMP DWORD PTR DS:,7
00407094 .7D 0A JGE SHORT midi2mp3.004070A0
00407096 >68 57000780 PUSH 80070057
0040709B .E8 F0A4FFFF CALL midi2mp3.00401590
004070A0 >8A5F 07 MOV BL,BYTE PTR DS: ;注册码第八位ASCII码放在BL中~
004070A3 .0FB67C24 16 MOVZX EDI,BYTE PTR SS: ;a放在EDI中~~
004070A8 .0FB6D2 MOVZX EDX,DL
004070AB .83EA 30 SUB EDX,30
004070AE .3BFA CMP EDI,EDX ;注册码第一位和a比较,
004070B0 .75 48 JNZ SHORT midi2mp3.004070FA ;不相等就跳向通用注册码校验~
004070B2 .0FB65424 13 MOVZX EDX,BYTE PTR SS: ;注册码第二位放在EDX中~~
004070B7 .0FB67C24 12 MOVZX EDI,BYTE PTR SS: ;b放在EDI中~~
004070BC .83EA 30 SUB EDX,30
004070BF .3BFA CMP EDI,EDX ;b和第二位注册码比较
004070C1 .75 37 JNZ SHORT midi2mp3.004070FA ;不相等就跳向通用注册码校验~
004070C3 .0FB65424 14 MOVZX EDX,BYTE PTR SS: ;注册码第三位放在EDX中~~
004070C8 .0FB67C24 17 MOVZX EDI,BYTE PTR SS: ;c放在EDI中~~
004070CD .83EA 30 SUB EDX,30
004070D0 .3BFA CMP EDI,EDX ;c和第三位注册码比较
004070D2 .75 26 JNZ SHORT midi2mp3.004070FA ;不相等就跳向通用注册码校验~
004070D4 .0FB65424 15 MOVZX EDX,BYTE PTR SS: ;注册码第四位放在EDX中~~
004070D9 .0FB67C24 18 MOVZX EDI,BYTE PTR SS: ;d放在EDI中~~
004070DE .83EA 30 SUB EDX,30
004070E1 .3BFA CMP EDI,EDX ;d和第四位注册码比较
004070E3 .75 15 JNZ SHORT midi2mp3.004070FA ;不相等就跳向通用注册码校验~
004070E5 .99 CDQ ;扩展指令~
004070E6 .BF 0A000000 MOV EDI,0A
004070EB .F7FF IDIV EDI ;E(注册名ASCII码之和)除0A,余数记位e~~
004070ED .0FB6C2 MOVZX EAX,DL
004070F0 .0FB6D1 MOVZX EDX,CL
004070F3 .83EA 30 SUB EDX,30
004070F6 .3BC2 CMP EAX,EDX ;e和注册码第五位比较
004070F8 .74 3C JE SHORT midi2mp3.00407136 ;不相等就校验通用注册码~
004070FA >8A5424 19 MOV DL,BYTE PTR SS: ;注册码第一位放在DL中~~
004070FE .B0 33 MOV AL,33
00407100 .3AD0 CMP DL,AL ;注册码第一位ASCII码和33比较~
00407102 .0F85 8A000000 JNZ midi2mp3.00407192 ;不相等就跳向错误提示
00407108 .384424 13 CMP BYTE PTR SS:,AL ;注册码第二位ASCII码和33比较~
0040710C .0F85 80000000 JNZ midi2mp3.00407192 ;不相等就跳向错误提示
00407112 .384424 14 CMP BYTE PTR SS:,AL ;注册码第三位ASCII码和33比较~
00407116 .75 7A JNZ SHORT midi2mp3.00407192 ;不相等就跳向错误提示
00407118 .807C24 15 36CMP BYTE PTR SS:,36 ;注册码第四位ASCII码和36比较~
0040711D .75 73 JNZ SHORT midi2mp3.00407192
0040711F .80F9 36 CMP CL,36 ;注册码第五位ASCII码和36比较~
00407122 .75 6E JNZ SHORT midi2mp3.00407192 ;不相等就跳向错误提示
00407124 .807C24 1A 31CMP BYTE PTR SS:,31 ;注册码第六位ASCII码和31比较~
00407129 .75 67 JNZ SHORT midi2mp3.00407192 ;不相等就跳向错误提示
0040712B .807C24 1B 34CMP BYTE PTR SS:,34 ;注册码第七位ASCII码和34比较~
00407130 .75 60 JNZ SHORT midi2mp3.00407192 ;不相等就跳向错误提示
00407132 .3AD9 CMP BL,CL ;注册码第八位ASCII码和36比较~
00407134 .75 5C JNZ SHORT midi2mp3.00407192 ;不相等就跳向错误提示
00407136 >6A 00 PUSH 0
00407138 .6A 00 PUSH 0
0040713A .68 38074300 PUSH midi2mp3.00430738 ;registration has succeeded!
0040713F .E8 4F160200 CALL midi2mp3.00428793
00407144 .8BBE B4010000 MOV EDI,DWORD PTR DS:
0040714A .E8 9D2D0200 CALL midi2mp3.00429EEC
0040714F .8B40 04 MOV EAX,DWORD PTR DS:
00407152 .57 PUSH EDI ; /Arg3
--------------------------------------------------------------------------------
【经验总结】
注册名要大于2,注册码要大于8~
第一位注册码必须是用户名第一位ASCII码与4D逻辑或运算除0A的余数。
第二位注册码必须是用户名第一位ASCII码与44逻辑或运算除0A的余数/
第三位注册码必须是用户名第一位ASCII码与32逻辑或运算除0A的余数。
第四位注册码必须是用户名第二位ASCII码与4D逻辑或运算除0A的余数。
第五位注册码必须是用户名ASCII码之和除0A的余数。
或者是通用注册码:
33366146
--------------------------------------------------------------------------------
【版权声明】: 本菜鸟初学算法, 转载请注明作者并保持文章的完整, 谢谢!
2006年10月14日 19:12:02 贴出来,偶也活着~~/:D 兄弟今天高产啊,到处都看到兄弟的好帖子;P 强,呵呵.
页:
[1]