破解靜态加密軟體
simeon
本文已投《黑客手冊》雜志
通過本文您可以學到:
(1)軟體注冊方面的知識
(2)使用UPX脫殼、使用PEID查殼
(3)使用C32Asm、WinDasm進行彙編和反彙編方面的知識
本文用到軟體:
(1)PEID
(2)UPX
(3)C32Asm
(4)WinDasm
一般來說,作者在将軟體編寫出來後,出于安全和利益的考慮,往往會對軟體進行加密,來防止盜版和保護合法者權益。軟體加密強度跟作者的程式設計水準有關,本文所說的軟體加密也就是平常所見的軟體注冊。
(一)軟體注冊方式
軟體注冊主要有以下幾種:
(1)注冊碼方式
現在絕大多數軟體都采用注冊碼方式進行保護,這種方式便于在網際網路上進行交易,沒有額外的成本,在軟體沒有注冊前,一般來說都會對軟體的功能、時間和次數等進行限制。常見的注冊碼方式有“機器碼+注冊碼”、“使用者名+注冊碼”、“組合方式+注冊碼”,其中最簡單的就是早期的固定字元串的軟體注冊,即設定一個固定的字元串,如果輸入的字元串跟指定的相符,則執行程式的正常功能,否則提示退出或者重新輸入驗證碼。
(2)加密狗方式
加密狗方式多見于商業軟體,而且一般都會有一個形同USB盤的一個硬體,由于一個加密狗成本在幾十元以上,是以個人軟體很少使用加密狗方式。
(3)CD光牒加密
CD光牒加密常見于遊戲CD光牒,防止原版CD光牒被非法複制。
(4)網絡驗證
網絡驗證是軟體在注冊時要線上連接配接到官方網站進行注冊,或者在注冊後會不定期地自動連接配接到官方網站進行正版校驗,如果不通過則視為盜版或者試用版本。
(5)NAG視窗
軟體在沒有注冊或者軟體的試用版會經常彈出一些提示視窗,要求注冊,這些視窗就被稱為NAG視窗,而且NAG視窗在軟體試用期過後,很可能會屏蔽軟體的正式視窗或者某些重要功能視窗,使得軟體不能被正常使用。
(二)破解執行個體
本例中的注冊碼是固定的字元串,自由輸入正确的字元串才會顯示“Welcome”,否則顯示“I am Sad!”,程式運作界面如圖1所示。
圖1 破解原檔案
1.查殼
對于破解軟體來說,第一步往往是檢查軟體是否進行了加殼處理,目前網絡上面有很多可以用來查殼的軟體,例如大名鼎鼎的PEiD等。直接運作PEiD v0.93版本,然後選擇需要查殼的檔案,選擇完成後,如果能夠識别,會自動顯示是采用什麼方式進行加殼的,即顯示為“UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo”(圖2)。即采用UPX軟體進行加殼的。如果程式沒有加殼,則會顯示為具體的程式設計語言。
圖2 查殼
2.脫殼
查出被破解軟體是采用什麼方式的加殼軟體後,然後選擇相應的脫殼軟體進行脫殼,我所采用的UPX脫殼軟體需要進行,安裝完成後會自動将脫殼的一些操作加入到檔案打開菜單中,需要脫殼時選中檔案,右鍵單擊,選擇“UPX ShellEx”-“UPX通用脫殼機”,軟體自動脫殼(圖3)。
圖3 脫殼
說明:有的軟體可能采用多種方式加殼,對于這種脫殼就需要一層一層的脫,一般脫殼成功後,會進行一些文字上的提示(圖4)。
圖4 脫殼成功
3.反彙編原檔案
本文采用W32Dasm,W32Dasm是一款綠色的、功能非常強大的反彙編工具,最高版本為8.93,目前已經不再更新了,一些愛好者根據需要對其進行了修改,出現了後續一些版本,本文使用的就是修改後的版本,稱為W32Dasm 10.0版本。W32Dasm反彙編出的源代碼主要用來分析程式的一些基本資訊、顯示出程式使用的各個寄存器段、區段、程式包含的對象以及應用的函數等資訊(圖5)。
圖 5 使用W32Dasm反彙編原檔案
使用W32Dasm反彙編原檔案後,主要用來查找一些字元串,這些字元串可能跟注冊有關,在本例中主要查找“I am Sad!”,在W32Dasm的菜單中選擇<b>“參考”</b>-<b>“串示資料參考”</b>,在彈出的<b>“</b><b>W32Dasm</b><b>串式參考内容清單”</b>(圖6)中拖動滾動條查找<b>“</b><b>I am Sad!</b><b>”</b>字元串。
圖6 查找字元串“I am Sad!”
<b>注意:</b>使用W32Dasm反彙編的應該式脫殼以後的原檔案。
<b>技巧:</b>在查找字元串時,由于字元串是按照字母順序進行排序的,是以可以以查找字元串首字母所在位置進行查找。
查找字元串的目的就是為了定位位址,找到“I am Sad!”字元串後,輕按兩下該字元串後,會自動跳轉到W32Dasm反彙編視窗,并以淺綠色加亮顯示一條資料,記下加亮顯示資料的位址資訊,在本例中為“004513E6”(圖7),在該位址上方,有一個跳轉(jne),在“Welcome”字元串上面有一個“jne”跳轉的位址,記下該位址“004513D2”。
圖7 找到位址004513D2
4.使用C32sam反彙編工具彙編原檔案
C32asm也是一款反彙編工具,C32asm可以直接對反彙編的檔案進行十六進制或者直接進行彙編代碼的修改。使用C32asm反彙編原檔案以後,滑鼠右鍵單擊,在菜單中選擇“跳到”,在Eip跳轉對話框中輸入跳轉位址“004513D2”(圖8),然後單擊“确定”,回到C32asm反彙編視窗。
圖8 跳轉到004513D2位址
回到C32asm視窗會高亮顯示,選中記錄“<b>:004513D2:: 75 12 JNZ SHORT 004513E6</b>”然後右鍵單擊,在菜單中選擇“對應Hex編輯”,然後再次右鍵單擊,在彈出菜單中選擇“對應彙編模式編輯”,再次選中記錄“<b>:004513D2:: 75 12 JNZ SHORT 004513E6</b>”右鍵單擊,在彈出菜單中選擇“彙編”(圖9,圖10),直接将“<b>JNZ SHORT 004507E6</b>”修改為“NOP”或者<b>“</b><b>JE SHORT 004507E6</b>”,然後儲存。
圖9 修改反彙編位址
圖10 修改跳轉位址
5.運作破解後的檔案
運作破解後的程式“CrackmeNo1_Unpack.exe”,随便輸入一個注冊碼,都會顯示“Welcome!”字元串。到此程式破解完成。
圖11 軟體破解成功
<a href="http://down.51cto.com/data/2348014" target="_blank">附件:http://down.51cto.com/data/2348014</a>
本文轉自 simeon2005 51CTO部落格,原文連結:http://blog.51cto.com/simeon/28372