用PEiD查殼

UPX v0.89.6 - v1.02 / v1.05 - v1.22 這個是入門的殼,只是一個簡單的壓縮殼
用Stud_PE查看PE文件頭信息

主要是看一下ImageBase的值 00400000,這是一個16進制數。在后面OD載入后,可以用這個值在內存映像中查看PE文件加載到內存后的情況。
還有EntryPoint的值: 0000E8C0 程序入口
OD載入看內存映像

用OD載入,ALT+M打開這個窗口,就可以看到upx.exe程序加載到內存后的映像,主要有四塊,但重要的是
區段UPX0和
區段UPX1。因為
區段UPX0就是原程序壓縮后的代碼存放區,而
區段UPX1就是UPX殼的執行代碼。
OD中單步跟蹤,找OEP
F8鍵單步跟蹤法,學習了前輩
總結
的兩點:
①程序都向下執行的,所以遇到向上的jump,鼠標配合F4鍵,跳過向上的jump;

遇到向下的jmp直接F8繼續執行。

運行到0040E8E9可以看到這是一個向上跳轉,而且通過下邊的提示窗口得知這個跳轉是已實現的。這時,就需要用鼠標點一下0040E8EB這一行, 也就是跳轉的下一行。

再按一下F4鍵,就可以通過上面向上跳的jump了

※注意:

運行到這里,會遇到一個特殊情況,就是向上jump后面還是一個向上jump,我們可以用鼠標選中0040E974行的jump,再按F4,運行到0040E974行

oh,no~~ 還是向上跳的, 那就老方法,鼠標選中下一行,再按F4?
不行,
0040E974行的下一行, 是一個nop指令,而OD是不能在nop上下斷點的, 所以要注意。
因此我們可以順勢再向下一行,鼠標選中0040E97C行, 再按F4通過:

②當發生區段間的跳轉, 證明程序即將運行到OEP。

運行到上圖的位置時, 因為已經到了殼代碼區的最尾部了,因為從這個位置到區段的結尾,內存都是00,為空。
在0040EA06行上, 也是一個向上跳轉, 但這些還用老方法的時候,就會發現,程序根本就不會暫停在0040EA08行,而是程序直接就運行了。這是因為這個jump向上執行的過程,執行了一個直接跳轉到0040EA0E行的指令, 這個可以跟蹤一下。所以這里可以鼠標直接選中0040EA0E行,再F4。

執行到這里, 后面是沒代碼, 而且這個jump很奇怪,沒有紅線標明會跳轉到哪里了?
那是因為這是個長跳,就是長距離的跳轉。就很可能是區段間的跳轉哦!我可是有證據的:
先把內存映像拿下來:

這行指令是在 0040EA0F行上, 很明顯是屬於UPX1區段的。
但指令: jmp UPX.004010CC, 明顯是屬於UPX0區段的哦,是不是從UPX1區段跳轉到UPX0區段了!
前輩總結過,區段間跳轉,很可能就是進入到OEP的時候,所以我們再F8跟蹤下去:

到這里, 就是脫殼后的OEP了。至於我為什么會知道呢?前輩的經驗!
找到OEP后,OllyDump把脫殼后程序保存
程序暫停在004010CC行,就可以鼠標在匯編窗右鍵:

這是一個OllyDump插件,怎么加插件可以百度一下~~~~

在dump的時候,要注意一下入口點地址,一般OD跟蹤的都是可以通過EIP作為OEP。
另外就是下邊的重建輸入表, 對於UPX加殼的, 可以直接使用這里面的, 如果不使用會怎么樣,等一下再說。
基本上沒什么問題了, 就點擊一下【脫殼】按鈕進行保存,再運行一下保存后的可以執行文件,測試一下!沒問題就OK了。
最后是再用PEiD查一下脫殼后的文件是否脫干凈了:

用工具重建輸入表
在這里,就不使用OllyDump里的重建輸入表功能,一樣在不選中重建輸入表的情況下脫殼:

這樣脫殼出來的文件是不可執行的:

因為在加殼后,程序的輸入表都被破壞的,所以很多時候脫殼后都需要修復一下程序的輸入表,這里用到的工具叫: Import REC
Import REC的使用
①
跟蹤到OEP的OD,千萬不要關
②
運行Import REC,在【選取一個活動進程】下面選取正在脫殼的程序進程, 然后還需要在右邊【需要的IAT信息】中,在【OEP】項輸入OD跟蹤到的OEP, 再點擊【自動查找IAT】, 最后點一下【獲取輸入表】。

因為UPX殼並沒有對API進行鈎取,所以不用多做其他操作。但在其他一些殼中,殼會對API進行鈎取,這時就需要點一下【無效函數】按鈕,顯示出一些無效函數的列表, 再進行清除就好!
③
在完成上面的步驟后, 就可以點擊【轉儲到文件】按鈕,會彈出一個選擇文件的窗口,這時我們需要選中在OD用OllyDump脫殼出來的文件就行了,再點打開。

④去查看一下, 會多了一個文件,要
做測試
運行一下並再查一下殼


重建PE文件

到了上面的步驟,其實脫殼的工作都基本上算完成了,但回想一下,加殼后的程序,是有兩個比較重要的區段UPX0、UPX1,其實UPX1是存放殼代碼的,但脫殼后,殼代碼就沒用了,那干嘛還留着呢?
在重建PE文件時, 需要用到工具LordPE,先運行LordPE:

運行后,不要把文件拖進來,而是點【PE編輯器】按鈕:


打開了需要重建的文件后, 會顯示上面的窗口, 這里點右邊的區段,再如下操作:

選中需要刪除的區段,鼠標右鍵,在右鍵菜單中點擊【清除區段】,再關閉【區段表】窗口,回到【PE編輯器】窗口, 先點一下【保存】,再點【確認】哦!
此時窗口自動關閉,回到LoadPE, 這里需要點擊右側的【重建PE】按鈕:

選中剛剛操作的文件:

就自動重建完成的:

最后, 一定要運行一下做測試! OK~~~~
附件列表