翻譯的第三篇,軟體演算法和 OllyDB的用法(新的除錯軟體) (10千字)
原著:Hoof Arted
譯者:TAE![CCG]
唉,這篇翻譯的實在是太爛了,大家就看看如何使用新的除錯工具 OllyDB 吧。
新手教程 by Hoof Arted (Hoof's Workshop)
教程 - ;破解並且做 DLLShow by Software By Design 的序號產生器(奇怪,這篇好像沒有序號產生器)
目標 : DLLShow V4.6 - http://www.gregorybraun.com/
工具 : OllyDBG.exe - http://www.suddendischarge.com
這是我的第一片教程,我希望有時間寫更多的,我是一個破解新手,搞破解已經花了我
太多的時間了,但我仍然有很長的路要走,我盡力使這篇文章通俗易懂,我認為只有在
你熟悉目標軟體的情況下,你才可以破解它,我將開始描述調我們這課需要的試產品。
我不是一個好的 SoftIce 迷,光是熟悉指令和安裝就花了我許多時間,我也很喜歡使用
W32dasm 但我儘管使用它在許多場合有很多限制。我升級到Windows2000後,竟然執行不
了32dasm 了,我想找一個和它相同的除錯/反編譯軟體,如果要比 w32dasm 更強大的,
那我就已經找到了,它就是 Ollydbg,做這是:Oleh Yuschuk,這是給像我一樣已經等了
很久的人的一個工具,會使用 w32dasm 的你,你也將會掌握它的。
一個偉大的工作即將開始。
幹掉它,跟我來吧,做我所作的,並且我盡我所能的解釋給你聽。
我選擇這個目標的原因是它沒有一個好用的解除安裝程式,許多程式設計師小販都不把他們的軟體
做的很友好:(
讓我們開始吧!
到我上面寫的那個網站下載一個目標程式。解壓縮並且安裝它,執行 DLLShow 並且選擇
註冊選項。你將看見軟體需要輸入名字,公司和註冊碼,我們現在已經可以大致確定這是
一個根據姓名和公司名來生成註冊碼的軟體,這也是破解過程中的一個進展。我們要找出
密碼,並且看它使如何產生的。
好的,現在我們要輸入註冊碼但我們根本沒有正確的註冊碼,開啟 Ollydbg 並且用它開啟
軟體(DLLShow.exe)。預設的,你將看見4段不同用處的除錯視窗,左上角的用於顯示反編
譯程式碼,右上角的用於顯示暫存器資料這是非常有用的,不像softice,你想檢視暫存器中
有疑問的地址,那麼這個偵錯程式顯示地址的內容,如果程式使ascii碼值(姓名或註冊碼:),
都將顯示它並且你不需要轉換。(這段翻譯的有些難懂,我也很難理解原文)
左下角,顯示當前所載入的軟體資料在記憶體中的位置,這對找出資料很有幫助,你將待會兒
將看見我是如何利用它的,右下角顯示被各種函式所使用的記憶體,我也是初學者,也不知道
這個視窗的所有用處,但是現在,我們並不需要知道。
那好,用偵錯程式載入程式,我們需要執行它。選擇"Deebug" 並且點選"Run"或按 F9。軟體
將像平時一樣執行。去註冊視窗並且輸入名字,公司和註冊碼我輸入的是:
NAME : Hoof Arted
COMPANY : Hoof's Workshop
SERIAL : 77777777
你現在可以是用任何數字作註冊碼,我喜歡7,而且保持在8個字元,這將是我幹得快些,(他
們說7是幸運數字!)
我們知道如果我們點選 “OK”按鈕,軟體將會彈出一個“愚蠢破解者”的視窗,我們需要知道在
哪裡設定斷點,我喜歡首先試著用 GetDlgItemTextA ,在 Ollydbg 中設定斷點有一些不同,
因為查詢函式不像你希望的那樣工作,右擊左上角的視窗,並且選擇 “Search for NAME (LABEL)”
這將出現一個帶有許多軟體所使用的函式的小視窗,向下拉動滑動條到了USER32.GetDlgItemTextA
並且使它處於高亮狀態,右擊它選擇"Find references to import",;另一個視窗開啟了,顯示
著軟體呼叫函式的地址,透過按F2在每一個上面都設定一個斷點,然後他的左邊就會變成紅色,
如果有任何地方呼叫這裡都會被偵錯程式所暫停。
好的,現在單擊目標軟體的“OK”按鈕。偵錯程式將停在地址 4159FB 這裡,我們不關心函式
GetDlgItem function 是如何執行的,所以我們點選地址 4159FB 並且按 F2 來清除斷點,然後,
選擇下一行再按 F2 來恢復斷點。按 F9 來執行軟體以透過這個地方,它再次被停下來了,我們
可以看見 ESI 暫存器(右上角) 現在有一個Ascii碼"Hoof Arted",真不錯!它現在得到我們的
名字了,如果我們再次按 F9,目標軟體將再次停在相同的斷點,但是這次,ESI 已經是我們的
公司名了,是一個 ASCII。按 F9 第三次 Esi 將顯示我們輸入的註冊碼。好,現在我們知道程式
已經得到我們所有的資訊了。它將要用這些資訊作什麼呢?
因為它已經得到了我們輸入的所有資訊了,我們需要從這兒將它帶到軟體中,我們不能再按F9執行,
因為要找到我們想要得到的東西,所以我們按 F7 來一步步的執行,直到你到了以下程式碼處 :
0040D717 |. 8D4C24 40 LEA ECX,DWORD PTR
SS:[ESP+40] <<<<<<<<
0040D71B |. 51 PUSH
ECX
0040D71C |. E8 25990000 CALL DLLShow.00417046
<<<<<<< Call (a)
0040D721 |. 56 PUSH
ESI
0040D722 |. 8BD8 MOV EBX,EAX
0040D724 |. E8 37820000 CALL DLLShow.00415960
<<<<<<< Call (b)
0040D729 |. 83C4 38 ADD ESP,38
0040D72C |. 3D 92A71901 CMP EAX,119A792
0040D731 |.,75 18 JNZ SHORT
DLLShow.0040D74B
現在,如果你進入了第一個Call (Call A) 你將看見它對我們的註冊碼做了些社那麼,我們對
暫時不關心這個,設定斷點在 0040D721 並按 F9,當我們停在下一行的時候,我們可以看看寄
存器 EAX ,我的顯示為 04A2CB71,這個數的十進位制是什麼?用計算器算一下看看,這是我們
輸入的假註冊碼!call A 是將我們的假註冊碼轉換為16進位制, Hmmmm...有趣,可能下一個call
就是計算正確註冊碼的地方了,按 F7 進入 call 然後停一停,有些東西我需要解釋給你聽。
正如你所看到的,函式被顯示在下面:
00415960 /$ 51 PUSH
ECX
;
DLLShow.00426006
00415961 |. 53 PUSH
EBX
00415962 |. 8B5C24 0C MOV EBX,DWORD PTR
SS:[ESP+C]
00415966 |. 56 PUSH
ESI
00415967 |. 33F6 XOR ESI,ESI
00415969 |. 53 PUSH
EBX
; /Length Of Name
0041596A |. 897424 0C MOV DWORD PTR SS:[ESP+C],ESI
; |
0041596E |. FF15 B4E04100 CALL DWORD PTR DS:[<&KERNEL32.lstrlen>;
\lstrlenA
00415974 |. 85DB TEST EBX,EBX
00415976 |.,74 4F JE
SHORT DLLShow.004159C7
00415978 |. 85C0 TEST EAX,EAX
0041597A |.,74 4B JE
SHORT DLLShow.004159C7
0041597C |. 33D2 XOR EDX,EDX
0041597E |. 85C0 TEST EAX,EAX
00415980 |.,7E 45 JLE SHORT
DLLShow.004159C7
00415982 |. 55 PUSH
EBP
00415983 |. 57 PUSH
EDI
00415984 |. BE 183E4200 MOV ESI,DLLShow.00423E18
;ASCII"|b!pz*ls;rn|lf$vi^Axpe)rx5aic&9/2m5lsi4@0dmZw94cmqpfhw"
00415989 |. BF 01000000 MOV EDI,1
0041598E |. 2BF3 SUB ESI,EBX
00415990 |. 8BCB MOV ECX,EBX
;
00415992 |. 2BFB SUB EDI,EBX
00415994 |> 0FBE1C0E MOVSX EBX,BYTE PTR DS:[ESI+ECX]
; 將上面的Ascii依次移動到EBX
00415998 |. 0FBEAC10 E03D4>MOVSX EBP,BYTE PTR DS:[EAX+EDX+423DE0]
; chr(423DE0 + Len + Pos) 放入 EBP
004159A0 |. 0FAFDD IMUL EBX,EBP
; 相乘
004159A3 |. 8D2C0F LEA EBP,DWORD
PTR DS:[EDI+ECX]
004159A6 |. 0FAFDD IMUL EBX,EBP
; 相乘結果再乘位數
004159A9 |. 0FBE29 MOVSX EBP,BYTE PTR
DS:[ECX] ; 移動名字的字元到EBP
004159AC |. 0FAFDD IMUL EBX,EBP
; 相乘結果再乘以名字字元
004159AF |. 8B6C24 10 MOV EBP,DWORD PTR
SS:[ESP+10] ;
004159B3 |. 03EB ADD EBP,EBX
; 累加
004159B5 |. 42 INC
EDX
; 下一個字元
004159B6 |. 41 INC
ECX
004159B7 |. 3BD0 CMP EDX,EAX
; 名字結束了嗎?
004159B9 |. 896C24 10 MOV DWORD PTR SS:[ESP+10],EBP
; 存入[ESP+10]
004159BD |.^7C D5 JL
SHORT DLLShow.00415994 ; 跳轉,形成迴圈
004159BF |. 8BC5 MOV EAX,EBP
;
004159C1 |. 5F POP
EDI
004159C2 |. 5D POP
EBP
004159C3 |. 5E POP
ESI
004159C4 |. 5B POP
EBX
004159C5 |. 59 POP
ECX
004159C6 |. C3 RETN
Ollydbg做的比較好的就是他可以給語句新增註釋,你還可以隨時更改這些註釋,我還
從沒有看見其他的偵錯程式可以做到這一點(譯者:TRW不就可以?)你只需要對著語句
點選右鍵然後選擇“Comment”即可,那很簡單。這樣你就不需要把重要的地方記在紙
上了。
好,我們看見那個函式檢查了名字的個數(0041596E),然後它就移動下面的 ascii:
"|b!pz*ls;rn|lf$vi^Axpe)rx5aic&9/2m5lsi4@0dmZw94cmqpfhw" (00415984)放進了內
存。那麼,這所有的動作說明了什麼呢?好的,如果我們熟悉它的話,就會發現它移動
我們上面所說的每個字元一個一個的放入EBX。EBP中的值就是從地址 423de0 + (我們
名字的個數) + (字元的位置)。但是,423de0 裡面又是什麼呢?讓我們把它找出來,
右擊左下部的並且選擇要去的地址,輸入 423de0 然後單擊“OK”,你將看到以下片斷:
00423DE0 23 73 65 72 42 26 6E 7A 7C 6D 66 4D 31 2F 35 28 #serB&nz|mfM1/5(
00423DF0 21 73 64 24 4D 71 2E 7B 73 5D 2B 73 46 6A 74 4B !sd$Mq.{s]+sFjtK
00423E00 70 7A 53 64 74 7A 6F 58 71 6D 62 5E 41 6C 40 64 pzSdtzoXqmb^Al@d
00423E10 76 3A 73 3F 78 2F 00 00 7C 62 21 70 7A 2A 6C 73 v:s?x/..|b!pz*ls
00423E20 3B 72 6E 7C 6C 66 24 76 69 5E 41 78 70 65 29 72 ;rn|lf$vi^Axpe)r
00423E30 78 35 61 69 63 26 39 2F 32 6D 35 6C 73 69 34 40 x5aic&9/2m5lsi4@
00423E40 30 64 6D 5A 77 39 34 63 6D 71 70 66 68 77
0dmZw94cmqpfhw
這是有用程式碼的第二段,下一行乘以兩個值,我這裡是“66”和“7C”,它然後它乘
以總數,用名字的位數1 (H)、2(o).... 它然後用名字的第一個字元和乘積,在我這兒
是48 (H),然後所有的數都這樣,我得總數是1E159AD,繼續按F7直到呢到達以下片斷:
00415400 /$ 8B4424 04 MOV EAX,DWORD PTR
SS:[ESP+4]
00415404 |. 56 PUSH
ESI
00415405 |. 8B35 84C34200 MOV ESI,DWORD PTR DS:[42C384]
;
DB95DB95 = Hardcoded
0041540B |. 50 PUSH
EAX
0041540C |. 81CE 78030000 OR ESI,378
; Or
with 378 = DB95DBFD
00415412 |. E8 49050000 CALL DLLShow.00415960
00415417 |. 8B4C24 10 MOV ECX,DWORD PTR
SS:[ESP+10]
0041541B |. 03F0 ADD ESI,EAX
; Add
Name total and Co total to DB95DBFD
0041541D |. 51 PUSH
ECX
0041541E |. E8 3D050000 CALL DLLShow.00415960
00415423 |. 83C4 08 ADD ESP,8
00415426 |. 03C6 ADD EAX,ESI
;
Total = E2F7A8AE
00415428 |. 5E POP
ESI
這是在幹什麼呢?它帶著你的總數,並且加上它的 hardcoded,(DB95DB95 OR 378) = DB95DBFD
整個計算此數過程以公司名重複的,兩個總和的地址指向 E2F7A8AE 這個數,做的所有事情就是轉化
成十進位制數。這個數就是註冊碼了!
按 F9 直到得到錯誤訊息並且輸入一個新的註冊碼,就是他!!! 你已經破解它了。
現在我們知道註冊碼被生產了,你可以做一個屬於你自己的序號產生器了,我已經破解這個公司出的許
多軟體了,因為他們是很懶惰的。他們使用同一種演算法,僅僅是換個ID"DB95DB95".
我希望你能從這個教程中學到一些關於 Ollydbg 的使用方法,這是一個新的除錯軟體。
Hoof Arted (Hoof's Workshop) "Go forth and KICK ass!"
h_arted@hotmail.com
相關文章
- 翻譯軟體2019-05-03
- 筆記|軟體除錯的技巧2019-07-07筆記除錯
- Translatium for Macmac翻譯軟體2020-10-29MacACM
- Mac電腦上好用的翻譯軟體2020-04-20Mac
- 可以翻譯ppt文件的軟體有哪些?2019-08-19
- 軟體除錯 (轉)2008-01-06除錯
- MacOS 下的 Laravel 除錯軟體 - Tinkerwell2019-11-18MacLaravel除錯
- Mac翻譯軟體Mate Translate2021-12-01Mac
- 翻譯英文軟體哪個好?中文翻譯英文最便捷的方法2019-10-22
- 第二個個人App,輕翻譯,輕量級的翻譯軟體1970-01-01APP
- 「翻譯」express-session 中介軟體2019-04-05ExpressSession
- Mac翻譯軟體——Mate Translate for Mac2020-10-21Mac
- 有道翻譯軟體下載地址2011-11-17
- 中文翻譯英語的軟體哪個好?如何完成中翻譯英2019-09-27
- win10如何刪除隱藏軟體_win10刪除隱藏軟體的方法2019-12-17Win10
- Google 谷歌翻譯 Mac 客戶端(Mac翻譯軟體)2022-03-23Go谷歌Mac客戶端
- 語音翻譯軟體怎麼用?怎麼實現語音的翻譯2019-08-20
- 推薦個我在用的免費翻譯軟體,支援多家翻譯API整合2022-04-13API
- Ubuntu安裝劃詞翻譯軟體Goldendict 單詞翻譯 句子翻譯2021-01-05UbuntuGo
- 有ppt文件翻譯軟體嗎?如何翻譯整篇ppt文件2019-08-16
- win10 刪除內建軟體方法 怎麼刪除windows10下的內建軟體2020-11-05Win10Windows
- [翻譯]西數某硬碟韌體除錯分析2016-03-25硬碟除錯
- 不錯的軟體,我來寫過程。:) (2千字)2001-05-13
- Mac色彩除錯濾鏡軟體2021-10-25Mac除錯
- 用Python做一個翻譯軟體2019-01-29Python
- translatium好用嗎?mac翻譯軟體推薦2022-03-14Mac
- win10電腦怎麼刪除隱藏的流氓軟體 win10強制刪除流氓軟體2022-03-13Win10
- 軟體開發的10個錯誤實踐2014-07-02
- 自上而下的軟體開發和自下而上軟體開發2014-02-19
- 如何 Docker 化編譯的軟體2018-02-21Docker編譯
- win10怎麼解除安裝軟體 強制刪除流氓軟體的辦法2021-10-11Win10
- 軟體危機和軟體缺陷的特點和區別2021-12-01
- 軟體除錯斷點之小記2011-09-08除錯斷點
- 讀《軟體驅魔》除錯和優化遺留程式碼的藝術2014-08-18除錯優化
- Linguist for Mac(語言翻譯軟體)2022-05-28NGUIMac
- 高效翻譯軟體:Easy Translator for mac 中文版2024-01-16Mac
- 翻譯的初體驗2014-05-28
- 如何破解掉vt4.0的軟體狗(一種醫藥用影像分析軟體) 不錯的文章
(7千字)2015-11-15