大家知道,共享軟件在未注冊之前都有某些限制,有的限用多少日子,有的只能用部分功能,也有厚道點(diǎn)的,只是經(jīng)常彈出提示注冊的窗口。不管是哪種,只要軟件有一定的實(shí)用性,都會(huì)很快被破解者盯上。保護(hù)與破解之間,就像是一場永不落幕的好戲……
“破解”、“注冊機(jī)”等一直是互聯(lián)網(wǎng)上的熱門搜索關(guān)鍵詞(圖1),對(duì)于共享軟件作者來說,這是揮之不去的陰影。那么,共享軟件是怎么“死”于破解之手的呢?
今天我們從技術(shù)層面來對(duì)破解進(jìn)行簡單地梳理,以此來滿足讀者對(duì)軟件破解的好奇心。首先聲明本文只限于技術(shù)研討,故不會(huì)在文章提供任何破解的具體信息。
成敗注冊碼
在共享軟件中,最常見的保護(hù)方式是注冊碼的形式(圖2)。其實(shí),注冊碼就是一組英文和數(shù)字字符串,通常是16位或20位。它是利用用戶的注冊時(shí)填寫的信息(如用戶名等),通過一定的算法演算生成的。
破解者是怎樣來對(duì)付注冊碼和注冊窗口的呢?
第一種是生成軟件破解版,即修改源程序,屏遮掉了注冊功能,并將全部功能開放出來。
第二種是破解補(bǔ)丁,即我們安裝了原始軟件后,再運(yùn)行破解補(bǔ)丁,就不需要注冊了。
第三種就是注冊機(jī)計(jì)算出注冊碼。注冊機(jī)分為兩種——真正的注冊機(jī)和內(nèi)存注冊機(jī)。前者如圖1所示,直接算號(hào)。而后者則是用了個(gè)很取巧的辦法“騙”軟件自己說出一個(gè)正確的注冊碼,后文有對(duì)類似方法的介紹。
突破時(shí)間限制
前言中提到共享軟件都有某些限制,所以就有這樣一種思路,那么有沒有辦法把軟件中的限制延長呢?比如把限用7天改成一年,把限用30次改成300次。
曾經(jīng)有一段時(shí)間還真出過不少這類的軟件,比如這個(gè)古董級(jí)別的Sunny FreeWizard(圖3)。它可以對(duì)使用次數(shù)限制、使用天數(shù)限制、使用日期限制、啟動(dòng)時(shí)提醒注冊限制等多種時(shí)間限制進(jìn)行破解。它的操作非常的簡單,采用Wizard向?qū)Ы缑妫笇?dǎo)用戶一步步完成時(shí)間破解工作。
間破解工作。不過,這類的“破解”非常容易被防住,現(xiàn)在幾乎不見此類的軟件了,而那些“老將”對(duì)現(xiàn)在大多數(shù)的共享軟件都無能為力。
它們是這樣死于破解的
軟件的破解方式一般包括暴力破解、查找軟件注冊碼、編寫注冊機(jī)這幾種。下面我們來看看一般的步驟。
1.查殼
在自然界中,植物用殼來保護(hù)種子,動(dòng)物用殼來保護(hù)身體,而在軟件里“殼”就是一段專門負(fù)責(zé)保護(hù)軟件不被非法修改或者反編譯的程序。
“殼”對(duì)原來的軟件程序壓縮加密,最后將殼程序和原來的程序放在一起,生成新的可執(zhí)行文件。當(dāng)這個(gè)新的程序被執(zhí)行時(shí),“殼”一般都是先于原程序運(yùn)行,拿到控制權(quán),執(zhí)行它們的保護(hù)任務(wù),然后它在內(nèi)存中恢復(fù)并運(yùn)行被保護(hù)的程序。
很多時(shí)候,破解首先遇到的就是“殼”,只有在清楚軟件是否有加殼,加的什么樣的殼后,才能進(jìn)行下一步的操作。能夠用于查殼的軟件有很多,比如PEiD、FileInfo、TYP、Language2000、PEiDentifier等(圖4)。
2.脫殼
要想對(duì)被保護(hù)的程序進(jìn)行修改,就必須先脫掉用于保護(hù)程序的殼。脫殼通常有兩種方法——程序脫殼和手工脫殼。程序脫殼通常只能針對(duì)某一種殼進(jìn)行脫殼,比如Aspackdie可以脫Aspack殼,UnPECompact用于脫P(yáng)ECompact殼等,也有少數(shù)程序可以脫多種殼(圖5)。
手工脫殼是個(gè)技術(shù)活兒,沒有一定的編程基礎(chǔ)根本無從下手。手工脫殼常用的工具包括OLLYDBG、ImportREC、PEditor等。
3.破解
脫殼之后,就要對(duì)程序進(jìn)行修改了。無論是暴力破解、查找軟件注冊碼、編寫注冊機(jī),關(guān)鍵都在這一步。暴力破解最常見也最簡單的破解方法。這一步中常見的破解軟件包括WinIce、W32Dasm、OllyDbg。下面我們就利用BadCopy這款工具來看看如何查找軟件的注冊碼。
ADSL竊密者變種C/D Trojan.PSW.ADSL.c/d依賴系統(tǒng)Win9X/NT/2000/XP這兩個(gè)病毒專門針對(duì)北京ADSL用戶編寫,分別冒充北京網(wǎng)通和北京電信的ADS L密碼自助服務(wù)網(wǎng)頁。病毒在當(dāng)用戶上網(wǎng)的時(shí)候自動(dòng)彈出假頁面,誘騙用戶填寫自己的密碼。將來可能出現(xiàn)針對(duì)別的地區(qū)ADSL用戶的變種病毒。IRC波特釋放器變種BC Dropper.IrcBot.bc依賴系統(tǒng)Win9X/NT/2000/XP病毒會(huì)在系統(tǒng)目錄下生成svchost.exe及連接IRC服務(wù)器所需文件,同時(shí)修改注冊表實(shí)現(xiàn)隨系統(tǒng)啟動(dòng),它會(huì)打開用戶計(jì)算機(jī)的TCP 6667端口,連接黑客指定的IRC服務(wù)器接受指令。黑客通過它將用戶計(jì)算機(jī)變成“僵尸”,攻擊其他計(jì)算機(jī)。3.破解脫殼之后,就要對(duì)程序進(jìn)運(yùn)行OllyDbg,點(diǎn)擊工具欄中的“打開”按鈕選擇BadCopy的主程序,接著點(diǎn)擊工具欄上的“運(yùn)行”按鈕。這時(shí)OllyDbg將自動(dòng)啟動(dòng)BadCopy,接著點(diǎn)擊“關(guān)于”標(biāo)簽中的“注冊”按鈕,在注冊名稱和注冊密碼(密碼為:654321)選項(xiàng)中任意輸入一串字符(如圖6),點(diǎn)擊確定按鈕彈出一個(gè)錯(cuò)誤窗口。
這時(shí)不要關(guān)閉這個(gè)窗口,返回到OllyDbg主界面后,點(diǎn)擊工具欄中的“暫停”按鈕。拖動(dòng)主界面右下角窗口的滾動(dòng)條,你會(huì)看到剛剛輸入的錯(cuò)誤注冊碼,在它周圍就是正確的注冊碼(圖7)。
4.測試
文件修改完成后,是否能夠使用,要進(jìn)行多次測試。破解者首先會(huì)在當(dāng)前主流的系統(tǒng)中進(jìn)行測試,從而確定該破解文件的穩(wěn)定性,目前主要是Windows XP、Windows 2003等。
5.發(fā)布
破解文件測試完成后,接著將破解后的軟件重新打包,并且重新制作安裝程序。破解者會(huì)將破解文件發(fā)布到某些破解網(wǎng)站或論壇中。
小結(jié)
通過對(duì)軟件程序的破解,用戶可以了解到更多關(guān)于程序的知識(shí)和內(nèi)容,從而對(duì)程序的運(yùn)行規(guī)則更加熟悉。但是對(duì)軟件程序的破解往往會(huì)引發(fā)各種關(guān)于版權(quán)的糾紛,所以筆者最后再次聲明,本文僅限于技術(shù)探討,絕非支持對(duì)軟件的破解,同時(shí)請(qǐng)大家支持正版軟件,這也是對(duì)共享軟件作者辛苦勞動(dòng)的一種尊重。
本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。