ezConverter V2.0 簡體中文版的破解(原創)

看雪資料發表於2015-11-15

ezConverter V2.0 簡體中文版的破解
軟體簡介:支援的格式多,可將 asf,wmv,wma,wav, mp3、mpeg,dat,dvd,avi,cd音軌,磁帶,話筒等 轉換為:wma, mp3, wav 及20多種音訊格式.可從音訊硬體採集聲音(包括話筒,線路輸入,混音器、磁帶等)然後存為 20多種格式,你甚至可以將錄音機裡的廣播錄製到電腦裡並存成mp3檔案!完全支援第三方免費編解碼器,將你電腦潛在的轉換,功能發揮到極致.速度極快,比一般的轉換器快出30%.沒有複雜的操作,極易使用.新2.0版本加入了“智慧解碼器匹配”技術,解決了非標準格式和未知格式檔案的處理.例如很多數碼攝像機都採用非標準asf,mpeg4作為儲存格式,大部分轉換軟體都是無法正確讀取這些格式的。 
未註冊版本30次限制。本文解決了註冊碼演算法和解除次數限制的問題。
下載網址: http://www.skycn.com/soft/11099.html
破解宣告:只為技術而破解!
破解工具:Fi ,OD1.09d漢化中文版
前言:本軟體經fi檢測,無殼vc作品,先執行一下,瞭解一下情況。知己知彼百戰不鈦嗎!要求註冊使用者名稱大於6位。輸完後要求重啟驗證。一般的重啟驗證程式。肯定有一個地方儲存輸入的註冊資訊。一般是登錄檔中或者檔案中!記下相關得出錯資訊,然後 呵呵C32ASM,反彙編一無所獲!沒辦法只有慢慢的試著找斷點。這時可用filemon等檔案檢測工具,但我的這個不太好使。呵呵!NND。(我開始用萬能斷點,跟了好半天!) 先用od載入把。搜尋DD當前模組中的名稱DD在一堆函式中找到了GetCurrentDirectoryA 這個函式,是對檔案進行操作的。然後查詢匯入參考把。只有一個地方呼叫了這個函式。設斷點。載入程式
程式斷在這
004056D2   . FF15 68F04000  CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; GetCurrentDirectoryA
004056D8   . 8BCE           MOV ECX,ESI
004056DA   . E8 41070000    CALL ezConver.00405E20   //你要在上面的地方設斷點的話這裡是關鍵一定要更進,所用的秘密都藏在這  call  (1)
004056DF   . 84C0           TEST AL,AL
004056E1     0F85 C3000000  JNZ ezConver.004057AA   //註冊判斷,關鍵跳轉
以上部分的作用,且聽下面分解先看看跟進取得結果把
………………………省略call (1)的n行程式碼
00405E56  |. 0F88 19030000  JS ezConver.00406175
00405E5C  |. 68 FC334100    PUSH ezConver.004133FC   ; /FileName = "kernel32.dll"
00405E61  |. FF15 30F04000  CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; LoadLibraryA
00405E67  |. 8BE8           MOV EBP,EAX
00405E69  |. 68 F0334100    PUSH ezConver.004133F0                   ; /ProcNameOrOrdinal = "ReadFile"              開始時也可用bpx ReadFile在此處設斷
00405E6E  |. 55             PUSH EBP                                 ; |hModule
00405E6F  |. FFD6           CALL ESI                  ; GetProcAddress
00405E71  |. 68 E4334100    PUSH ezConver.004133E4                   ; /ProcNameOrOrdinal = "CreateFileA"
00405E76  |. 55             PUSH EBP                                 ; |hModule
00405E77  |. 8BD8           MOV EBX,EAX                              ; |
00405E79  |. FFD6           CALL ESI                     ; GetProcAddress
00405E7B  |. 68 D8334100  PUSH ezConver.004133D8 ; /ProcNameOrOrdinal = "WriteFile"
00405E80  |. 55             PUSH EBP                                 ; |hModule
00405E81  |. 8BF8           MOV EDI,EAX                              ; |
00405E83  |. FFD6   CALL ESI               ; GetProcAddress
00405E85  |. 8D4C24 10      LEA ECX,DWORD PTR SS:[ESP+10]
00405E89  |. E8 1A740000    CALL <JMP.&MFC42.#540>
00405E8E  |. 8B4C24 14      MOV ECX,DWORD PTR SS:[ESP+14]
00405E92  |. 8D5424 10      LEA EDX,DWORD PTR SS:[ESP+10]
00405E96  |. 81C1 C4000000  ADD ECX,0C4
00405E9C  |. C78424 3001000>MOV DWORD PTR SS:[ESP+130],0
00405EA7  |. 51             PUSH ECX
00405EA8  |. 68 CC334100    PUSH ezConver.004133CC      ;  ASCII "%serf.dat"                 
//讀了當前目錄下得這個檔案用ultraEdit32檢視其中內容,會發現你輸入的註冊資訊
//rk.dat中也儲存著註冊資訊
00405F79  |. 52             PUSH EDX                      ; |pLastAccess
00405F7A  |. 50        PUSH EAX          ; |pCreationTime
00405F7B  |. 56             PUSH ESI                       ; |hFile
00405F7C  |. FF15 80F04000  CALL DWORD PTR DS:[<&KERNEL32.SetFileTim>; SetFileTime
00405F82  |. 56             PUSH ESI                       ; /hObject
00405F83  |. FF15 78F04000  CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; CloseHandle
00405F89  |. 55             PUSH EBP                                 ; /hLibModule
00405F8A  |. FF15 38F04000  CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; FreeLibrary
00405F90  |. 83CD FF        OR EBP,FFFFFFFF
00405F93  |. 8D7C24 40      LEA EDI,DWORD PTR SS:[ESP+40]    使用者名稱入棧
00405F97  |. 8BCD           MOV ECX,EBP
00405F99  |. 33C0           XOR EAX,EAX
00405F9B  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]  檢查是否為空
00405F9D  |. F7D1           NOT ECX
00405F9F  |. 49             DEC ECX
00405FA0  |. 83F9 01        CMP ECX,1
00405FA3  |. 0F82 BC010000  JB ezConver.00406165
00405FA9  |. 8D7C24 64      LEA EDI,DWORD PTR SS:[ESP+64]    序列號入棧
00405FAD  |. 8BCD           MOV ECX,EBP
00405FAF  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]     檢查是否為空
00405FB1  |. F7D1           NOT ECX
00405FB3  |. 49             DEC ECX
00405FB4  |. 83F9 01        CMP ECX,1
00405FB7  |. 0F82 A8010000  JB ezConver.00406165
00405FBD  |. 8D7C24 40      LEA EDI,DWORD PTR SS:[ESP+40]  使用者名稱入棧
00405FC1  |. 8BCD           MOV ECX,EBP
00405FC3  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
一下是關鍵,我開始是將斷點設在這裡
00405FC5  |. 8B1D A8F44000  MOV EBX,DWORD PTR DS:[<&USER32.CharUpper>;  USER32.CharUpperA
00405FCB  |. 8BF5           MOV ESI,EBP
00405FCD  |. F7D1           NOT ECX
00405FCF  |. 49             DEC ECX
00405FD0  |. 8BF9           MOV EDI,ECX   edi中存的是長度
00405FD2  |. 8D4C24 40      LEA ECX,DWORD PTR SS:[ESP+40]
00405FD6  |. 51             PUSH ECX              ; /StringOrChar = "tsinghua"
00405FD7  |. FFD3         CALL EBX         ; CharUpperA
 //該call的作用是將使用者名稱的小寫字母部分轉化為大寫     
00405FD9  |. 33C9           XOR ECX,ECX    將ecx清零,用作計數器
00405FDB  |. 85FF           TEST EDI,EDI   //測試使用者名稱是否為0
00405FDD  |. 7E 6B          JLE SHORT ezConver.0040604A   不跳
00405FDF  |> 8BC1           /MOV EAX,ECX  //
00405FE1  |. BD 03000000    |MOV EBP,3    //將3放進ebp中作為除數
00405FE6  |. 99             |CDQ
00405FE7  |. F7FD           |IDIV EBP     //整除  餘數放在edx中
00405FE9  |. 46             |INC ESI   //每次加初始值為-1,她就是以後你註冊碼的長度
最終結果為使用者名稱長度減1
00405FEA  |. 85D2           |TEST EDX,EDX //判斷餘數是否為0
00405FEC  |. 75 17         |JNZ SHORT ezConver.00406005 //如果不等於零則跳00406005
00405FEE  |. 8A440C 40      |MOV AL,BYTE PTR SS:[ESP+ECX+40] 將該位的字元存入eax的低位
00405FF2  |. 0FBED0         |MOVSX EDX,AL 將eax的低位轉移到edx中
00405FF5  |. 83EA 05        |SUB EDX,5  edx=edx-5
00405FF8  |. 83FA 41        |CMP EDX,41 比較該位減5後與’A’的大小
00405FFB  |. 7E 04          |JLE SHORT ezConver.00406001 //如果小於’A’跳走
00405FFD  |. 2C 05          |SUB AL,5  否則減5
00405FFF  |. EB 3A          |JMP SHORT ezConver.0040603B
00406001  |> 04 05          |ADD AL,5   如果小於’A’將他加5
00406003  |. EB 36          |JMP SHORT ezConver.0040603B
00406005  |> 83FA 01        |CMP EDX,1    //將餘數和1比較
00406008  |. 75 17          |JNZ SHORT ezConver.00406021 不等於1跳走
0040600A  |. 8A440C 40  |MOV AL,BYTE PTR SS:[ESP+ECX+40] 將此位的字元存到al中
0040600E  |. 0FBED0         |MOVSX EDX,AL  
00406011  |. 83C2 07        |ADD EDX,7   將此位的字元加7
00406014  |. 83FA 5A        |CMP EDX,5A  然後與’Z’比較
00406017  |. 7D 04          |JGE SHORT ezConver.0040601D如果大於等於’Z’跳走
00406019  |. 04 07          |ADD AL,7  如果小於則將這一位的字元加7
0040601B  |. EB 1E          |JMP SHORT ezConver.0040603B
0040601D  |> 2C 07          |SUB AL,7   將這一位上的字元減去7
0040601F  |. EB 1A          |JMP SHORT ezConver.0040603B 結束這一位的處理
00406021  |> 83FA 02        |CMP EDX,2   將餘數和2比較
00406024  |. 75 1C          |JNZ SHORT ezConver.00406042 不等於2的話跳走
00406026  |. 8A440C 40      |MOV AL,BYTE PTR SS:[ESP+ECX+40] 取字元
0040602A  |. 0FBED0         |MOVSX EDX,AL
0040602D  |. 83EA 09        |SUB EDX,9   將Edx-9
00406030  |. 83FA 41        |CMP EDX,41  與’A’比較
00406033  |. 7E 04          |JLE SHORT ezConver.00406039 小於等於’A’的話跳走
00406035  |. 2C 09          |SUB AL,9  大於’A’將這一位字元減9
00406037  |. EB 02          |JMP SHORT ezConver.0040603B
00406039  |> 04 09          |ADD AL,9  小於的’A’話將這一位字元加9’
0040603B  |> 888434 8800000>|MOV BYTE PTR SS:[ESP+ESI+88],AL
00406042  |> 41             |INC ECX  ecx+1每取完一位計數器加一
00406043  |. 3BCF           |CMP ECX,EDI //看使用者名稱是否計算完畢
00406045  |.^7C 98          JL SHORT ezConver.00405FDF//沒算完的話跳回去繼續迴圈
上面的迴圈就是對對使用者名稱進行變換,具體的演算法如下
假設使用者名稱陣列array[]=’tsinghua’;
i=0,3,6,9  array[i]=’T’   i/3  ==0 先判斷餘數是否為0 判斷’T-5’與’A’的大小(其實就是看他是不是大寫字母)如果是大於A的就將他-5 ,”T”-5==’O’如果小於就加5
i=1,4,7,11  array[i]=’S’  i/3 餘數==1,跳到第二分之判斷’S+7’與’Z’的大小如果小於就將他加7否則就減5 
i=2,5,8….array[i]=’I’  i/3 餘數為2   跳到第三分之判斷’I’-9與’A’比較大於就將他減9小於就加9;
經轉化後”TSINHUA”---轉化為“OLRINQPH”
00406047  |. 83CD FF        OR EBP,FFFFFFFF
0040604A  |> DD05 00FE4000  FLD QWORD PTR DS:[40FE00]   浮點操作
00406050  |. 33C0           XOR EAX,EAX           清零
00406052  |. 85F6           TEST ESI,ESI   
00406054  |. 7E 17          JLE SHORT ezConver.0040606D
00406056  |> 0FBE8C04 88000>/MOVSX ECX,BYTE PTR SS:[ESP+EAX+88]
0040605E  |. 894C24 14      |MOV DWORD PTR SS:[ESP+14],ECX
00406062  |. 40             |INC EAX
00406063  |. DB4424 14      |FILD DWORD PTR SS:[ESP+14]
FILD src  裝入整數到st(0)   st(0) <- src (mem16/mem32/mem64)

00406067  |. 3BC6           |CMP EAX,ESI
00406069  |. DEC1           |FADDP ST(1),ST  將使用者名稱經過轉換後的字串的前esi位字元(使用者名稱長度減1)的十進位制累加存到st(1)中,此處是浮點預算
0040606B  |.^7C E9          JL SHORT ezConver.00406056
st【0】的結果是549.000000000000000000
0040606D  |> D9C0           FLD ST  
FLD src  裝入實數到st(0)  st(0) <- src (mem32/mem64/mem80) 

0040606F  |. D9FE           FSIN
FSIN  正弦函式sin  st(0) <- SIN( st(0) )

00406071  |. D9FF           FCOS
FCOS  餘弦函式Cos  st(0) <- COS( st(0) )

00406073  |. D9FE           FSIN
00406075  |. D9FF           FCOS
00406077  |. D9FE           FSIN
00406079  |. DD5424 14      FST QWORD PTR SS:[ESP+14]
FST dest  儲存實數st(0)到dest  dest <- st(0) (mem32/mem64

0040607D  |. DC1D 00FE4000  FCOMP QWORD PTR DS:[40FE00]     將結果和0比較
FCOM  實數比較  將標誌位設定為 st(0) - st(1) 的結果標誌位
FCOM op  實數比較  將標誌位設定為 st(0) - op (mem32/mem64)的結果標誌位 

00406083  |. DFE0           FSTSW AX   ax得知等於7註冊碼長度
FSTSW AX  儲存狀態字的值到AX  AX<- MSW
FSTSW dest  儲存狀態字的值到dest  dest<-MSW (mem16)

00406085  |. F6C4 01        TEST AH,1
00406088  |. 74 23          JE SHORT ezConver.004060AD  //以下這段我在破解是跳過去了。我想作用和上面差不多
0040608A  |> DC0D F8FD4000  /FMUL QWORD PTR DS:[40FDF8]
00406090  |. D9C0           |FLD ST
00406092  |. D9FE           |FSIN
00406094  |. D9FF           |FCOS
00406096  |. D9FE           |FSIN
00406098  |. D9FF           |FCOS
0040609A  |. D9FE           |FSIN
0040609C  |. DD5424 14      |FST QWORD PTR SS:[ESP+14]
004060A0  |. DC1D 00FE4000  |FCOMP QWORD PTR DS:[40FE00]
004060A6  |. DFE0           |FSTSW AX
004060A8  |. F6C4 01        |TEST AH,1
004060AB  |.^75 DD          JNZ SHORT ezConver.0040608A

004060AD  |> 8B5424 18      MOV EDX,DWORD PTR SS:[ESP+18]
004060B1  |. 8B4424 14      MOV EAX,DWORD PTR SS:[ESP+14]
004060B5  |. 52             PUSH EDX
004060B6  |. 50             PUSH EAX                                 ; /<%.14f>
004060B7  |. 8D8C24 E000000>LEA ECX,DWORD PTR SS:[ESP+E0]            ; |
004060BE  |. 68 C4334100    PUSH ezConver.004133C4           ; |format = "%.14f"
004060C3  |. 51             PUSH ECX                                 ; |s
004060C4  |. DDD8           FSTP ST                                  ; |
004060C6  |. FF15 34F44000  CALL DWORD PTR DS:[<&MSVCRT.sprintf>]    ; sprintf
004060CC  |. 8DBC24 E800000>LEA EDI,DWORD PTR SS:[ESP+E8]
將算出的浮點結果的前十四位轉移到edi中
記憶體中  【 0012F2EC   0012F3D4  ASCII "0.69642527979317"】

004060D3  |. 8BCD           MOV ECX,EBP
004060D5  |. 33C0           XOR EAX,EAX
004060D7  |. 83C4 10        ADD ESP,10
004060DA  |. 33D2           XOR EDX,EDX
004060DC  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
004060DE  |. F7D1           NOT ECX
004060E0  |. 49             DEC ECX
004060E1  |. 83E9 02        SUB ECX,2  //這上面是做些判斷
004060E4  |. 74 27          JE SHORT ezConver.0040610D
//以下迴圈是關鍵他求出了註冊碼
//依次取小數部分的每一位
004060E6  |> 8A8414 DA00000>/MOV AL,BYTE PTR SS:[ESP+EDX+DA]
004060ED  |. 8DBC24 D800000>|LEA EDI,DWORD PTR SS:[ESP+D8]
004060F4  |. 04 41          |ADD AL,41  將每一為的ascii值加上41
004060F6  |. 8BCD           |MOV ECX,EBP
004060F8  |. 888414 8800000>|MOV BYTE PTR SS:[ESP+EDX+88],AL  儲存計算結果
004060FF  |. 33C0           |XOR EAX,EAX
00406101  |. 42             |INC EDX
00406102  |. F2:AE          |REPNE SCAS BYTE PTR ES:[EDI]
00406104  |. F7D1           |NOT ECX
00406106  |. 83C1 FD        |ADD ECX,-3
00406109  |. 3BD1           |CMP EDX,ECX
0040610B  |.^72 D9          JB SHORT ezConver.004060E6
第一位 ‘6’+41=77DDDw
第二為  ‘9’+41=7aDDDz
第三為   ‘6’+41=77DDDw
0040610D  |> 8D8C24 8800000>LEA ECX,DWORD PTR SS:[ESP+88]
運算以後的結果存入ecx中
00406114  |. C68434 8800000>MOV BYTE PTR SS:[ESP+ESI+88],0
只取計算結果的前esi中存的位數再這裡是7 實際是使用者名稱長度減1
0040611C  |. 51             PUSH ECX
0040611D  |. FFD3           CALL EBX   將這些字元轉化為大寫字母
0040611F  |. 8D7C24 64      LEA EDI,DWORD PTR SS:[ESP+64]
將輸入的假序列號入棧
00406123  |. 8BCD           MOV ECX,EBP
00406125  |. 33C0           XOR EAX,EAX
00406127  |. 8DB424 8800000>LEA ESI,DWORD PTR SS:[ESP+88]
0040612E  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00406130  |. F7D1           NOT ECX
00406132  |. 49             DEC ECX
00406133  |. 8D7C24 64      LEA EDI,DWORD PTR SS:[ESP+64]
00406137  |. 33D2           XOR EDX,EDX
00406139  |. 89AC24 3001000>MOV DWORD PTR SS:[ESP+130],EBP
00406140  |. F3:A6          REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:> 比較
00406142  |. 8D4C24 10      LEA ECX,DWORD PTR SS:[ESP+10]
00406146  |. 75 28          JNZ SHORT ezConver.00406170    //關鍵跳轉
00406148  |. E8 43710000    CALL <JMP.&MFC42.#800>
0040614D  |. B0 01          MOV AL,1
0040614F  |. 8B8C24 2801000>MOV ECX,DWORD PTR SS:[ESP+128]
00406156  |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
0040615D  |. 5F             POP EDI
0040615E  |. 5E             POP ESI
0040615F  |. 5D             POP EBP
00406160  |. 5B             POP EBX
00406161  |. 8BE5           MOV ESP,EBP
00406163  |. 5D             POP EBP
00406164  |. C3             RETN
00406165  |> 89AC24 3001000>MOV DWORD PTR SS:[ESP+130],EBP
0040616C  |> 8D4C24 10      LEA ECX,DWORD PTR SS:[ESP+10]
00406170  |> E8 1B710000    CALL <JMP.&MFC42.#800>
00406175  |> 8B8C24 2801000>MOV ECX,DWORD PTR SS:[ESP+128]
0040617C  |. 5F             POP EDI
0040617D  |. 32C0           XOR AL,AL
0040617F  |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00406186  |. 5E             POP ESI
00406187  |. 5D             POP EBP
00406188  |. 5B             POP EBX
00406189  |. 8BE5           MOV ESP,EBP
0040618B  |. 5D             POP EBP
0040618C  . C3             RETN
0040618D     90             NOP
0040618E     90             NOP
0040618F     90             NOP
00406190   > C3             RETN
00406191     90             NOP

004056D2   . FF15 68F04000  CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; GetCurrentDirectoryA
004056D8   . 8BCE           MOV ECX,ESI
004056DA   . E8 41070000    CALL ezConver.00405E20
004056DF   . 84C0           TEST AL,AL
程式返回到這
004056E1     0F85 C3000000  JNZ ezConver.004057AA  //因該是關鍵跳轉了爆破的話改這
004056E7   . 57             PUSH EDI                                 ; /Arg1
004056E8   . 8BCE           MOV ECX,ESI                              ; |
004056EA   . E8 610D0000    CALL ezConver.00406450  ; ezConver.00406450
004056EF   . B9 1E000000    MOV ECX,1E  30次限制呵呵把它改為無窮大你也可以隨便使用
004056F4   . 2BC8           SUB ECX,EAX   eax中存的是你已經使用的次數
004056F6   . 83F9 9C        CMP ECX,-64
004056F9   . 898E C4010000  MOV DWORD PTR DS:[ESI+1C4],ECX
004056FF   . 0F8C B9010000  JL ezConver.004058BE   
00405705   . 83F9 01        CMP ECX,1
00405708   . 7D 53          JGE SHORT ezConver.0040575D
等於0你就不能用了
0040570A   . 57             PUSH EDI
0040570B   . 8D4C24 14      LEA ECX,DWORD PTR SS:[ESP+14]
0040570F   . E8 2C780000    CALL ezConver.0040CF40
00405714   . 8D4C24 10      LEA ECX,DWORD PTR SS:[ESP+10]
00405718   . 89BC24 C40A000>MOV DWORD PTR SS:[ESP+AC4],EDI
0040571F   . E8 347A0000    CALL <JMP.&MFC42.#2514>
00405724   . 8D4C24 74      LEA ECX,DWORD PTR SS:[ESP+74]
00405728   . C78424 C40A000>MOV DWORD PTR SS:[ESP+AC4],2
00405733   . E8 587B0000    CALL <JMP.&MFC42.#800>
00405738   . 8D4C24 70      LEA ECX,DWORD PTR SS:[ESP+70]
0040573C   . C68424 C40A000>MOV BYTE PTR SS:[ESP+AC4],1
00405744   . E8 477B0000    CALL <JMP.&MFC42.#800>
00405749   . C78424 C40A000>MOV DWORD PTR SS:[ESP+AC4],-1
00405754   . 8D4C24 10      LEA ECX,DWORD PTR SS:[ESP+10]
00405758   . E9 5C010000    JMP ezConver.004058B9
0040575D   > 8D4C24 08      LEA ECX,DWORD PTR SS:[ESP+8]
00405761   . E8 427B0000    CALL <JMP.&MFC42.#540>  
00405766   . 8B8E C4010000  MOV ECX,DWORD PTR DS:[ESI+1C4]
0040576C   . 8D5424 08      LEA EDX,DWORD PTR SS:[ESP+8]
00405770   . 51             PUSH ECX
00405771   . 68 92000000    PUSH 92
00405776   . 52             PUSH EDX
00405777   . C78424 D00A000>MOV DWORD PTR SS:[ESP+AD0],3
00405782   . E8 917D0000    CALL <JMP.&MFC42.#2817>
00405787   . 8B4424 14      MOV EAX,DWORD PTR SS:[ESP+14]
0040578B   . 83C4 0C        ADD ESP,0C
0040578E   . 57             PUSH EDI
0040578F   . 57             PUSH EDI
00405790   . 50             PUSH EAX
00405791   . E8 7C7D0000    CALL <JMP.&MFC42.#1200>  未註冊版本
00405796   . 8D4C24 08      LEA ECX,DWORD PTR SS:[ESP+8]
0040579A   . C78424 C40A000>MOV DWORD PTR SS:[ESP+AC4],-1
004057A5   . E8 E67A0000    CALL <JMP.&MFC42.#800>
004057AA   > 8BCE           MOV ECX,ESI  //註冊正確從這進去
004057AC   . E8 5F020000    CALL ezConver.00405A10

 

序號產生器c++下得原始碼
#include <stdio.h>
#include "iostream.h"
#include "windows.h"
#include "math.h"
void main( void )

{
  char *s,buffer[200],ch;
     s=new char[20];
    cout<<"Ê&È&ÓÃ&§Ã&"<<endl;
  gets(s);
  double temp=0.0;
  int i=0,len=-1;
  CharUpper(s);  //½&Ð&Ð&×&&&Î&&óÐ&
  while (*(s+i)!=' ')
  {
    len++;ch=*(s+i);
    if (i%3==0) 
    {
      if((ch-5)>65)  *(s+i)=*(s+i)-5;
      else  *(s+i)=*(s+i)+5;
    }
    if (i%3==1)
    {
      if ((ch+7)<90) {*(s+i)=*(s+i)+7;
      }
      else  *(s+i)=*(s+i)-7;
    }
    if (i%3==2)
    {
      if ((ch-9)>65) { *(s+i)=*(s+i)-9;
      }
      else *(s+i)=*(s+i)+9;
    }
    i++;
    
  }
  i=0;
cout<<s<<endl;
    while(*(s+i)!=' '&&i<len)
  {
    ch=*(s+i);
    temp+=ch;
        i++;
  }  
  
    temp=sin(temp);
  temp=cos(temp);
  temp=sin(temp);
  temp=cos(temp);
  temp=sin(temp);
  sprintf(buffer,"%1.14f
",temp);
  for(i=0;i<len;i++)
    s[i]=buffer[i+2]+65;

  CharUpper(s); 
  cout<<"×&²áÂ&:";
  cout<<s;
}

後記:終於寫完了。註冊成功後將erf.dat中註冊碼部分用ultraedit稍微改一下,就可重複註冊。呵呵水平有限,大家湊合看吧!獻醜了!!!序號產生器書寫中。
幾組可用的註冊碼 tsinghua   -----WZWUSVS
                 mejy12   -------WTRTV

相關文章