程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 十招教你學會破解[教程]

十招教你學會破解[教程]

編輯:更多關於編程

十招教你學會破解[教程]。本站提示廣大學習愛好者:(十招教你學會破解[教程])文章只能為提供參考,不一定能成為您想要的結果。以下是十招教你學會破解[教程]正文


上面談到了一些在學習解密進程中常常遇到的問題,自己依據自己的經歷復雜給大家談一談。這些問題關於初學者來說經常是很需求搞明白的,依據我自己的學習閱歷,假如你直接照著很多破解教程去學習的話,多半都會把自己搞得滿頭的霧水,由於有很多的概念要麼自己不是很清楚,要麼基本就不知道是怎樣一回事,所以希望經過上面的討論給大家一定的協助: 

1. 斷點:所謂斷點就是順序被中綴的中央,這個詞關於解密者來說是再熟習不過了。那麼什麼又是中綴呢?中綴就是由於有特殊事情(中綴事情)發作,計算機暫停以後的義務(即順序),轉而去執行另外的義務(中綴服務順序),然後再前往原先的義務持續執行。打個比如:你正在下班,忽然有同窗打電話通知你他從外地坐火車過去,要你去火車站接他。然後你就向老板暫時請假,趕往火車站去接同窗,接著將他安排好,隨後你又前往公司持續下班,這就是一個中綴進程。我們解密的進程就是等到順序去獲取我們輸出的注冊碼並預備和正確的注冊碼相比擬的時分將它中綴上去,然後我們經過剖析順序,找到正確的注冊碼。所以我們需求為被解密的順序設置斷點,在適當的時分切入順序外部,追蹤到順序的注冊碼,從而到達crack的目的。 

2. 領空:這是個十分重要的概念,但是也初學者是經常不明白的中央。我們在各種各樣的破解文章裡都能看到領空這個詞,假如你搞不清楚究竟順序的領空在哪裡,那麼你就不能夠進入破解的大門。或許你也曾破解過某些軟件,但那只是瞎貓碰到死老鼠而已(以前我就是這樣的^_^,如今說起來都不好意思喔!)。所謂順序的領空,說白了就是順序自己的中央,也就是我們要破解的順序自己順序碼所處的地位。也許你馬上會問:我是在順序運轉的時分設置的斷點,為什麼中綴後不是在順序自己的空間呢?由於每個順序的編寫都沒有固定的形式,所以我們要在想要切入順序的時分中綴順序,就必需不依賴詳細的順序設置斷點,也就是我們設置的斷點應該是每個順序都會用到的東西。在DOS時代,根本上一切的順序都是任務在中綴順序之上的,即簡直一切的DOS順序都會去調用各種中綴來完成義務。但是到了WINDOWS時代,順序沒有權利直接調用中綴,WINDOWS零碎提供了一個零碎功用調用平台(API),就向DOS順序以中綴順序為根底一樣,WINDOWS順序以API為根底來完成和零碎打交道,從而各種功用,所以WINDWOS下的軟件破解其斷點設置是以API函數為根底的,即當順序調用某個API函數時中綴其正常運轉,然後停止解密。例如在SOFTICE中設置上面的斷點:bpx GetDlgItemText(獲取對話框文本),當我們要破解的順序要讀取輸出的數據而調用GetDlgItemText時,立刻被SOFTICE阻攔到,從而被破解的順序停留在GetDlgItemText的順序區,而GetDlgItemText是處於WINDWOS自己管理的零碎區域,假如我們私自改掉這局部的順序代碼,那就大禍臨頭了^_^!所以我們要從零碎區域前往到被破解順序自己的中央(即順序的領空),才干對順序停止破解,至於怎樣看順序的領空請看後面的SOFTICE圖解。試想一下:關於每個順序都會調用的順序段,我們能夠從那裡找到什麼有用的東西嗎?(怎樣樣去加密是順序自己決議的,而不是調用零碎功用完成的!) 

