下面談到了一些在學(xué)習(xí)解密過程中經(jīng)常遇到的問題,自己依據(jù)本人的經(jīng)歷簡單給大家談一談。這些問題關(guān)于初學(xué)者來說常常是很需求搞明白的,依據(jù)我本人的學(xué)習(xí)閱歷,假如你直接照著很多破解教程去學(xué)習(xí)的話,多半都會把本人搞得滿頭的霧水,由于有很多的概念要么本人不是很分明,要么基本就不曉得是怎樣一回事,所以希望經(jīng)過下面的討論給大家一定的協(xié)助:? 如今盛行的5種反編譯exe軟件的辦法如下
辦法/步驟
1. 斷點(diǎn):
所謂斷點(diǎn)就是程序被中綴的中央,這個詞關(guān)于解密者來說是再熟習(xí)不過了。那么什么又是中綴呢?中綴就是由于有特殊事情(中綴事情)發(fā)作,計算機(jī)暫停當(dāng)前的任務(wù)(即程序),轉(zhuǎn)而去執(zhí)行另外的任務(wù)(中綴效勞程序),然后再返回原先的任務(wù)繼續(xù)執(zhí)行。打個比如:你正在上班,忽然有同窗打電話通知你他從外地坐火車過來,要你去火車站接他。然后你就向老板暫時請假,趕往火車站去接同窗,接著將他安排好,隨后你又返回公司繼續(xù)上班,這就是一個中綴過程。我們解密的過程就是等到程序去獲取我們輸入的注冊碼并準(zhǔn)備和正確的注冊碼相比擬的時分將它中綴下來,然后我們經(jīng)過剖析程序,找到正確的注冊碼。所以我們需求為被解密的程序設(shè)置斷點(diǎn),在恰當(dāng)?shù)臅r分切入程序內(nèi)部,追蹤到程序的注冊碼,從而到達(dá)crack的目的。?
如今盛行的5種反編譯exe軟件的辦法圖一
2. 領(lǐng)空:
這是個十分重要的概念,但是也初學(xué)者是常常不明白的中央。我們在各種各樣的破解文章里都能看到領(lǐng)空這個詞,假如你搞不分明到底程序的領(lǐng)空在哪里,那么你就不可能進(jìn)入破解的大門?;蛟S你也曾破解過某些軟件,但那只是瞎貓碰到死老鼠而已(以前我就是這樣的^_^,如今說起來都不好意義喔?。K^程序的領(lǐng)空,說白了就是程序本人的中央,也就是我們要破解的程序本人程序碼所處的位置?;蛟S你馬上會問:我是在程序運(yùn)轉(zhuǎn)的時分設(shè)置的斷點(diǎn),為什么中綴后不是在程序本人的空間呢?由于每個程序的編寫都沒有固定的形式,所以我們要在想要切入程序的時分中綴程序,就必需不依賴詳細(xì)的程序設(shè)置斷點(diǎn),也就是我們設(shè)置的斷點(diǎn)應(yīng)該是每個程序都會用到的東西。在DOS時期,根本上一切的程序都是工作在中綴程序之上的,即簡直一切的DOS程序都會去調(diào)用各種中綴來完成任務(wù)。但是到了WINDOWS時期,程序沒有權(quán)利直接調(diào)用中綴,WINDOWS系統(tǒng)提供了一個系統(tǒng)功用調(diào)用平臺(API),就向DOS程序以中綴程序為根底一樣,WINDOWS程序以API為根底來完成和系統(tǒng)打交道,從而各種功用,所以WINDWOS下的軟件破解其斷點(diǎn)設(shè)置是以API函數(shù)為根底的,即當(dāng)程序調(diào)用某個API函數(shù)時中綴其正常運(yùn)轉(zhuǎn),然后停止解密。例如在SOFTICE中設(shè)置下面的斷點(diǎn):bpx GetDlgItemText(獲取對話框文本),當(dāng)我們要破解的程序要讀取輸入的數(shù)據(jù)而調(diào)用GetDlgItemText時,立刻被SOFTICE攔截到,從而被破解的程序停留在GetDlgItemText的程序區(qū),而GetDlgItemText是處于WINDWOS本人管理的系統(tǒng)區(qū)域,假如我們擅自改掉這局部的程序代碼,那就大禍臨頭了^_^!所以我們要從系統(tǒng)區(qū)域返回到被破解程序本人的中央(即程序的領(lǐng)空),才干對程序停止破解,至于怎樣看程序的領(lǐng)空請看前面的SOFTICE圖解。試想一下:關(guān)于每個程序都會調(diào)用的程序段,我們可能從那里找到什么有用的東西嗎?(怎樣樣去加密是程序本人決議的,而不是調(diào)用系統(tǒng)功用完成的?。?
如今盛行的5種反編譯exe軟件的辦法圖二
3. API:
即Application Programming Interface的簡寫,中文叫應(yīng)用程序編程接口,是一個系統(tǒng)定義函數(shù)的大匯合,它提供了訪問操作系統(tǒng)特征的辦法。 API包含了幾百個應(yīng)用程序調(diào)用的函數(shù),這些函數(shù)執(zhí)行一切必需的與操作系統(tǒng)相關(guān)的操作,如內(nèi)存分配、向屏幕輸出和創(chuàng)立窗口等,用戶的程序經(jīng)過調(diào)用API接口同WINDOWS打交道,無論什么樣的應(yīng)用程序,其底層最終都是經(jīng)過調(diào)用各種API函數(shù)來完成各種功用的。通常API有兩中根本方式:Win16和Win32。 Win16是原來的、API的16位版本,用于Windows 3.1;Win32是如今的、API的32位版本,用于Windows 95/98/NT/ME/2000。Win32包括了Win16,是Win16的超集,大多數(shù)函數(shù)的名字、用法都是相同的。16位的API函數(shù)和32位的API函數(shù)的區(qū)別在于最后的一個字母,例如我們設(shè)置這樣的斷點(diǎn):bpx GetDlgItemText、bpx GetDlgItemTextA和bpx GetDlgItemTextW,其中 GetDlgItemText是16位API函數(shù),GetDlgItemTextA和GetDlgItemTextW是32位API函數(shù),而GetDlgItemTextA表示函數(shù)運(yùn)用單字節(jié),GetDlgItemTextW表示函數(shù)運(yùn)用雙字節(jié)。如今我們破解中常用到的是Win32單字節(jié)API函數(shù),就是和GetDlgItemTextA相似的函數(shù),其它的兩種(Win16 API和Win32雙字節(jié)API函數(shù))則比擬少見。 Win32 API函數(shù)包含在動態(tài)鏈接庫(Dynamic Link Libraries,簡稱DLLs)中,即包含在kernel32.dll、user32.dll、gdi32.dll和comctl32.dll中,這就是為什么我們要在softice中用exp=C:windowssystemkernel32.dll等命令行將這些動態(tài)鏈接庫導(dǎo)入softice中的緣由。由于不這樣做的話,我們就無法攔截到系統(tǒng)Win32 API函數(shù)調(diào)用了。?
4. 關(guān)于程序中注冊碼的存在方式:
破解過程中我們都會去找程序中將輸入的注冊碼和正確的注冊碼相比擬的中央,然后經(jīng)過對程序的跟蹤、剖析找到正確的注冊碼。但是正確的注冊碼通常在程序中以兩種形態(tài)存在:顯式的和隱式的,關(guān)于顯式存在的注冊碼,我們能夠直接在程序所處的內(nèi)存中看到它,例如你能夠直接在SOFTICE的數(shù)據(jù)窗口中看到相似\"297500523\"這樣存在的注冊碼(這里是隨意寫的),關(guān)于注冊碼顯式存在的軟件破解起來比擬容易;但是有些軟件的程序中并不會直接將我們輸入的注冊碼和正確的注冊碼停止比擬,比方有可能將注冊碼換算成整數(shù)、或是將注冊碼拆開,然后將每一位注冊碼分開在不同的中央逐一停止比擬,或者是將我們輸入的注冊碼停止某種變換,再用某個特殊的程序停止考證等等。總之,應(yīng)用程序會采取各種不同的復(fù)雜運(yùn)算方式來逃避直接的注冊碼比擬,關(guān)于這類程序,我們通常要下功夫去認(rèn)真跟蹤、剖析每個程序功用,找到加密算法,然后才干破解它,當(dāng)然這需求一定的8086匯編編程功底和很大的耐煩與精神。?
如今盛行的5種反編譯exe軟件的辦法圖三
5. 關(guān)于軟件的破解方式:
自己將破解方式分為兩大類,即完整破解和暴力破解。所謂完整破解主要是針對那些需求輸入注冊碼或密碼等軟件來說的,假如我們能經(jīng)過對程序的跟蹤找到正確的注冊碼,經(jīng)過軟件自身的注冊功用正常注冊了軟件,這樣的破解稱之為完整破解;但假如有些軟件自身沒有提供注冊功用,只是提供試用(DEMO),或是注冊不能經(jīng)過軟件自身停止(例如需求獲取另外一個專用的注冊程序,經(jīng)過INTERNET的注冊等等),或者是軟件自身的加密技術(shù)比擬復(fù)雜,軟件破解者的才能、精神、時間有限,不能直接得到正確的注冊碼,此時我們需求去修正軟件自身的程序碼.
以上就是如今盛行的5種反編譯exe軟件的辦法,希望能協(xié)助到各位程序員!