henryw以前寄給我的一段翻譯文章,可做參考。 (2千字)

看雪資料發表於2001-04-12

我草草翻譯了一些內容,可能有些地方不太準確。
作者如果使用一些外掛SDK形式來幫助加殼的話,那麼將來可能真的需要手動拼接dump出來的可執行程式了。
(對了,hying兄,是否有關於拼接乾淨的exe程式的文章?)
不知道將來哪個Cracker會來完成如此困難的事情?

我試圖按以前的方法重建登錄檔,沒有成功,當然我用的imp_list出來的
import0.bin檔案。沒來得及試驗import1.bin檔案。
BTW: 以前用import1.bin可以執行的程式,啟動後在revirgin裡面看,還是和探測
加殼程式一樣報iat需要重建。

國內還沒見過討論如此脫殼方式的文章。
==========================================
一般來說,我們跟蹤目標,找到oep,dump它,然後重建iat,將它們貼回去,這就夠了。
不過這回有些變化,asprotect1.2和目標程式有了某種聯絡:

asprotect在492830呼叫了一些目的碼,就是利用icedump來追蹤入口時候,第一站停下來的地方,這裡的程式碼會設定區域性記憶體(local mem allocations),一些標誌,然後回到asprotect,最終asprotect跳到程式真正入口:4aec88。

如果你在此處dump,出來的程式無法執行,程式要探測剛才的標誌,然後就完蛋了。

我選擇了一個簡單的方法來解決此問題:
仍在4aec88處dump,不過之前不讓程式跳到492830的地方,這樣記憶體是乾淨的。利用revirgin重建iat,改好sections,不過把入口改為492830,把程式碼這樣改動:
seg000:00492944 pop ebp
seg000:00492945 jmp loc_4AEC88
seg000:00492945 start endp
看見jmp 4aec88了吧,之前有個ret。

這樣目標程式自己會在啟動時候做asprotect要做的事情,呼叫這個call,然後會
跳到正常的oep。

現在知道有兩個程式:
Advanced Link Catalog v1.00 (http://www.wizetech.com/alc/) and
Chameleon Clock 2.51 (http://www.softshape.com)

.......................
有必要在脫殼過程中跳過這些程式碼,因為這些東西會引起重建檔案以後所有的
runtime錯誤。但是這樣還會在4AEE12出現錯誤因為0送進了register而不是某個地
址。正如Tseph說的,這個程式碼會設定(asprotect?)的一些標誌,但是它也在程
序啟動時候查詢登錄檔來設定程式的一些引數,比如語言,timeformat, showdate,
reg等等。我可以讓這個程式執行(這句話的w/o沒看懂所以沒的翻譯),
shareware nag可以執行,程式也啟動了,但是此程式使用winamp類似的skin,照
我的方法patch程式,這個功能就不能用了........

提到的其他程式,Advanced Link Catalog,我發現脫殼中只要跳過呼叫程式的代
碼即可,這個call可以在dumping前用/Tracex來找到(注:我現在才知道icedump裡
有這等好命令^_^)。不管什麼原因吧,程式可以在正常oep地方啟動而不用處理丟
失的程式碼。

此兩個程式的註冊方式和Asprotect都有聯絡,至少Registration Key可能在加殼
的時候產生。我不知道註冊過程在脫過的檔案中是否還存在,但是256個byte的注
冊key仍是對未加補丁程式有效的保護。ALC至少可在Hz和我找到的地方做進一步的
限制。

========================================================

Cordialement

相關文章