3. API:即Application Programming Interface的簡寫,中文叫使用順序編程接口,是一個零碎定義函數的大集合,它提供了訪問操作零碎特征的辦法。 API包括了幾百個使用順序調用的函數,這些函數執行一切必需的與操作零碎相關的操作,如內存分配、向屏幕輸入和創立窗口等,用戶的順序經過調用API接口同WINDOWS打交道,無論什麼樣的使用順序,其底層最終都是經過調用各種API函數來完成各種功用的。通常API有兩中根本方式:Win16和Win32。 Win16是原來的、API的16位版本,用於Windows 3.1;Win32是如今的、API的32位版本,用於Windows 95/98/NT/ME/2000。Win32包括了Win16,是Win16的超集,大少數函數的名字、用法都是相反的。16位的API函數和32位的API函數的區別在於最後的一個字母,例如我們設置這樣的斷點:bpx GetDlgItemText、bpx GetDlgItemTextA和bpx GetDlgItemTextW,其中 GetDlgItemText是16位API函數,GetDlgItemTextA和GetDlgItemTextW是32位API函數,而GetDlgItemTextA表示函數運用單字節,GetDlgItemTextW表示函數運用雙字節。如今我們破解中常用到的是Win32單字節API函數,就是和GetDlgItemTextA相似的函數,其它的兩種(Win16 API和Win32雙字節API函數)則比擬少見。 Win32 API函數包括在靜態鏈接庫(Dynamic Link Libraries,簡稱DLLs)中,即包括在kernel32.dll、user32.dll、gdi32.dll和comctl32.dll中,這就是為什麼我們要在softice中用exp=C:\windows\system\kernel32.dll等命令即將這些靜態鏈接庫導入softice中的緣由。由於不這樣做的話,我們就無法阻攔到零碎Win32 API函數調用了。 

4. 關於順序中注冊碼的存在方式:破解進程中我們都會去找順序中將輸出的注冊碼和正確的注冊碼相比擬的中央,然後經過對順序的跟蹤、剖析找到正確的注冊碼。但是正確的注冊碼通常在順序中以兩種形狀存在:顯式的和隱式的,關於顯式存在的注冊碼,我們可以直接在順序所處的內存中看到它,例如你可以直接在SOFTICE的數據窗口中看到相似"297500523"這樣存在的注冊碼(這裡是隨意寫的),關於注冊碼顯式存在的軟件破解起來比擬容易;但是有些軟件的順序中並不會直接將我們輸出的注冊碼和正確的注冊碼停止比擬,比方有能夠將注冊碼換算成整數、或是將注冊碼拆開,然後將每一位注冊碼分開在不同的中央逐一停止比擬,或許是將我們輸出的注冊碼停止某種變換,再用某個特殊的順序停止驗證等等。總之,使用順序會采取各種不同的復雜運算方式來逃避直接的注冊碼比擬,關於這類順序,我們通常要下功夫去細心跟蹤、剖析每個順序功用,找到加密算法,然後才干破解它,當然這需求一定的8086匯編編程功底和很大的耐煩與精神。 

5. 關於軟件的破解方式:自己將破解方式分為兩大類,即完全破解和暴力破解。所謂完全破解次要是針對那些需求輸出注冊碼或密碼等軟件來說的,假如我們能經過對順序的跟蹤找到正確的注冊碼,經過軟件自身的注冊功用正常注冊了軟件,這樣的破解稱之為完全破解;但假如有些軟件自身沒有提供注冊功用,只是提供試用(DEMO),或是注冊不能經過軟件自身停止(例如需求獲取另外一個公用的注冊順序,經過INTERNET的注冊等等),或許是軟件自身的加密技術比擬復雜,軟件破解者的才能、精神、時間無限,不能直接失掉正確的注冊碼,此時我們需求去修正軟件自身的順序碼
  6. 關於破解教程中順序代碼地址問題:破解教程中都會放上一局部順序代碼以協助解說順序的剖析辦法,例如上面的一段順序代碼: 
