Make your own free website on Tripod.com

中文化提高課─UPXPR 的脫殼方法

作者: 漢化新世紀成員飛鷹

在中文化軟體的過程中,我想大家一定都碰到過這樣的問題,要中文化的軟體被加了殼,沒法找到需要中文化的資源,障礙了我們的中文化工作。但我想做為一名中文化人手頭一定會有很多對付特定殼 (比如Aspack、PE Compact等) 類型的脫殼工具,只要檢測軟體被加了何種殼,就利用相應的脫殼工具要脫光它身上的殼,下面就可以開始我們的中文化工作了。不過,這只是對於一般情況有用,如果大家遇到諸如AsProtect、tElock、UPXPR之類的殼,那麼一般利用上面提到的這些工具來脫殼的話,大多數情況下都是以失敗告終,不能使用現成的脫殼工具的處理,只能手動調試修改了。

今天,我不與大家討論AsProtect、tElock等的脫殼方法,因為這需要有一定的基礎,不是靠一兩篇文章就能說的清楚;所以,我今天想與大家共同討論一下UPXPR的脫殼方法,既然這篇文章是中文化提高篇,其中肯定有一些比較難理解的地方,還請大家細細琢磨。

想必大家在中文化過程中一定遇到過用 UPX 加殼的軟體 (可能會遇到很多,畢竟 UPX 很有名) ,通常 UPX 的脫殼方法是要查看加殼 UPX 的版本號 (查看方法: 用16進制編輯器開啟加殼軟體後往右邊看並向下翻即可看到版本號,如: 1.20 如圖一所示) ,瞭解清楚版本號後,再用相應版本的 UPX 軟體 (或者可以用比當前版本號高的 UPX 軟體) 進行脫殼,命令為: UPX -D 檔案名。

(圖一)

那麼 UPXPR 又是什麼殼呢 ? UPXPR是修改了一些被UPX認為是自己加殼的標誌 (包括各種標誌) ,這時用 UPX -D 命令就無法脫殼,但只要我們手動修復好這些被改動過的加殼標誌後即可重新用 UPX -D 命令來脫殼了。下面我就來講一下用這種保護方式加殼的軟體的脫殼方法。

1、手工處理方法: 加殼軟體 Accent Office Password Recovery 2.00 Beta3。首先,我們知道它是被 UPX 1.20+UPXPR 保護,用UPX 1.20脫殼出現「CantUnpackException: cannot unpack UPX ;-)」錯誤。怎麼處理呢 ? 我們用 LodePE 開啟該軟體,操作步驟: 單擊「PE Editor」按鈕-->選擇檔案後開啟-->單擊「Sections」按鈕-->進入「Section Table」視窗,如圖二所示。一般被 UPXPR 處理過,在該圖中第一、二個塊的塊名都是一些其它字串,如: .code、.data,都不是UPX0和UPX1,所以要處理 UPXPR 的保護方式,第一步就是把這兩塊的名稱改為: 第一個塊名改為: UPX0,第二個塊名改為UPX1,如圖二中紅色框所示;修改方法是: 先選中塊-->單擊滑鼠右鍵選擇「edit section header」項目-->在「Name:」框中輸入新的塊名 (如UPX0) 後,單擊「OK」按鈕保存後返回;但該軟體沒有對這兩個塊名進行過處理,還算比較友好。改好這裡以後,再用 WinHex 開啟該軟體,並尋找16進制 0C09,找到後把它前面的4個字節改為UPX! (如圖一中紅色框所示) 。為什麼要這樣尋找修改呢 ? 因為,從 UPX 0.9x-1.20 在標誌UPX!後面的4個字節均為0C 09 ?? ?? (如圖一中藍色框所示) ,所以可以就此做為判斷的標誌,找到後再把它前面的4個字節改為UPX!,因為如果沒有UPX!和前面提到的兩個塊名 (UPX0和UPX1) 這三個標誌,UPX就無法解壓了。還有就是在 0C 09 ?? ?? 這4個字節之後還有24個字節 (如圖一中品紅色框所示) ,改掉其中的任何一個字節都會使UPX無法解壓,所以如果不知道這些正確的數值就會無法恢復了,但UPXPR的保護方式一般都沒有修改這24個字節的值,這就給了我們恢復的可能性。對於這個軟體有點特殊,我們找到 0C09 這個標誌是在偏移地址246E處,但一般UPX!這個標誌會出現在偏移地址3E0附近 (如圖一中綠色框所示) ,就此判斷尋找找的地方不對,最後我尋找UPX!,找到後發現它後面的4個字節是FF09050A,根據前面總結的經驗很容易知道只要把FF改為0C就可以用 UPX 1.20 來解壓了。

