EZ MP3 Recorder 1.15 註冊演算法分析 (14千字)
標 題:EZ MP3 Recorder 1.15 註冊演算法分析 (14千字)
發信人:炎之川
時 間:2003-4-6 22:07:16
詳細資訊:
EZ MP3 Recorder 1.15 註冊演算法分析
破解目標:EZ MP3 Recorder 1.15
官方主頁:http://www.topmp3soft.com
軟體簡介:錄音軟體,可以把電腦中透過音效卡播放的聲音錄製為 WAV 或 MP3 格式。
下載地址:http://www.topmp3soft.com/mp3recorder.exe
使用工具:PEiD 0.8、W32Dasm、Ollydbg、Windows 自帶的計算器、32bit Calculator 1.6 by
cybult、UltraEdit
作者:炎之川
時間:2003.4.3
主頁:http://skipli.yeah.net/
宣告: 此文僅用於學習及交流,若要轉載請保持文章完整。
經 PEiD 0.8 檢查可知,EZ MP3
Recorder 的主程式為 VC++ 6.0 編寫且無殼,程式要求重啟驗證註冊碼。輸入的註冊碼儲存在登錄檔中。
在 XP 下用 OD
除錯,試了在 OD 中下 bpx regqueryvalueexa 斷點,雖然可以攔住,但是軟體似乎還要從登錄檔中讀取一些設定資訊,所以要按 F9 很多次才能攔到我們需要的地方,稍顯麻煩。
經過分析發現,軟體將輸入的註冊名和假註冊名寫入登錄檔中,鍵值名稱為 RegCode,嘗試試驗 W32Dasm 反彙編,在反彙編程式碼中果然找到了這個字串,所以在對應的地方下斷點,重新執行程式,被
OD 斷下(你需要先輸入註冊名和假註冊碼,我輸入Name: lovefire,S/N: 78787878)
(; 後是 Ollydbg
所分析的內容,// 後是我加的註釋,文中數值均為16進位制值)
00407C06 . 68 94674500
PUSH Mp3Recor.00456794
00407C0B . 68 40324500 PUSH Mp3Recor.00453240
; ASCII "RegCode"
//斷點下在這裡
00407C10 . 8D5424 20 LEA EDX,DWORD PTR
SS:[ESP+20]
00407C14 . 68 48324500 PUSH Mp3Recor.00453248
; ASCII "RegInfo"
00407C19 . 52 PUSH EDX
00407C1A . 8BCE MOV ECX,ESI
00407C1C
. E8 D54D0300 CALL Mp3Recor.0043C9F6
00407C21 . 50
PUSH EAX
00407C22 . 8D4C24 18
LEA ECX,DWORD PTR SS:[ESP+18]
00407C26 . C68424 7403000>MOV
BYTE PTR SS:[ESP+374],4
00407C2E . E8 EB600200 CALL Mp3Recor.0042DD1E
00407C33 . 889C24 7003000>MOV BYTE PTR SS:[ESP+370],BL
00407C3A
. 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18]
00407C3E
. E8 A25F0200 CALL Mp3Recor.0042DBE5
00407C43 . 51
PUSH ECX
00407C44 . 8D4424 18
LEA EAX,DWORD PTR SS:[ESP+18]
00407C48 . 8BCC
MOV ECX,ESP
00407C4A . 896424 10
MOV DWORD PTR SS:[ESP+10],ESP
00407C4E . 50
PUSH EAX
00407C4F . E8 065D0200 CALL
Mp3Recor.0042D95A
00407C54 . 51
PUSH ECX
00407C55 . 8D5424 18 LEA EDX,DWORD PTR
SS:[ESP+18]
00407C59 . 8BCC MOV ECX,ESP
00407C5B . 896424 24 MOV DWORD PTR SS:[ESP+24],ESP
00407C5F . 52 PUSH EDX
00407C60 . C68424 7C03000>MOV BYTE PTR SS:[ESP+37C],5
00407C68
. E8 ED5C0200 CALL Mp3Recor.0042D95A //關鍵call㈠,檢查是否已存在註冊名,如果已存在,則繼續驗證
00407C6D . 8BCE MOV ECX,ESI
; |
00407C6F . 889C24 7803000>MOV BYTE PTR SS:[ESP+378],BL
; |
00407C76 . E8 75040000
CALL Mp3Recor.004080F0
; \Mp3Recor.004080F0 //關鍵call㈡,註冊碼計算
00407C7B .
68 34324500 PUSH Mp3Recor.00453234
; ASCII "help.chm"
00407C80 . 8986
E0000000 MOV DWORD PTR DS:[ESI+E0],EAX
00407C86 . E8 79160100
CALL Mp3Recor.00419304
00407C8B . 83C4 04
ADD ESP,4
00407C8E . 8D4C24 20 LEA ECX,DWORD
PTR SS:[ESP+20]
00407C92 . 8986 8C000000 MOV DWORD PTR DS:[ESI+8C],EAX
00407C98 . 6A 00 PUSH 0
00407C9A
. E8 91080000 CALL Mp3Recor.00408530
00407C9F . 8D4424
20 LEA EAX,DWORD PTR SS:[ESP+20]
00407CA3 . 8D4C24
20 LEA ECX,DWORD PTR SS:[ESP+20]
00407CA7 . C68424
7003000>MOV BYTE PTR SS:[ESP+370],6
00407CAF . 8946 1C
MOV DWORD PTR DS:[ESI+1C],EAX
00407CB2 . E8 94AB0200
CALL Mp3Recor.0043284B
00407CB7 . 8D8C24 1402000>LEA ECX,DWORD
PTR SS:[ESP+214]
00407CBE . C68424 7003000>MOV BYTE PTR SS:[ESP+370],0B
00407CC6 . E8 15F3FFFF CALL Mp3Recor.00406FE0
00407CCB
. 8D8C24 C801000>LEA ECX,DWORD PTR SS:[ESP+1C8]
00407CD2 . C68424 7003000>MOV
BYTE PTR SS:[ESP+370],0A
00407CDA . E8 01F3FFFF CALL Mp3Recor.00406FE0
00407CDF . 8D8C24 2801000>LEA ECX,DWORD PTR SS:[ESP+128]
00407CE6
. C68424 7003000>MOV BYTE PTR SS:[ESP+370],9
00407CEE . E8 D43D0300
CALL Mp3Recor.0043BAC7
00407CF3 . 8D8C24 CC00000>LEA ECX,DWORD
PTR SS:[ESP+CC]
00407CFA . C68424 7003000>MOV BYTE PTR SS:[ESP+370],8
00407D02 . E8 D999FFFF CALL Mp3Recor.004016E0
00407D07
. 8D8C24 9000000>LEA ECX,DWORD PTR SS:[ESP+90]
00407D0E . C68424 7003000>MOV
BYTE PTR SS:[ESP+370],7
00407D16 . E8 2F450200 CALL Mp3Recor.0042C24A
00407D1B . 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20]
00407D1F . 889C24 7003000>MOV BYTE PTR SS:[ESP+370],BL
00407D26
. E8 F3A70200 CALL Mp3Recor.0043251E
00407D2B . 8D4C24
14 LEA ECX,DWORD PTR SS:[ESP+14]
00407D2F . C68424
7003000>MOV BYTE PTR SS:[ESP+370],1
00407D37 . E8 A95E0200
CALL Mp3Recor.0042DBE5
00407D3C . 8D4C24 10 LEA
ECX,DWORD PTR SS:[ESP+10]
00407D40 . 89BC24 7003000>MOV DWORD PTR SS:[ESP+370],EDI
00407D47 . E8 995E0200 CALL Mp3Recor.0042DBE5
00407D4C
. 8B8C24 6803000>MOV ECX,DWORD PTR SS:[ESP+368]
00407D53 . 5F
POP EDI
00407D54 . 5E
POP ESI
00407D55 . 33C0
XOR EAX,EAX
00407D57 . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00407D5E . 5B POP EBX
00407D5F . 81C4 68030000 ADD ESP,368
00407D65 . C3
RETN
------------------------------------------------------------------
進入 407C68 的關鍵call㈠
0042D95A /$ 56
PUSH ESI
0042D95B |. 8BF1
MOV ESI,ECX
0042D95D |. 8B4C24 08 MOV ECX,DWORD
PTR SS:[ESP+8]
0042D961 |. 8B01 MOV
EAX,DWORD PTR DS:[ECX] //註冊名放入eax
0042D963 |. 8378 F4 00
CMP DWORD PTR DS:[EAX-C],0 //比較註冊名長度是否為0,即是否已有註冊名
0042D967
|. 7C 0E JL SHORT Mp3Recor.0042D977 //登錄檔中沒有註冊名則跳
0042D969 |. 8906 MOV DWORD PTR DS:[ESI],EAX
0042D96B |. 83C0 F4 ADD EAX,-0C
0042D96E
|. 50 PUSH EAX
; /pVar
0042D96F |. FF15 8C334400 CALL DWORD PTR DS:[<&KERNEL32.Interlocke>;
\InterlockedIncrement
0042D975 |. EB 10
JMP SHORT Mp3Recor.0042D987
0042D977 |> A1 803A4500
MOV EAX,DWORD PTR DS:[453A80]
0042D97C |. 8906
MOV DWORD PTR DS:[ESI],EAX
0042D97E |. FF31
PUSH DWORD PTR DS:[ECX]
0042D980 |. 8BCE
MOV ECX,ESI
0042D982 |. E8 E7030000
CALL Mp3Recor.0042DD6E
0042D987 |> 8BC6
MOV EAX,ESI
0042D989 |. 5E
POP ESI
0042D98A \. C2 0400
RETN 4
------------------------------------------------------------------
進入 407C76 的關鍵call㈡
004080F0 /$ 6A FF
PUSH -1
004080F2 |. 68 E0004400 PUSH Mp3Recor.004400E0
; SE handler installation
004080F7 |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004080FD
|. 50 PUSH EAX
004080FE |.
64:8925 000000>MOV DWORD PTR FS:[0],ESP
00408105 |. 81EC D4000000
SUB ESP,0D4
0040810B |. 53
PUSH EBX
0040810C |. 33DB XOR EBX,EBX
0040810E |. 899C24 E000000>MOV DWORD PTR SS:[ESP+E0],EBX
00408115
|. 8B8424 E800000>MOV EAX,DWORD PTR SS:[ESP+E8] //註冊名放入eax
0040811C
|. 68 94674500 PUSH Mp3Recor.00456794
; /Arg2 = 00456794
00408121 |. 50
PUSH EAX
;
|Arg1
00408122 |. C781 E4000000 >MOV DWORD PTR DS:[ECX+E4],1
; |
0040812C |. E8 24110100
CALL Mp3Recor.00419255
; \Mp3Recor.00419255
00408131 |. 83C4 08
ADD ESP,8
00408134 |. 85C0
TEST EAX,EAX
00408136 |. 0F84 19010000 JE Mp3Recor.00408255
0040813C |. 8B8C24 EC00000>MOV ECX,DWORD PTR SS:[ESP+EC] //假碼放入ecx
00408143 |. 68 94674500 PUSH Mp3Recor.00456794
; /Arg2 = 00456794
00408148
|. 51 PUSH ECX
; |Arg1 //假碼入棧
00408149 |. E8 07110100 CALL Mp3Recor.00419255
; \Mp3Recor.00419255
0040814E |. 83C4 08 ADD ESP,8
00408151
|. 85C0 TEST EAX,EAX
00408153 |.
0F84 FC000000 JE Mp3Recor.00408255
00408159 |. 55
PUSH EBP
0040815A |. 8BAC24 EC00000>MOV
EBP,DWORD PTR SS:[ESP+EC]
00408161 |. 56
PUSH ESI
00408162 |. B0 72
MOV AL,72 //al=72
00408164 |. 8B75 F8
MOV ESI,DWORD PTR SS:[EBP-8] //註冊名長度送 esi
00408167 |.
33C9 XOR ECX,ECX //ecx清零,做記數器
00408169
|. 3BF3 CMP ESI,EBX
0040816B
|. C64424 0C 6D MOV BYTE PTR SS:[ESP+C],6D //6D = m
00408170
|. C64424 0D 70 MOV BYTE PTR SS:[ESP+D],70 //70 = p
00408175
|. C64424 0E 33 MOV BYTE PTR SS:[ESP+E],33 //33 = 3
0040817A
|. 884424 0F MOV BYTE PTR SS:[ESP+F],AL //AL = 72 =
r
0040817E |. C64424 10 65 MOV BYTE PTR SS:[ESP+10],65
//65 = e
00408183 |. C64424 11 63 MOV BYTE PTR SS:[ESP+11],63
//63 = c
00408188 |. C64424 12 6F MOV BYTE PTR SS:[ESP+12],6F
//6F = o
0040818D |. 884424 13 MOV BYTE PTR SS:[ESP+13],AL
//AL = 72 = r
00408191 |. 885C24 14 MOV BYTE PTR
SS:[ESP+14],BL //BL = 0,這句無用途?
//以上程式碼是在 [ESP+C] 開始,依次放入 mp3recor 這個字串
00408195 |. 7E 3D JLE SHORT
Mp3Recor.004081D4
00408197 |. 57
PUSH EDI
00408198 |. 8D7C34 1B LEA EDI,DWORD
PTR SS:[ESP+ESI+1B]
//迴圈運算開始
0040819C |> 8A0429
/MOV AL,BYTE PTR DS:[ECX+EBP] //逐位取註冊名的ASCII值,並放入 al
0040819F |. 8BD1 |MOV EDX,ECX //edx=ecx
004081A1 |. 81E2 07000080 |AND EDX,80000007 //edx∧80000007,此時edx為迴圈的次數
004081A7 |. 79 05 |JNS SHORT Mp3Recor.004081AE
//非負數則跳到 4081AE 繼續
004081A9 |. 4A
|DEC EDX
004081AA |. 83CA F8 |OR
EDX,FFFFFFF8
004081AD |. 42
|INC EDX
004081AE |> 0FBE5414 10 |MOVSX EDX,BYTE PTR SS:[ESP+EDX+10]
//從預設字串 mp3recor 中逐位取字元,放入 edx
004081B3 |. 0FBEC0
|MOVSX EAX,AL //取使用者名稱ASCII
004081B6 |. 8BD9
|MOV EBX,ECX //ebx=ecx,ecx 為迴圈次數,從0開始算
004081B8
|. 03DA |ADD EBX,EDX //ebx=ebx+edx,edx
中是取得的預設字串的ASCII值(第N次迴圈就取第N個,預設字串長度為8,所以8次後從頭開始取)
004081BA |. 03C3
|ADD EAX,EBX //eax=eax+ebx
004081BC
|. BB 09000000 |MOV EBX,9 //ebx=9
004081C1 |. 03C6
|ADD EAX,ESI //eax=eax+esi,esi中是註冊名長度
004081C3
|. 99 |CDQ //edx雙字擴充套件(清零)
004081C4
|. F7FB |IDIV EBX //eax=eax/9,餘數放入 edx
004081C6 |. 80C2 30 |ADD DL,30 //dl=dl+30,即餘數+30
004081C9 |. 41 |INC ECX
//記數器+1
004081CA |. 8817 |MOV BYTE
PTR DS:[EDI],DL //dl->[EDI],dl中是對應註冊名計算出來的註冊碼
004081CC |. 4F
|DEC EDI //edi-1,地址往前推,所以求出的註冊碼是逆著放的,即註冊名第一個字元計算出來的數,應該是此部分註冊碼的最後一個數
004081CD |. 3BCE |CMP ECX,ESI
//比較註冊名是否已取完
004081CF |.^7C CB \JL
SHORT Mp3Recor.0040819C //沒有取完則跳回去繼續
//迴圈結束
//透過以上迴圈,可以得到對應註冊名的註冊碼的第一部分“55181870”
//以上迴圈演算法可總結如下:
//註冊名長度為L,N(I)為註冊名第I位字元,M(I)為預設字串“mp3recor”第I位字元,迴圈次數為X,則
//註冊碼(X-I+1)位為:(N(I)+M(I)+X1)/9 的餘數+30
//以我填入的註冊名第7位“r”為例,註冊碼第(8-7+1)為:
//(72+6F+81)/9=EF/9=1A,r=5
//所以第2位註冊碼為5
004081D1
|. 33DB XOR EBX,EBX
004081D3 |. 5F
POP EDI
004081D4 |> 8D46 72
LEA EAX,DWORD PTR DS:[ESI+72] //esi中是註冊名長度,所以這裡是取註冊名長度+72
004081D7 |. B9 09000000 MOV ECX,9 //ecx=9
004081DC
|. 99 CDQ //edx雙字擴充套件(清零)
004081DD
|. F7F9 IDIV ECX //eax=eax/9,餘數放入 edx
004081DF |. 8B8424 F400000>MOV EAX,DWORD PTR SS:[ESP+F4] //假碼放入eax
004081E6 |. 80C2 30 ADD DL,30 //dl+30,這是註冊碼的最後一位
004081E9 |. 885434 18 MOV BYTE PTR SS:[ESP+ESI+18],DL
//dl 放入[ESP+ESI+18],ESP+18 是第一部分註冊碼的起始地址,所以這裡就是放到之前算出的第一部分註冊碼之後
//這是註冊碼第二部分的計算,其值為
((L+72)/9 的餘數)+30
//我輸入的註冊名為8個字元,則(8+72)/9=D,r=5,所以這一位註冊碼為5
004081ED
|. 885C34 19 MOV BYTE PTR SS:[ESP+ESI+19],BL
004081F1
|. 8D7424 18 LEA ESI,DWORD PTR SS:[ESP+18] //真碼放入esi
004081F5 |> 8A10 /MOV DL,BYTE
PTR DS:[EAX]
004081F7 |. 8ACA |MOV
CL,DL
004081F9 |. 3A16 |CMP DL,BYTE
PTR DS:[ESI]
004081FB |. 75 1C |JNZ
SHORT Mp3Recor.00408219
004081FD |. 3ACB
|CMP CL,BL
004081FF |. 74 14
|JE SHORT Mp3Recor.00408215
00408201 |. 8A50 01
|MOV DL,BYTE PTR DS:[EAX+1]
00408204 |. 8ACA
|MOV CL,DL
00408206 |. 3A56 01
|CMP DL,BYTE PTR DS:[ESI+1]
00408209 |. 75 0E
|JNZ SHORT Mp3Recor.00408219
0040820B |. 83C0 02
|ADD EAX,2
0040820E |. 83C6 02
|ADD ESI,2
00408211 |. 3ACB |CMP
CL,BL
00408213 |.^75 E0 \JNZ SHORT
Mp3Recor.004081F5
//以上是逐位對比輸入的註冊碼和真碼是否相同
00408215 |> 33C0
XOR EAX,EAX
00408217 |. EB 05
JMP SHORT Mp3Recor.0040821E
00408219 |> 1BC0
SBB EAX,EAX
0040821B |. 83D8 FF
SBB EAX,-1
0040821E |> 5E
POP ESI
0040821F |. 3BC3
CMP EAX,EBX
00408221 |. 5D
POP EBP
00408222 |. 889C24 E000000>MOV BYTE PTR SS:[ESP+E0],BL
00408229 |. 8D8C24 E800000>LEA ECX,DWORD PTR SS:[ESP+E8]
00408230
|. 75 31 JNZ SHORT Mp3Recor.00408263
00408232
|. E8 AE590200 CALL Mp3Recor.0042DBE5
00408237 |. 8D8C24
EC00000>LEA ECX,DWORD PTR SS:[ESP+EC]
0040823E |. C78424 E000000>MOV
DWORD PTR SS:[ESP+E0],-1
00408249 |. E8 97590200 CALL
Mp3Recor.0042DBE5
0040824E |. B8 01000000 MOV EAX,1
00408253 |. EB 2C JMP SHORT Mp3Recor.00408281
00408255 |> 889C24 E000000>MOV BYTE PTR SS:[ESP+E0],BL
0040825C
|. 8D8C24 E800000>LEA ECX,DWORD PTR SS:[ESP+E8]
00408263 |> E8 7D590200
CALL Mp3Recor.0042DBE5
00408268 |. 8D8C24 EC00000>LEA ECX,DWORD
PTR SS:[ESP+EC]
0040826F |. C78424 E000000>MOV DWORD PTR SS:[ESP+E0],-1
0040827A |. E8 66590200 CALL Mp3Recor.0042DBE5
0040827F
|. 33C0 XOR EAX,EAX
00408281 |> 8B8C24
D800000>MOV ECX,DWORD PTR SS:[ESP+D8]
00408288 |. 5B
POP EBX
00408289 |. 64:890D 000000>MOV DWORD PTR
FS:[0],ECX
00408290 |. 81C4 E0000000 ADD ESP,0E0
00408296
\. C2 0800 RETN 8
所以註冊碼由兩部分組成,長度為註冊名長度+1。至此,EZ
MP3 Recorder 1.15 註冊演算法分析完成。
一組可用的註冊碼:Name: lovefire S/N: 551818705
相關文章
- FolderView 1.7
註冊演算法分析 (14千字)2015-11-15View演算法
- CoolClock V1.02註冊演算法分析 ---OCG (14千字)2015-11-15演算法
- S-DEMO2 註冊分析 (14千字)2002-06-25
- Personal Antispy 1.14 註冊演算法分析2015-11-15演算法
- Active Ebook Compiler的註冊演算法 (14千字)2001-05-09Compile演算法
- 重新貼過註冊演算法分析 (16千字)2001-10-23演算法
- EffeTech HTTP Sniffer 3.2註冊演算法分析 (5千字)2002-06-24HTTP演算法
- Green Tea 2.60註冊碼演算法分析 (3千字)2000-07-17演算法
- SuperCleaner 2.31註冊碼演算法分析 - OCG (13千字)2002-04-02演算法
- Registry Crawler 4.0註冊碼演算法分析 - OCG
(20千字)2002-04-07演算法
- UltraEdit-32
10註冊碼演算法分析 (19千字)2003-05-17演算法
- 完美解除安裝6.0註冊演算法分析 (2千字)2002-02-27演算法
- Directory Scanner v1.5 註冊演算法分析 (6千字)2015-11-15演算法
- MouseStar V3.01註冊演算法分析 (18千字)2015-11-15演算法
- **********.exe註冊碼演算法分析--高手莫笑 (31千字)2015-11-15演算法
- Cleaner 3.2註冊分析 (18千字)2001-12-09
- 註冊碼演算法 (2千字)2001-01-14演算法
- 《EASY MP3 2.2》的註冊碼破解 高手莫入! (2千字)2001-05-05
- 給TAE!的小禮物---對DISKdata v3.3.2註冊演算法的分析 (14千字)2001-07-13演算法
- supercleaner註冊演算法分析2015-11-15演算法
- Screen Demo Maker
V3.0註冊演算法分析 (8千字)2002-09-10演算法
- Konvertor 3.03的註冊碼演算法模組的分析
(7千字)2015-11-15演算法
- Magic convertor 2.8註冊碼演算法分析
- OCG (9千字)2015-11-15演算法
- 飄雪動畫秀3.02註冊演算法分析!
(11千字)2015-11-15動畫演算法
- 註冊PSXVIDEO Ver1.12詳細演算法 (14千字)2001-04-11IDE演算法
- ClockWise 3.22e註冊碼演算法分析 - OCG (17千字)2002-04-10演算法
- 〖網際營銷〗V2.4 註冊演算法分析 (11千字)2001-11-03演算法
- GSview V4.12 for Windows註冊演算法分析 -
OCG (8千字)2015-11-15ViewWindows演算法
- 一個區域網工具的註冊演算法分析
(5千字)2015-11-15演算法
- SpeedFlash註冊演算法分析(VB)2015-11-15演算法
- 財智老闆通3.04註冊版---註冊演算法分析2003-03-16演算法
- Instant Source 註冊演算法分析+註冊器原始碼2015-11-15演算法原始碼
- DreamWaver3.0註冊流程分析 (17千字)2001-09-10
- CDSpace Power+註冊演算法 (7千字)2001-07-27演算法
- 《棋隱》的註冊演算法 (19千字)2001-08-26演算法
- Search32-PRO
v6.05註冊演算法分析 - OCG (46千字)2002-04-07演算法
- 五筆輸入通1.x註冊演算法分析
(10千字)2015-11-15演算法
- CPUCOOL 5.1000註冊碼分析 (6千字)2001-01-19