...... 
0167:00408033 PUSH 00 
0167:00408035 PUSH EBX 
0167:00408036 CALL [USER32!EndDialog] 
0167:0040803C JMP 0040812C 
...... 
在這裡順序中的代碼地址如0167:00408033,其代碼段的值(即0167)有能夠依據不同的電腦會有區別,不一定如出一轍,但偏移值應該是固定的(即00408033不變),所以假如看到破解文章裡的順序代碼的地址值和自己的電腦裡不一樣,不要以為搞錯中央了,只需你的順序代碼正確就不會有問題。 


7. 關於如何設置斷點的問題:正確恰當的設置好斷點關於疾速無效的解密十分重要,好的斷點設置可以使我們迅速找到關鍵的順序段,而不恰當的斷點則會對解密形成不用要的精神耗費,甚至基本就不能阻攔到順序的運轉。但是詳細什麼時分用什麼斷點比擬適宜很難說,這需求自己用經歷去累積,總的說來bpx hmemcpy這個萬能斷點對大少數注冊碼方式的軟件都有用,初學者無妨多試試這個斷點(通常我也是用這個斷點設置,懶嘛^_^,哈哈。。。)。關於那些需求暴力破解的非注冊碼方式的軟件,通常我們應該阻攔對話框(如bpx DialogBox)和音訊框(如bpx MessageBox(A))等。不管關於哪一類軟件,當我們設置的斷點均沒無效果時,可是試一下bpx lockmytask,這個斷點的作用是阻攔任何一個按鍵的舉措,詳細常用的一些斷點設置請參考"破解常用斷點設置"一文。另外,在注冊碼的破解中通常需求輸出用戶名和注冊碼,普通說來用戶名和密碼都可以隨意輸出,但是依據我自己的經歷,很多軟件關於注冊碼都會逐位的停止處置,假設輸出"78787878"這串數字,那麼在跟蹤順序的時分我們就無法知道我們事先所看到的"78"倒底是哪一個"78",所以我比擬喜歡用"12345678"這樣的注冊碼輸出方式,這樣的話就就能知道順序是在對注冊碼的哪一位停止運算,異樣的關於那些需求輸出較長序列號的軟件,輸出相似"12345-67890-ABCDEF"這樣的序列號較好。 不過有一點大家需求特別的留意:下面講的注冊碼輸出方式"12345678"是針對阻攔WIN32 API函數來說的,假設有些時分直接阻攔WIN32 API函數難以找到順序的打破口,而要借助於"S"指令在內存中尋覓我們輸出的用戶名或注冊碼時,就最好不要采用"12345678"作為注冊碼,由於內存中很能夠有許多的"12345678"字符串,這樣我們沒有方法知道倒底我們要破解的順序運用的是哪一個"12345678",所以我們應該選擇一個不易和內存數據相反的注冊碼,比方:74747474(自己喜歡用,意思嘛:去死去死。。。哈哈哈^_^),對應的搜索指令為: S 30:0 L FFFFFFFF '74747474' 。當然,以上只是我團體的習氣而已,詳細用什麼樣的輸出方式可以依據自己的喜好、習氣來定,不用拘泥於某一固定的形式。 