(圖二)

2、軟體處理方法: 加殼軟體 金山毒霸「求職信」專殺工具。首先,我們知道它是被 UPX 1.20+UPXPR 保護,用UPX 1.20脫殼出現「CantUnpackException: file is modified/hacked/protected; take care!!!」錯誤。怎麼處理呢 ? 該軟體更是特殊,用 WinHex 開啟軟體後發現 3E0 處沒有UPX!、0C09????與其後面的24個字節大部分都是00 (如圖三所示) ,顯然該軟體用 UPXPR 保護的很好,用上面我們講的第一處方法處理肯定行不通,下面我就教大家用 UPXFIX 這個軟體來處理這種特殊的UPXPR保護方式。操作步驟: 用 UPXFIX 開啟軟體-->「Decompress method」選項先選中2 (共有7種解壓方法,我們先選中第2種,如果不行再選擇其它種解壓方法) -->單擊「Fix」按鈕,UPXFIX會自動幫您修正三個地方,分別是UPX0、UPX1、UPX!與它後面的28個字節-->之後就可以 UPXFIX 自帶的 UPX 軟體來解壓了,如果解壓過程中出現「compressed data violation」錯誤,您可以再在「Decompress method」選項中選擇其它的解壓方法再試,這七種解壓方式的不同點如圖四中紅色框所示,如果選擇「Decompress method」為2,則紅色框中值分別為02、8E;為 3 是03、8F;為 4是04、90;為 5是05、91;為 6是06、92;為 7是07、93;發現沒有它們會隨著「Decompress method」的值增1而自動增1。對於該軟體當我選擇「Decompress method」為5時,用它自帶的 UPX 成功解壓。透過,我的大量的測試發現一般只要把「Decompress method」選項設為5,都可以成功對付UPXPR保護方式,包括上面的 Accent Office Password Recovery 2.00 Beta3 這個軟體也可以用這種方法來處理,當然也有特例,下面我會講到。對於 UPXFIX 這個軟體,它能處理除 UPX 1.20+UPXPR 之外的其它UPXPR保護方式,但前提條件是UPX!與其後28個字節必須是從偏移地址3E0處開始,UPXFIX 才能幫您自動修正,否則 UPXFIX 將會出現「It's not a UPX file.」錯誤,就算您手工偽造從3E0處開始的這32個字節也不會成功。

  (圖三)

(圖四)

3、特殊處理方法: 加殼軟體 莊家殺手 1.800。首先,我們用16進制修改器(WinHex)開啟軟體後無法尋找到加殼 UPX 的版本號,那麼我就用 UPX 1.20 來脫殼,脫殼時出現「CantUnpackException: file is modified/hacked/protected; take care!!!」錯誤;該軟體也無法用 UPXFIX 來進行自動修正,因為該軟體從偏移地址3E0處開始沒有 0C09 這個標誌。怎麼處理呢 ? 操作步驟與前面我講過的『手工處理方法』類似,先用 LodePE 修改頭兩個塊名為UPX0和UPX1 (原先是.code和.data) ,之後在WinHex中尋找16進制 0C09,找到後將它前面的4個字節改為UPX! (原先是...!) 偏移地址是 1F5,改完這三處後再用 UPX 1.20 進行解壓即可成功;為什麼不知道該軟體加殼的 UPX 的版本號會可以用 UPX 1.20來脫殼 ? 因為,現在 UPX 的最高版本 1.20,記得在這篇文章開始時我講過可以用比當前版本號高的 UPX 軟體來進行脫殼,所以,將該軟體修正好後用 UPX 1.20 來脫殼完全可以成功,這也證明了前面我所提出的可以用比當前版本號高的 UPX 軟體來進行脫殼的經驗是完全正確可行的;但用 UPX 0.72 壓縮的軟體,即使不加 UPXPR 保護,也不可以用 UPX 0.72 的 UPX -d 命令來脫殼,這種現象好像在一些低版本的 UPX 中存在 (我沒有仔細測試過) ,對於這些情況不在本文的討論範圍內,如果有興趣的朋友可以發Email到flithawk@sina.com與我一起研究。

在文章的最後,我衷心感謝 真.hp 大哥寫的幾篇關於UPXPR的脫殼方法,這幾篇文章給了我很多的啟發和經驗。同時,我也希望我們漢化新世紀能早日走上商業網站的正軌,成為真正的中國中文化軟體站。

這篇文章中涉及到的所有修改工具,您都可以到漢化新世紀網站上去下載。

飛鷹山莊中文化天地飛鷹    寫於2002年4月21日



回教學