黑客教你學會軟件破解 中
軟件破解—關于程序中注冊碼的存在方式:
破解過程中我們都會去找程序中將輸入的注冊碼和正確的注冊碼相比較的地方,然后通過對程序的跟蹤、分析找到正確的注冊碼。但是正確的注冊碼通常在程序中以兩種形態存在:顯式的和隱式的,對于顯式存在的注冊碼,我們可以直接在程序所處的內存中看到它,例如你可以直接在SOFTICE的數據窗口中看到類似"2Array7500523"這樣存在的注冊碼(這里是隨意寫的),對于注冊碼顯式存在的軟件破解起來比較容易;但是有些軟件的程序中并不會直接將我們輸入的注冊碼和正確的注冊碼進行比較,比如有可能將注冊碼換算成整數、或是將注冊碼拆開,然后將每一位注冊碼分開在不同的地方逐一進行比較,或者是將我們輸入的注冊碼進行某種變換,再用某個特殊的程序進行驗證等等。
總之,應用程序會采取各種不同的復雜運算方式來回避直接的注冊碼比較,對于這類程序,我們通常要下功夫去仔細跟蹤、分析每個程序功能,找到加密算法,然后才能破解它,當然這需要一定的8086匯編編程功底和很大的耐心與精力。
軟件破解—關于軟件的破解方式:
本人將破解方式分為兩大類,即完全破解和暴力破解。所謂完全破解主要是針對那些需要輸入注冊碼或密碼等軟件來說的,如果我們能通過對程序的跟蹤找到正確的注冊碼,通過軟件本身的注冊功能正常注冊了軟件,這樣的破解稱之為完全破解;但如果有些軟件本身沒有提供注冊功能,只是提供試用(DEMO),或是注冊不能通過軟件本身進行(例如需要獲取另外一個專用的注冊程序,通過INTERNET的注冊等等),或者是軟件本身的加密技術比較復雜,軟件破解者的能力、精力、時間有限,不能直接得到正確的注冊碼,此時我們需要去修改軟件本身的程序碼,即人為改變軟件的運行方向,這樣的破解稱之為暴力破解。
關于破解教程中程序代碼地址問題:破解教程中都會放上一部分程序代碼以幫助講解程序的分析方法,例如下面的一段程序代碼:
- 0167:00408033 PUSH 00
- 0167:00408035 PUSH EBX
- 0167:00408036 CALL [USER32!EndDialog]
- 0167:0040803C JMP 0040812C
- ......
在這里程序中的代碼地址如0167:00408033,其代碼段的值(即0167)有可能根據不同的電腦會有區別,不一定一模一樣,但偏移值應該是固定的(即00408033不變),所以如果看到破解文章里的程序代碼的地址值和自己的電腦里不一樣,不要以為搞錯地方了,只要你的程序代碼正確就不會有問題。
軟件破解—關于如何設置斷點的問題:
正確恰當的設置好斷點對于快速有效的解密非常重要,好的斷點設置可以使我們迅速找到關鍵的程序段,而不恰當的斷點則會對解密造成不必要的精力消耗,甚至根本就不能攔截到程序的運行。但是具體什么時候用什么斷點比較合適很難說,這需要自己用經驗去累積,總的說來bpx hmemcpy這個萬能斷點對大多數注冊碼方式的軟件都有用,初學者不妨多試試這個斷點。
對于那些需要暴力破解的非注冊碼方式的軟件,通常我們應該攔截對話框(如bpx DialogBox)和消息框(如bpx MessageBox(A))等。不論對于哪一類軟件,當我們設置的斷點均沒有效果時,可是試一下bpx lockmytask,這個斷點的作用是攔截任何一個按鍵的動作,具體常用的一些斷點設置請參考"破解常用斷點設置"一文。
另外,在注冊碼的破解中通常需要輸入用戶名和注冊碼,一般說來用戶名和密碼都可以隨意輸入,但是根據我自己的經驗,很多軟件對于注冊碼都會逐位的進行處理,假如輸入"78787878"這串數字,那么在跟蹤程序的時候我們就無法知道我們當時所看到的"78"倒底是哪一個"78",所以我比較喜歡用"12345678"這樣的注冊碼輸入方式,這樣的話就就能知道程序是在對注冊碼的哪一位進行運算,同樣的對于那些需要輸入較長序列號的軟件,輸入類似"12345-678Array0-ABCDEF"這樣的序列號較好。
不過有一點大家需要特別的注意:上面講的注冊碼輸入方式"12345678"是針對攔截WIN32 API函數來說的,假如有些時候直接攔截WIN32 API函數難以找到程序的突破口,而要借助于"S"指令在內存中尋找我們輸入的用戶名或注冊碼時,就最好不要采用"12345678"作為注冊碼,因為內存中很可能有許多的"12345678"字符串,這樣我們沒有辦法知道倒底我們要破解的程序使用的是哪一個"12345678",所以我們應該選擇一個不易和內存數據相同的注冊碼,比如:74747474,對應的搜索指令為: S 30:0 L FFFFFFFF ’74747474’ 。當然,以上只是我個人的習慣而已,具體用什么樣的輸入形式可以根據本人的愛好、習慣來定,不必拘泥于某一固定的模式。
更多相關內容請看:
【編輯推薦】