【破文标题】Ease MP3 Recorder 1.50 算法分析
【破文作者】tianxj
【作者邮箱】tianxj_2007@126.com
【作者主页】WwW.ChiNaPYG.CoM
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】Ease MP3 Recorder 1.50  
【软件大小】4292KB 
【软件类别】国外软件/音频处理  
【软件授权】共享版 
【软件语言】英文 
【运行环境】Win9x/Me/NT/2000/XP/2003 
【更新时间】2007-9-28
【原版下载】http://www.audiotool.net/download/mp3recorder.exe
【保护方式】注册码
【软件简介】Audiotool Ease MP3 Recorder 可以录制十几种格式的音乐文件,包括:WAV、MP3、OGG、WMA、GSM、ADPCM、VOX、RAW、DSP、GSM、G726、G23等,任何透过声卡播放 ,或是经由麦克风、音源线输入声卡的声音皆可录制。 
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
一、运行程序,进行注册,输入错误的注册信息进行检测,有提示信息
**************************************************************
二、用PEiD对EaseMP3Recorder.exe查壳,为 Borland Delphi 6.0 - 7.0
**************************************************************
三、运行OD,打开EaseMP3Recorder.exe,根据DeDe的按钮事件来到关键之处
==============================================================
004985C0  /.  55            PUSH    EBP
004985C1  |.  8BEC          MOV     EBPESP
004985C3  |.  33C9          XOR     ECXECX
004985C5  |.  51            PUSH    ECX
004985C6  |.  51            PUSH    ECX
004985C7  |.  51            PUSH    ECX
004985C8  |.  51            PUSH    ECX
004985C9  |.  51            PUSH    ECX
004985CA  |.  51            PUSH    ECX
004985CB  |.  53            PUSH    EBX
004985CC  |.  56            PUSH    ESI
004985CD  |.  57            PUSH    EDI
004985CE  |.  8BD8          MOV     EBXEAX
004985D0  |.  33C0          XOR     EAXEAX
004985D2  |.  55            PUSH    EBP
004985D3  |.  68 26884900   PUSH    EaseMP3R.00498826
004985D8  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
004985DB  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
004985DE  |.  8D55 F4       LEA     EDXDWORD PTR SS:[EBP-C]
004985E1  |.  8B83 F8020000 MOV     EAXDWORD PTR DS:[EBX+2F8]
004985E7  |.  E8 488CFAFF   CALL    EaseMP3R.00441234
004985EC  |.  8B45 F4       MOV     EAXDWORD PTR SS:[EBP-C]        ;  //用户名
004985EF  |.  8D55 FC       LEA     EDXDWORD PTR SS:[EBP-4]
004985F2  |.  E8 AD04F7FF   CALL    EaseMP3R.00408AA4
004985F7  |.  8D55 F0       LEA     EDXDWORD PTR SS:[EBP-10]
004985FA  |.  8B45 FC       MOV     EAXDWORD PTR SS:[EBP-4]
004985FD  |.  E8 D604F7FF   CALL    EaseMP3R.00408AD8
00498602  |.  8B55 F0       MOV     EDXDWORD PTR SS:[EBP-10]
00498605  |.  8D45 FC       LEA     EAXDWORD PTR SS:[EBP-4]
00498608  |.  E8 2BC0F6FF   CALL    EaseMP3R.00404638
0049860D  |.  8D55 EC       LEA     EDXDWORD PTR SS:[EBP-14]
00498610  |.  8B83 FC020000 MOV     EAXDWORD PTR DS:[EBX+2FC]
00498616  |.  E8 198CFAFF   CALL    EaseMP3R.00441234
0049861B  |.  8B45 EC       MOV     EAXDWORD PTR SS:[EBP-14]       ;  //试炼码
0049861E  |.  8D55 F8       LEA     EDXDWORD PTR SS:[EBP-8]
00498621  |.  E8 7E04F7FF   CALL    EaseMP3R.00408AA4
00498626  |.  8D55 E8       LEA     EDXDWORD PTR SS:[EBP-18]
00498629  |.  8B45 F8       MOV     EAXDWORD PTR SS:[EBP-8]
0049862C  |.  E8 A704F7FF   CALL    EaseMP3R.00408AD8
00498631  |.  8B55 E8       MOV     EDXDWORD PTR SS:[EBP-18]
00498634  |.  8D45 F8       LEA     EAXDWORD PTR SS:[EBP-8]
00498637  |.  E8 FCBFF6FF   CALL    EaseMP3R.00404638
0049863C  |.  8B45 FC       MOV     EAXDWORD PTR SS:[EBP-4]        ;  //用户名
0049863F  |.  E8 14C2F6FF   CALL    EaseMP3R.00404858                ;  //取用户名长度
00498644  |.  85C0          TEST    EAXEAX
00498646  |.  0F84 9F010000 JE      EaseMP3R.004987EB                ;  //用户名为空则挂
0049864C  |.  8B45 F8       MOV     EAXDWORD PTR SS:[EBP-8]        ;  //试炼码
0049864F  |.  E8 04C2F6FF   CALL    EaseMP3R.00404858                ;  //取试炼码长度
00498654  |.  85C0          TEST    EAXEAX
00498656  |.  75 1A         JNZ     SHORT EaseMP3R.00498672          ;  //试炼码为空则挂
00498658  |.  6A 00         PUSH    0
0049865A  |.  66:8B0D 34884>MOV     CXWORD PTR DS:[498834]
00498661  |.  33D2          XOR     EDXEDX
00498663  |.  B8 40884900   MOV     EAX, EaseMP3R.00498840           ;  ASCII "Code must not be null."
00498668  |.  E8 EF22FAFF   CALL    EaseMP3R.0043A95C
0049866D  |.  E9 79010000   JMP     EaseMP3R.004987EB
00498672  |>  8B45 F8       MOV     EAXDWORD PTR SS:[EBP-8]
00498675  |.  E8 DEC1F6FF   CALL    EaseMP3R.00404858
0049867A  |.  85C0          TEST    EAXEAX
0049867C  |.  7E 38         JLE     SHORT EaseMP3R.004986B6
0049867E  |.  BA 01000000   MOV     EDX, 1
00498683  |>  8B4D F8       /MOV     ECXDWORD PTR SS:[EBP-8]
00498686  |.  0FB67411 FF   |MOVZX   ESIBYTE PTR DS:[ECX+EDX-1]
0049868B  |.  83FE 30       |CMP     ESI, 30
0049868E  |.  7C 08         |JL      SHORT EaseMP3R.00498698
00498690  |.  8B4D F8       |MOV     ECXDWORD PTR SS:[EBP-8]
00498693  |.  83FE 39       |CMP     ESI, 39
00498696  |.  7E 1A         |JLE     SHORT EaseMP3R.004986B2
00498698  |>  6A 00         |PUSH    0
0049869A  |.  66:8B0D 34884>|MOV     CXWORD PTR DS:[498834]
004986A1  |.  33D2          |XOR     EDXEDX
004986A3  |.  B8 60884900   |MOV     EAX, EaseMP3R.00498860          ;  ASCII "The code must be integer!"
004986A8  |.  E8 AF22FAFF   |CALL    EaseMP3R.0043A95C
004986AD  |.  E9 39010000   |JMP     EaseMP3R.004987EB
004986B2  |>  42            |INC     EDX
004986B3  |.  48            |DEC     EAX
004986B4  |.^ 75 CD         \JNZ     SHORT EaseMP3R.00498683         ;  //循环,检测试炼码是否为纯数字
004986B6  |>  BE 01000000   MOV     ESI, 1                           ;  //ESI=1
004986BB  |.  8B45 FC       MOV     EAXDWORD PTR SS:[EBP-4]        ;  //用户名
004986BE  |.  E8 95C1F6FF   CALL    EaseMP3R.00404858                ;  //取用户名长度
004986C3  |.  85C0          TEST    EAXEAX                         ;  //EAX=用户名长度
004986C5  |.  7E 13         JLE     SHORT EaseMP3R.004986DA
004986C7  |.  BA 01000000   MOV     EDX, 1
004986CC  |>  8B4D FC       /MOV     ECXDWORD PTR SS:[EBP-4]       ;  //用户名
004986CF  |.  0FB64C11 FF   |MOVZX   ECXBYTE PTR DS:[ECX+EDX-1]    ;  //逐位取用户名ASCII码
004986D4  |.  03F1          |ADD     ESIECX                        ;  //ESI=ESI+ECX
004986D6  |.  42            |INC     EDX
004986D7  |.  48            |DEC     EAX
004986D8  |.^ 75 F2         \JNZ     SHORT EaseMP3R.004986CC         ;  //循环
004986DA  |>  69C6 98050000 IMUL    EAXESI, 598                    ;  //EAX=ESI*598
004986E0  |.  05 155E0100   ADD     EAX, 15E15                       ;  //EAX=EAX+15E15
004986E5  |.  8BF0          MOV     ESIEAX
004986E7  |.  8B45 F8       MOV     EAXDWORD PTR SS:[EBP-8]        ;  //试炼码
004986EA  |.  E8 69C1F6FF   CALL    EaseMP3R.00404858                ;  //取试炼码长度
004986EF  |.  83F8 0A       CMP     EAX, 0A
004986F2  |.  0F8F DE000000 JG      EaseMP3R.004987D6                ;  //试炼码长度大于Ah则挂
004986F8  |.  8B45 F8       MOV     EAXDWORD PTR SS:[EBP-8]
004986FB  |.  E8 6419F7FF   CALL    EaseMP3R.0040A064
00498700  |.  DB2D 7C884900 FLD     TBYTE PTR DS:[49887C]
00498706  |.  DED9          FCOMPP
00498708  |.  DFE0          FSTSW   AX
0049870A  |.  9E            SAHF
0049870B  |.  0F82 AE000000 JB      EaseMP3R.004987BF                ;  //试炼码大于2147483647则挂
00498711  |.  8B45 F8       MOV     EAXDWORD PTR SS:[EBP-8]        ;  //试炼码
00498714  |.  E8 BB04F7FF   CALL    EaseMP3R.00408BD4                ;  //将试炼码转16进制送入EAX
00498719  |.  3BF0          CMP     ESIEAX                         ;  //关键比较,ESI为真码,EAX为假码
0049871B  |.  0F85 87000000 JNZ     EaseMP3R.004987A8                ;  //关键跳转
00498721  |.  B2 01         MOV     DL, 1
00498723  |.  A1 C4144700   MOV     EAXDWORD PTR DS:[4714C4]
00498728  |.  E8 978EFDFF   CALL    EaseMP3R.004715C4
0049872D  |.  8BF8          MOV     EDIEAX
0049872F  |.  BA 02000080   MOV     EDX, 80000002
00498734  |.  8BC7          MOV     EAXEDI
00498736  |.  E8 298FFDFF   CALL    EaseMP3R.00471664
0049873B  |.  B1 01         MOV     CL, 1
0049873D  |.  BA 90884900   MOV     EDX, EaseMP3R.00498890           ;  ASCII "\SOFTWARE\EASETECH\EASEMP3RECORDER"
00498742  |.  8BC7          MOV     EAXEDI
00498744  |.  E8 5B90FDFF   CALL    EaseMP3R.004717A4
00498749  |.  8B4D FC       MOV     ECXDWORD PTR SS:[EBP-4]
0049874C  |.  BA BC884900   MOV     EDX, EaseMP3R.004988BC           ;  ASCII "registry name"
00498751  |.  8BC7          MOV     EAXEDI
00498753  |.  E8 E891FDFF   CALL    EaseMP3R.00471940
00498758  |.  8BCE          MOV     ECXESI
0049875A  |.  BA D4884900   MOV     EDX, EaseMP3R.004988D4           ;  ASCII "registry code"
0049875F  |.  8BC7          MOV     EAXEDI
00498761  |.  E8 7E92FDFF   CALL    EaseMP3R.004719E4
00498766  |.  B1 01         MOV     CL, 1
00498768  |.  BA EC884900   MOV     EDX, EaseMP3R.004988EC           ;  ASCII "regsuccess"
0049876D  |.  8BC7          MOV     EAXEDI
0049876F  |.  E8 B492FDFF   CALL    EaseMP3R.00471A28
00498774  |.  8BC7          MOV     EAXEDI
00498776  |.  E8 B98EFDFF   CALL    EaseMP3R.00471634
0049877B  |.  8BC7          MOV     EAXEDI
0049877D  |.  E8 0EB0F6FF   CALL    EaseMP3R.00403790
00498782  |.  6A 00         PUSH    0
00498784  |.  66:8B0D 34884>MOV     CXWORD PTR DS:[498834]
0049878B  |.  B2 02         MOV     DL, 2
0049878D  |.  B8 00894900   MOV     EAX, EaseMP3R.00498900           ;  ASCII "Congratuation! You have registered!"
00498792  |.  E8 C521FAFF   CALL    EaseMP3R.0043A95C
00498797  |.  A1 94784A00   MOV     EAXDWORD PTR DS:[4A7894]
0049879C  |.  C600 01       MOV     BYTE PTR DS:[EAX], 1
0049879F  |.  8BC3          MOV     EAXEBX
004987A1  |.  E8 C654FCFF   CALL    EaseMP3R.0045DC6C
004987A6  |.  EB 43         JMP     SHORT EaseMP3R.004987EB
004987A8  |>  6A 00         PUSH    0
004987AA  |.  66:8B0D 34884>MOV     CXWORD PTR DS:[498834]
004987B1  |.  B2 02         MOV     DL, 2
004987B3  |.  B8 2C894900   MOV     EAX, EaseMP3R.0049892C           ;  ASCII "Invalid register code!Please retry!"
004987B8  |.  E8 9F21FAFF   CALL    EaseMP3R.0043A95C
004987BD  |.  EB 2C         JMP     SHORT EaseMP3R.004987EB
004987BF  |>  6A 00         PUSH    0
004987C1  |.  66:8B0D 34884>MOV     CXWORD PTR DS:[498834]
004987C8  |.  33D2          XOR     EDXEDX
004987CA  |.  B8 58894900   MOV     EAX, EaseMP3R.00498958           ;  ASCII "The code is overload!Please retry!"
004987CF  |.  E8 8821FAFF   CALL    EaseMP3R.0043A95C
004987D4  |.  EB 15         JMP     SHORT EaseMP3R.004987EB
004987D6  |>  6A 00         PUSH    0
004987D8  |.  66:8B0D 34884>MOV     CXWORD PTR DS:[498834]
004987DF  |.  33D2          XOR     EDXEDX
004987E1  |.  B8 58894900   MOV     EAX, EaseMP3R.00498958           ;  ASCII "The code is overload!Please retry!"
004987E6  |.  E8 7121FAFF   CALL    EaseMP3R.0043A95C
004987EB  |>  33C0          XOR     EAXEAX
004987ED  |.  5A            POP     EDX
004987EE  |.  59            POP     ECX
004987EF  |.  59            POP     ECX
004987F0  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
004987F3  |.  68 2D884900   PUSH    EaseMP3R.0049882D
004987F8  |>  8D45 E8       LEA     EAXDWORD PTR SS:[EBP-18]
004987FB  |.  E8 A0BDF6FF   CALL    EaseMP3R.004045A0
00498800  |.  8D45 EC       LEA     EAXDWORD PTR SS:[EBP-14]
00498803  |.  E8 98BDF6FF   CALL    EaseMP3R.004045A0
00498808  |.  8D45 F0       LEA     EAXDWORD PTR SS:[EBP-10]
0049880B  |.  E8 90BDF6FF   CALL    EaseMP3R.004045A0
00498810  |.  8D45 F4       LEA     EAXDWORD PTR SS:[EBP-C]
00498813  |.  E8 88BDF6FF   CALL    EaseMP3R.004045A0
00498818  |.  8D45 F8       LEA     EAXDWORD PTR SS:[EBP-8]
0049881B  |.  BA 02000000   MOV     EDX, 2
00498820  |.  E8 9FBDF6FF   CALL    EaseMP3R.004045C4
00498825  \.  C3            RETN
00498826   .^ E9 F9B6F6FF   JMP     EaseMP3R.00403F24
0049882B   .^ EB CB         JMP     SHORT EaseMP3R.004987F8
0049882D   .  5F            POP     EDI
0049882E   .  5E            POP     ESI
0049882F   .  5B            POP     EBX
00498830   .  8BE5          MOV     ESPEBP
00498832   .  5D            POP     EBP
00498833   .  C3            RETN
**************************************************************  
【破解总结】
--------------------------------------------------------------
【算法总结】
注册码=(用户名ASCII码累加值+1)*1432+89621
--------------------------------------------------------------
【算法注册机】
KeyGen.rek
.const

.data
szHomePage db "http://www.chinapyg.com",0
szEmail    db "mailto:tianxj_2007@126.com",0
szErrMess  db "请输入用户名!",0
szFMT      db "%u",0
szBuffer1  db 50 dup (0)

.code
invoke lstrlen,eax
MOV     ESI, 1
MOV     EDX, 1
n1:
LEA     ECX, hInput1
MOVZX   ECXBYTE PTR DS:[ECX+EDX-1]
ADD     ESIECX
INC     EDX
DEC     EAX 
JNZ     n1
IMUL    EAXESI, 598h
ADD     EAX, 15E15h
invoke wsprintf,addr szBuffer1,addr szFMT,eax
lea eax,szBuffer1
--------------------------------------------------------------
【内存注册机】
中断地址 00498719
中断次数 1
第一字节 3B
指令长度 2

寄存器方式-ESI
           十进制
--------------------------------------------------------------
【注册信息】
保存在
[HKEY_LOCAL_MACHINE\SOFTWARE\EASETECH\EASEMP3RECORDER]
--------------------------------------------------------------
感谢飘云老大、猫老大、Nisy老大以及很多前辈们的学习教程以及王者之剑、云龙等所有帮助过我的论坛兄弟姐妹们!谢谢
--------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!