olldbg小解音訊轉換工具ezConverter!入門級 (14千字)
軟體名稱:ezConverter 2.0.746(Microsoft Visual C++ 6.0)
使用工具:olldbg 1.09c
方法:先暴破,再找註冊碼,生成註冊檔案
程度:初級
用peid查殼,沒有加殼。使用的是VC6.0。比較好下手
首先試執行程式,發現未註冊時啟動時有提示視窗,這就是突破口。在程式的註冊視窗中隨便輸入使用者名稱(chenji)和註冊碼(abcdefg1234567),程式提示重新執行軟體再進行註冊檢驗。下面正式開始:
開啟OLLDBG選擇debug->select import libraries將MFC42.lib檔案載入 ,破解此軟體必須使用!
再載入ezConverter.exe檔案,在CPU視窗點右鍵快捷選單,選擇search for-->Name(label) in current module或直接按ctrl+N。找到MFC42.#1199_AfxMessageBox和MFC.#1200_AfxMessageBox,在這兩項上點右鍵選擇set breakpoint on every reference,將每個引用這兩個函式的語句都設斷點,這兩個函式就是顯示提示視窗的。 按F9執行程式:很快就在00405791處中斷:
00405791 . E8 7>call 提示未註冊資訊
00405796 . 8D4C>lea ecx, dword ptr ss:[esp+8]
0040579A . C784>mov dword ptr ss:[esp+AC4], -1
004057A5 . E8 E>call
004057AA > 8BCE mov ecx, esi EZCONVER.004136E0
004057AC . E8 5>call EZCONVER.00405A10
004057B1 . 57 push edi
004057B2 . 8D4C>lea ecx, dword ptr ss:[esp+7C]
.
.
.
中斷後,向上翻看發現有幾個跳轉語句,有兩個內部呼叫可疑。有門!!!
004056AF . 8BF1 mov esi, ecx 先設個斷點
004056B1 . 57 push edi
004056B2 . E8 7>call
004056B7 . 83C4>add esp, 4
004056BA . E8 6>call ;初始化執行環境
004056BF . 8BCE mov ecx, esi EZCONVER.004136E0
004056C1 . E8 5>call ;初始化執行環境
004056C6 . 8D86>lea eax, dword ptr ds:[esi+C4]
004056CC . 50 push eax /Buffer = 006CDB08
004056CD . 68 F>push 0FF |BufSize = FF (255.)
004056D2 . FF15>call near dword ptr ds:[<&KERNEL32.GetCurr>; \GetCurrentDirectoryA
004056D8 . 8BCE mov ecx, esi EZCONVER.004136E0
004056DA . E8 4>call EZCONVER.00405E20 處理註冊碼的呼叫,F7跟進去
004056DF . 84C0 test al, al
004056E1 . 0F85>jnz EZCONVER.004057AA ;關鍵的跳轉,一定要跳走
004056E7 . 57 push edi /Arg1 = 00000000
004056E8 . 8BCE mov ecx, esi |EZCONVER.004136E0
004056EA . E8 6>call EZCONVER.00406450 \EZCONVER.00406450
004056EF . B9 1>mov ecx, 1E
004056F4 . 2BC8 sub ecx, eax
004056F6 . 83F9>cmp ecx, -64
004056F9 . 898E>mov dword ptr ds:[esi+1C4], ecx
004056FF . 0F8C>jl EZCONVER.004058BE
00405705 . 83F9>cmp ecx, 1
00405708 . 7D 5>jge short EZCONVER.0040575D
0040570A . 57 push edi
0040570B . 8D4C>lea ecx, dword ptr ss:[esp+14]
0040570F . E8 2>call EZCONVER.0040CF40
00405714 . 8D4C>lea ecx, dword ptr ss:[esp+10]
00405718 . 89BC>mov dword ptr ss:[esp+AC4], edi
0040571F . E8 3>call
00405724 . 8D4C>lea ecx, dword ptr ss:[esp+74]
00405728 . C784>mov dword ptr ss:[esp+AC4], 2
00405733 . E8 5>call
00405738 . 8D4C>lea ecx, dword ptr ss:[esp+70]
0040573C . C684>mov byte ptr ss:[esp+AC4], 1
00405744 . E8 4>call
00405749 . C784>mov dword ptr ss:[esp+AC4], -1
00405754 . 8D4C>lea ecx, dword ptr ss:[esp+10]
00405758 . E9 5>jmp EZCONVER.004058B9
0040575D > 8D4C>lea ecx, dword ptr ss:[esp+8]
00405761 . E8 4>call
00405766 . 8B8E>mov ecx, dword ptr ds:[esi+1C4]
0040576C . 8D54>lea edx, dword ptr ss:[esp+8]
00405770 . 51 push ecx
00405771 . 68 9>push 92
00405776 . 52 push edx
00405777 . C784>mov dword ptr ss:[esp+AD0], 3
00405782 . E8 9>call
00405787 . 8B44>mov eax, dword ptr ss:[esp+14]
0040578B . 83C4>add esp, 0C
0040578E . 57 push edi
0040578F . 57 push edi
00405790 . 50 push eax
00405791 . E8 7>call 提示未註冊資訊
00405796 . 8D4C>lea ecx, dword ptr ss:[esp+8]
0040579A . C784>mov dword ptr ss:[esp+AC4], -1
004057A5 . E8 E>call
004057AA > 8BCE mov ecx, esi EZCONVER.004136E0
004057AC . E8 5>call EZCONVER.00405A10
004057B1 . 57 push edi
004057B2 . 8D4C>lea ecx, dword ptr ss:[esp+7C]
轉到004056AF處先設個斷點,然後按ctrl+f2重新載入程式,再次執行在004056AF處停下來。用F8執行到004056DA後,再用F7跟進去(建議在004056DA處設個斷點)。 跟進去後再用F8單步走,在00405EA8處得知軟體的註冊資訊儲存在erf.dat檔案中。
00405E9C |. C7>mov dword ptr ss:[esp+130], 0
00405EA7 |. 51 push ecx EZCONVER.004136E0
00405EA8 |. 68>push EZCONVER.004133CC ASCII "%s\\erf.dat"
00405EAD |. 52 push edx KERNEL32.BFFC9490
00405EAE |. E8>call
再繼續用F8往下走,在00405F93處發現了上次輸入的使用者名稱(chenji),看來跟的路是對的!!
00405F93 |. 8D>lea edi, dword ptr ss:[esp+40] ;發現了使用者名稱
00405F97 |. 8B>mov ecx, ebp
00405F99 |. 33>xor eax, eax
00405F9B |. F2>repne scas byte ptr es:[edi]
00405F9D |. F7>not ecx
00405F9F |. 49 dec ecx ;得到使用者名稱的長度
00405FA0 |. 83>cmp ecx, 1 如果是空的
00405FA3 |. 0F>jb EZCONVER.00406165 跳走就完完了
再繼續用F8往下走,在00405FA9處發現了上次輸入的註冊碼(abcdefg1234567),進行很基本的檢查,同上
00405FA9 |. 8D>lea edi, dword ptr ss:[esp+64] ;註冊碼
00405FAD |. 8B>mov ecx, ebp
00405FAF |. F2>repne scas byte ptr es:[edi]
00405FB1 |. F7>not ecx
00405FB3 |. 49 dec ecx
00405FB4 |. 83>cmp ecx, 1
00405FB7 |. 0F>jb EZCONVER.00406165 跳走就完了
再繼續用F8往下走,有一個判斷語句,不用管一直走下去
00405FBD |. 8D>lea edi, dword ptr ss:[esp+40]
00405FC1 |. 8B>mov ecx, ebp KERNEL32.BFF70000
00405FC3 |. F2>repne scas byte ptr es:[edi]
00405FC5 |. 8B>mov ebx, dword ptr ds:[<&USER32.Char>; 將使用者名稱轉為大寫
00405FCB |. 8B>mov esi, ebp KERNEL32.BFF70000
00405FCD |. F7>not ecx
00405FCF |. 49 dec ecx
00405FD0 |. 8B>mov edi, ecx
00405FD2 |. 8D>lea ecx, dword ptr ss:[esp+40]
00405FD6 |. 51 push ecx /StringOrChar = "."
00405FD7 |. FF>call near ebx \CharUpperA
00405FD9 |. 33>xor ecx, ecx
00405FDB |. 85>test edi, edi
00405FDD |. 7E>jle short EZCONVER.0040604A 可能要進行運算
00405FDF |> 8B>/mov eax, ecx
00405FE1 |. BD>|mov ebp, 3
00405FE6 |. 99 |cdq
00405FE7 |. F7>|idiv ebp KERNEL32.BFF70000
00405FE9 |. 46 |inc esi
00405FEA |. 85>|test edx, edx Switch (cases 0..2)
00405FEC |. 75>|jnz short EZCONVER.00406005
00405FEE |. 8A>|mov al, byte ptr ss:[esp+ecx+40] Case 0 of switch 00405FEA
00405FF2 |. 0F>|movsx edx, al
00405FF5 |. 83>|sub edx, 5
00405FF8 |. 83>|cmp edx, 41
00405FFB |. 7E>|jle short EZCONVER.00406001
00405FFD |. 2C>|sub al, 5
00405FFF |. EB>|jmp short EZCONVER.0040603B
00406001 |> 04>|add al, 5
00406003 |. EB>|jmp short EZCONVER.0040603B
00406005 |> 83>|cmp edx, 1
00406008 |. 75>|jnz short EZCONVER.00406021
0040600A |. 8A>|mov al, byte ptr ss:[esp+ecx+40] Case 1 of switch 00405FEA
0040600E |. 0F>|movsx edx, al
00406011 |. 83>|add edx, 7
00406014 |. 83>|cmp edx, 5A
00406017 |. 7D>|jge short EZCONVER.0040601D
00406019 |. 04>|add al, 7
0040601B |. EB>|jmp short EZCONVER.0040603B
0040601D |> 2C>|sub al, 7
0040601F |. EB>|jmp short EZCONVER.0040603B
00406021 |> 83>|cmp edx, 2
00406024 |. 75>|jnz short EZCONVER.00406042
00406026 |. 8A>|mov al, byte ptr ss:[esp+ecx+40] Case 2 of switch 00405FEA
0040602A |. 0F>|movsx edx, al
0040602D |. 83>|sub edx, 9
00406030 |. 83>|cmp edx, 41
00406033 |. 7E>|jle short EZCONVER.00406039
00406035 |. 2C>|sub al, 9
00406037 |. EB>|jmp short EZCONVER.0040603B
00406039 |> 04>|add al, 9
0040603B |> 88>|mov byte ptr ss:[esp+esi+88], al
00406042 |> 41 |inc ecx Default case of switch 00405FEA
00406043 |. 3B>|cmp ecx, edi
00406045 |.^ 7C>\jl short EZCONVER.00405FDF
一直F8向下走,有一大堆的浮點運算,看不過來,可能是想轉移我們的注意力,再向下
00406047 |. 83>or ebp, FFFFFFFF
0040604A |> DD>fld qword ptr ds:[40FE00] ;浮點運算
00406050 |. 33>xor eax, eax
00406052 |. 85>test esi, esi
00406054 |. 7E>jle short EZCONVER.0040606D
00406056 |> 0F>/movsx ecx, byte ptr ss:[esp+eax+88]
0040605E |. 89>|mov dword ptr ss:[esp+14], ecx
00406062 |. 40 |inc eax
00406063 |. DB>|fild dword ptr ss:[esp+14] ;浮點運算
00406067 |. 3B>|cmp eax, esi
00406069 |. DE>|faddp st(1), st ;浮點運算
0040606B |.^ 7C>\jl short EZCONVER.00406056
0040606D |> D9>fld st ;浮點運算,完全是無聊的舉動
0040606F |. D9>fsin ;浮點運算,完全是無聊的舉動
00406071 |. D9>fcos ;浮點運算,完全是無聊的舉動
00406073 |. D9>fsin ;浮點運算,完全是無聊的舉動
00406075 |. D9>fcos ;浮點運算,完全是無聊的舉動
00406077 |. D9>fsin ;浮點運算,完全是無聊的舉動
00406079 |. DD>fst qword ptr ss:[esp+14] ;浮點運算,完全是無聊的舉動
0040607D |. DC>fcomp qword ptr ds:[40FE00] ;浮點運算,完全是無聊的舉動
00406083 |. DF>fstsw ax
00406085 |. F6>test ah, 1
00406088 |. 74>je short EZCONVER.004060AD
0040608A |> DC>/fmul qword ptr ds:[40FDF8] ;浮點運算
00406090 |. D9>|fld st
00406092 |. D9>|fsin ;浮點運算,完全是無聊的舉動
00406094 |. D9>|fcos ;浮點運算,完全是無聊的舉動
00406096 |. D9>|fsin ;浮點運算,完全是無聊的舉動
00406098 |. D9>|fcos ;浮點運算,完全是無聊的舉動
0040609A |. D9>|fsin ;浮點運算,完全是無聊的舉動
0040609C |. DD>|fst qword ptr ss:[esp+14] ;浮點運算,完全是無聊的舉動
004060A0 |. DC>|fcomp qword ptr ds:[40FE00] ;浮點運算,完全是無聊的舉動
004060A6 |. DF>|fstsw ax ;浮點運算,完全是無聊的舉動
004060A8 |. F6>|test ah, 1
004060AB |.^ 75>\jnz short EZCONVER.0040608A
004060AD |> \8B>mov edx, dword ptr ss:[esp+18]
004060B1 |. 8B>mov eax, dword ptr ss:[esp+14]
004060B5 |. 52 push edx
004060B6 |. 50 push eax / <%.14f> = 0.0
004060B7 |. 8D>lea ecx, dword ptr ss:[esp+E0] |
004060BE |. 68>push EZCONVER.004133C4 |format = "%.14f"
004060C3 |. 51 push ecx |s = 0000000E
004060C4 |. DD>fstp st |
004060C6 |. FF>call near dword ptr ds:[<&MSVCRT.spri>; \sprintf
004060CC |. 8D>lea edi, dword ptr ss:[esp+E8]
004060D3 |. 8B>mov ecx, ebp
004060D5 |. 33>xor eax, eax
004060D7 |. 83>add esp, 10
004060DA |. 33>xor edx, edx
004060DC |. F2>repne scas byte ptr es:[edi]
004060DE |. F7>not ecx
004060E0 |. 49 dec ecx
004060E1 |. 83>sub ecx, 2
004060E4 |. 74>je short EZCONVER.0040610D
004060E6 |> 8A>/mov al, byte ptr ss:[esp+edx+DA]
004060ED |. 8D>|lea edi, dword ptr ss:[esp+D8]
004060F4 |. 04>|add al, 41
004060F6 |. 8B>|mov ecx, ebp
004060F8 |. 88>|mov byte ptr ss:[esp+edx+88], al
004060FF |. 33>|xor eax, eax
00406101 |. 42 |inc edx
00406102 |. F2>|repne scas byte ptr es:[edi]
00406104 |. F7>|not ecx
00406106 |. 83>|add ecx, -3
00406109 |. 3B>|cmp edx, ecx
0040610B |.^ 72>\jb short EZCONVER.004060E6
執行到0040610D時,請注意dword ptr ss:[esp+88]中的值。在CPU視窗下的小視窗中顯示:
stack address=006AF1FC 在這一行上點右鍵,選擇follow address in dump。在記憶體視窗中將顯示:
wszysyvzusurvx ;很懷疑這個字串是正確的註冊碼。
0040610D |> \8D>lea ecx, dword ptr ss:[esp+88] 可能是正確的註冊碼
00406114 |. C6>mov byte ptr ss:[esp+esi+88], 0
0040611C |. 51 push ecx
0040611D |. FF>call near ebx ;轉換成大寫字母
0040611F |. 8D>lea edi, dword ptr ss:[esp+64] 這裡是自己輸入的註冊碼
00406123 |. 8B>mov ecx, ebp
00406125 |. 33>xor eax, eax
00406127 |. 8D>lea esi, dword ptr ss:[esp+88]
0040612E |. F2>repne scas byte ptr es:[edi]
00406130 |. F7>not ecx
00406132 |. 49 dec ecx
00406133 |. 8D>lea edi, dword ptr ss:[esp+64]
00406137 |. 33>xor edx, edx
00406139 |. 89>mov dword ptr ss:[esp+130], ebp
經過上面的變換"wszysyvzusurvx"就成了"WSZYS vzusurvx"了。中間不是空格,而是二進位制0x00。
再用F8走到 00406140 這裡是很關鍵的一個串比較語句!!!而到了00406146這個跳轉語句更是關鍵,一定不能跳。如果想暴破就將這條語句改為nop就可以了。具體方法就不說了
00406140 |. F3>repe cmps byte ptr es:[edi], byte ptr> ;關鍵的比較
00406142 |. 8D>lea ecx, dword ptr ss:[esp+10]
00406146 75>jnz short EZCONVER.00406170 關鍵關鍵!萬萬跳不得
00406148 |. E8>call
0040614D |. B0>mov al, 1
0040614F |. 8B>mov ecx, dword ptr ss:[esp+128]
00406156 |. 64>mov dword ptr fs:[0], ecx
0040615D |. 5F pop edi
0040615E |. 5E pop esi
0040615F |. 5D pop ebp
00406160 |. 5B pop ebx
00406161 |. 8B>mov esp, ebp
00406163 |. 5D pop ebp
00406164 |. C3 retn
00406165 |> 89>mov dword ptr ss:[esp+130], ebp
0040616C |> 8D>lea ecx, dword ptr ss:[esp+10]
00406170 |> E8>call ;進來就完蛋了
00406175 |> 8B>mov ecx, dword ptr ss:[esp+128]
0040617C |. 5F pop edi
0040617D |. 32>xor al, al
0040617F |. 64>mov dword ptr fs:[0], ecx
00406186 |. 5E pop esi
00406187 |. 5D pop ebp
00406188 |. 5B pop ebx
00406189 |. 8B>mov esp, ebp
0040618B |. 5D pop ebp
0040618C \. C3 retn
"WSZYS vzusurvx"就是正確的註冊碼!
建議:在00406140這個關鍵比較前,將記憶體視窗中自己先前輸入的註冊碼(在正確的註冊碼的上面一點)改成正確的註冊碼,然後實驗一下不改語句而註冊成功的效果。這樣會在erf.dat檔案中寫入了正確的註冊資訊,以後就不要再進行註冊和修改了,只需要儲存erf.dat這個註冊授權檔案中可以了。
(注意:程式在後面會進行5次註冊碼的校驗)
註冊碼的運算過程沒有進行分析,只想很快得到效果!目標是最重要的!
先收工了!用時30分鐘。今天我在值班很無聊!
CCWW
相關文章
- DRM音訊清除轉換工具2021-09-27音訊
- 好用的音訊格式轉換工具2021-09-28音訊
- NCH Switch Plus for Mac 音訊轉換工具2021-08-22Mac音訊
- 音視訊--音訊入門2018-12-18音訊
- 音視訊–音訊入門2018-12-18音訊
- 音視訊--視訊入門2018-12-25
- MacDVD音訊轉換工具——Xilisoft DVD to iPhone Converter for Mac2020-05-11Mac音訊iPhone
- DRM音訊轉換工具:DRmare Audio Converter Mac2023-12-12音訊Mac
- 視訊轉換工具2021-10-16
- NoteBurner iTunes DRM Audio Converter for Mac 音訊轉換工具2022-01-24Mac音訊
- RabbitMQ 入門(三)SpringAMQP訊息轉換器2024-10-26MQSpringGAM
- Spotify音樂下載轉換工具2021-11-26
- NCH Switch Plus for Mac(音訊轉換工具) v9.04啟用版2021-02-09Mac音訊
- 全能影片音訊格式轉換工具:Filmage Converter for Mac中文版2023-03-28音訊Mac
- 迅捷音訊轉換器怎麼使用?2019-03-01音訊
- 音視訊格式轉換器Permute 32022-05-13
- 萬能音訊轉換器Permute 32022-06-27音訊
- 應用olldbg快速除錯入門(一分鐘搞定QQ圖形留言器
8.0) (2千字)2002-04-13LLDB除錯
- 如何入門論文閱讀&綜述小解答2021-01-02
- 音視訊入門之音訊採集、編碼、播放2018-12-28音訊
- freac for mac音訊和CD格式轉換器2020-11-18Mac音訊
- AudFree Auditior for Mac(Mac音訊轉換器)2022-12-24Mac音訊
- 音視訊格式轉換器Permute 3 mac2021-11-04Mac
- Mac視訊格式轉換工具—iFlicks2021-11-07Mac
- MakeMKV——MKV視訊格式轉換工具2021-11-03
- 全能的視訊格式轉換工具2021-10-16
- 將雙通道音訊轉換為兩條單通道音訊的解決方案2024-09-20音訊
- Permute 3 for mac(萬能音視訊轉換器)2022-07-10Mac
- 視訊音樂圖片格式轉換Permute 32022-05-26
- Mac萬能音視訊轉換器:Permute 32022-06-08Mac
- 萬能音視訊轉換器Permute 3 for mac2021-11-17Mac
- Permute 3 for mac萬能音視訊轉換器2022-03-11Mac
- DRM音訊轉換工具:DRmare Audio Converter Mac v2.8.0啟用版2023-12-25音訊Mac
- MKV視訊格式轉換工具:MakeMKV mac2022-02-28Mac
- 豪傑超極解霸視訊轉換
(6千字)2015-11-15
- Permute 3 for Mac,全能音影片格式轉換工具!2023-12-25Mac
- Permute 3 for mac(Mac音影片格式轉換工具)2022-06-08Mac
- Mac 使用音訊工具分析音訊資料2020-10-31Mac音訊