网游难民 发表于 2006-10-14 19:37:30

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

网游难民 发表于 2006-10-14 19:38:18

贴出来,偶也活着~~/:D

tigerisme 发表于 2006-10-14 19:52:01

兄弟今天高产啊,到处都看到兄弟的好帖子;P

何求 发表于 2006-10-15 09:23:33

强,呵呵.
页: [1]
查看完整版本: MIDI to MP3 Maker V3.1算法分析