|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2005-11-26, 08:33 PM | #1 |
榮譽會員
|
十招教你學會破解
下面談到了一些在學習解密程序中經常遇到的問題,本人根據自己的經驗簡單給大家談一談。
這些問題對於初學者來說常常是很需要搞明白的,根據我自己的學習經歷,如果你直接照著很多破解教學去學習的話,多半都會把自己搞得滿頭的霧水,因為有很多的概念要麼自己不是很清楚,要麼根本就不知道是怎麼一回事,所以希望通過下面的討論給大家一定的說明 : 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"這樣存在的註冊碼(這裡是隨意寫的),對於註冊碼顯式存在的軟體破解起來比較容易;但是有些軟體的程序中並不會直接將我們輸入的註冊碼和正確的註冊碼進行比較,比如有可能將註冊碼換算成整數、或是將註冊碼拆開,然後將每一位註冊碼分開在不同的地方逐一進行比較,或者是將我們輸入的註冊碼進行某種變換,再用某個特殊的程序進行驗證等等。 |
__________________ |
|
送花文章: 3,
|
向 psac 送花的會員:
|
bsa01824 (2011-08-27)
感謝您發表一篇好文章 |
2005-11-26, 08:36 PM | #2 (permalink) |
榮譽會員
|
總之,套用程式會採取各種不同的複雜運算方式來迴避直接的註冊碼比較,對於這類程序,我們通常要下功夫去仔細跟蹤、分析每個程序功能,找到加密算法,然後才能破解它,當然這需要一定的8086彙編編程功底和很大的耐心與精力。
5. 關於軟體的破解方式:本人將破解方式分為兩大類,即完全破解和暴力破解。 所謂完全破解主要是針對那些需要輸入註冊碼或密碼等軟體來說的,如果我們能通過對程序的跟蹤找到正確的註冊碼,通過軟體本身的註冊功能正常註冊了軟體,這樣的破解稱之為完全破解;但如果有些軟體本身沒有提供註冊功能,只是提供試用(DEMO),或是註冊不能通過軟體本身進行(例如需要獲取另外一個專用的註冊程序,通過INTERNET的註冊等等),或者是軟體本身的加密技術比較複雜,軟體破解者的能力、精力、時間有限,不能直接得到正確的註冊碼,此時我們需要去修改軟體本身的程序碼,即人為改淙砑?q腦誦蟹較穎脾哏r鈉平獬浦咺P憌a平狻? 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系統工作的基礎,如果不小心就很可能會損壞它而引起系統異常,所以如果你對註冊表不是很熟的話,應該在修改之前製作製作制作備份一下註冊表。 |
送花文章: 3,
|
2005-11-26, 08:37 PM | #3 (permalink) |
榮譽會員
|
不論是修改還是製作製作制作備份註冊表都可以使用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. 關於破解練習的問題: 學習破解需要大量的練習,對於破解目標的選項,初學者不宜以大型的、著名的軟體為目標,因為這些軟體通常加密較為複雜,破解不易,應該選項一些比較不出名的、小型的和早些時候的共享軟體來練習,因為加密相對簡單的軟體有利於初學者快速掌握破解思想和技能。 至於習題的來源則很廣泛,可以從網上下載,也可以去市面上購買一些共享軟體光碟。 ps: 破解實例訊息資源豪華版-通往脫殼高手必經之路 http://download.winzheng.com/softvie...View_23125.htm 本壓縮包主要包含了 手動脫殼入門十八篇,手動脫殼進階十三篇。涵蓋目前主流的所有加殼程序。內容由淺入深,並將其中的脫殼程序錄成動畫。別的不說,但是看看這個壓縮包的個頭您就可以感覺出來。讓您從菜鳥直接成為高手!強烈吐血推薦!! http://download.winzheng.com/SoftDown.asp?ID=22019 破解教學和文章 黑客小遊戲過關全攻略動畫演示 http://down.xxmy.net/ebook/hark/ ... %AD%D1%DD%CA%BE.rar 風飄雪學員破解教學(價值80元) ftp://down:down@vod.hzvb.com:520/200503240744.exe 用OllyDbg破密碼 http://www.hack58.com/hack58/pj/pjjcmm.rar 簡單脫掉ASPack的殼 http://www.hack58.com/hack58/pj/pj3.rar 用OD動態破解winproc http://www.hack58.com/hack58/pj/pj5.rar 破解一個註冊無提示的軟體 http://www.hack58.com/hack58/pj/pjwny.rar 新版aspr脫殼方法(完全版)www.3800cc.com http://www.darkup.com/n190c49.aspx 以下統一解壓密碼為www.3800cc.com 特徵碼定位修改動畫教學 http://down.3800cc.com/soft/4506.htm 破解奇跡SF外掛 http://down.3800cc.com/soft/4355.htm 破解步步高之印象篇 http://down.3800cc.com/soft/4334.htm 2個破解相關動畫 http://down.3800cc.com/soft/4195.htm 簡單破解軟體功能限制 http://down.3800cc.com/soft/4145.htm |
送花文章: 3,
|