8. 關於如何跟蹤順序的問題:初學者在開端學習解密的時分往往不知道怎樣樣去跟蹤順序,怎樣樣找到注冊碼比擬的中央,當面對長長的一堆順序代碼時顯得手足無措。通常軟件的順序外部都會應用一個子順序(即 CALL ********)去驗證我們輸出的注冊碼正確與否,關於注冊碼顯式存在的順序,普通都會將所輸出的注冊碼和正確的注冊碼放進存放器,然後調用驗證子順序停止判別,將後果前往,使用順序依據子順序前往的後果決議能否注冊成功,這樣的順序常常具有如下的方式: 
****:******** MOV EAX,[********]  (或 PUSH EAX等方式) 
****:******** MOV EDX,[********]  (或 PUSH EDX等方式) 
****:******** CALL ******** 
****:******** TEST EAX,EAX     (或 TEST AL,AL,或是沒有這一句等方式) 
****:******** JNZ ********     (或 JZ ********等方式) 
其中EAX和EDX指向的內存區域就是我們輸出的注冊碼和正確的注冊碼,這裡的存放器EAX和EDX是隨意寫的,也可以是ECX,EBX,EDI,ESI等等。關於注冊碼隱式存在的順序,雖然不能直接看到正確的注冊碼,但是通常也是先將所輸出的注冊碼地址放進某個存放器,然後調用子順序去驗證,破解時就需求進入子順序去剖析注冊算法。總之,看到子順序(call ********)前面跟著跳轉指令(JNZ ********或JZ ********)的中央我們就應該進步警覺,多用 D EAX(或EBX、ECX、EDX、EDI、ESI...等)去看看存放器指向的內存區域藏著什麼東西。有一點大家要提示大家:看見順序中運用上面這個函數是要留意,即GetDlgItenInt,這個API函數的作用是將輸出的文本轉化為整數,所以這類順序中是不會有顯示存在的注冊碼的,由於注冊碼被轉換為整數了,順序通常會用CMP ECX,EDX 這品種型的指令去驗證注冊碼的正確性,這裡ECX和EDX中存的就是所輸出注冊碼和正確注冊碼的整數方式,此時可以用 ? edx 和 ? ecx 看到其十進制方式,即我們輸出的方式。 

9. 關於軟件的反裝置問題:常常我們運用某些軟件時都會遇到一個問題,就是共享軟件過時之後即便刪掉原順序重新裝置,順序仍然不能用,還是一樣提示你試用期已過請注冊;或許是你曾經破解了某個軟件,但是還想持續研討它,但是由於軟件曾經注冊好,沒有了注冊選項,這時你即便徹底刪掉順序再重新裝置軟件,後果順序運轉後還是注冊過的。遇到這樣的狀況,其實緣由很復雜,由於順序將注冊或過時信息存在了零碎注冊表裡,所以復雜的重新裝置軟件是杯水車薪的。處理的方法就是自己刪掉注冊表中有關的信息,但是由於注冊表是WINDOWS零碎任務的根底,假如不小心就很能夠會損壞它而惹起零碎異常,所以假如你對注冊表不是很熟的話,應該在修正之前備份一下注冊表。不管是修正還是備份注冊表都可以運用WINDOWS下的注冊表管理工具"REGEDIT"來停止,一種方法是在"開端->運轉"下輸出"regedit"啟動它,也可以直接點擊"C:\WINDOWS\regedit.exe"來運轉。大局部的使用軟件都會將自己的信息存在如下的途徑中:HKEY_LOCAL_MACHINE\Software、HKEY_LOCAL_MACHINE\Software\Microsoft、HKEY_CURRENT_USER\Software、HKEY_CURRENT_USER\Software\Microsoft 或 HKEY_USERS\.DEFAULT\Software下,詳細是哪個中央根據不同的順序而有所不同,只需按下面的順序一定能找到有關使用順序的鍵,然後將和用戶名及注冊碼有關的鍵值刪掉就搞定了。 

10. 關於破解練習的問題:學習破解需求少量的練習,關於破解目的的選擇,初學者不宜以大型的、著名的軟件為目的,由於這些軟件通常加密較為復雜,破解不易,應該選擇一些比擬不知名的、小型的和早些時分的共享軟件來練習,由於加密絕對復雜的軟件有利於初學者疾速掌握破解思想和技藝。至於習題的來源則很普遍,可以從網上下載,也可以去市面上購置一些共享軟件光盤
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved