前言:ASPack 2.12 脫殼筆記
首先先查殼,如下圖所示,可以看到的是ASPack 2.12
載入調試器中可以看到開頭為PUSHAD,首先直接用ESP定律來進行嘗試來到OEP的位置
通過ESP定律來到如下的位置,堆棧觀察起始一樣,那么這里大概率就是OEP了
接着將OEP為起始位置,將程序進行轉儲出來,嘗試運行可以發現報錯0xC0000005,看到C05的話,大概率就是IAT表或者重定位表的問題了
因為在XP這里就直接忽略重定位的問題了,這里來看下IAT表的情況,如下圖所示,可以確定是IAT表的問題,地址都直接被寫成了函數地址,那肯定就會導致程序加載,操作系統無法填充IAT表了
這里來進行修復,將殼程序(來到OEP的狀態下),用importREC來進行修復,首先先定位當前的IAT表中的函數地址,如下圖所示
這里會看到奇怪的部分,你會發現這個IAT表其中一部分不是填充的函數的地址
引發上面的就如下幾種情況,但是還是得具體問題具體分析
1、一種是殼程序故意進行破壞來干擾你,但這些其實就是沒用的數據,這里的話可以直接來進行修復先,將沒用的數據直接進行剔除即可
2、一種是殼程序原來部分的IAT表進行了重定向,這個時候就需要進行尋找修改重定向的位置讓其取消修改,這樣就能保證IAT的無損修復
3、還有一種的話就是本身就這樣子,這里的話可以直接來進行修復先,將沒用的數據直接進行剔除即可
第一個加載的DLL為user32.dll,所以這里可以確定第一個導入表就是user32.dll,起始地址為0040119C
結束地址為0x401218
那么其中IAT表的大小就是401218-40119C=7C,如下圖所示
這里先將其中間的數據當前干擾數據直接進行剔除,然后進行修復IAT表
接着就是進行修正轉儲
但是你運行該程序會發現還是有問題,如下圖所示,你會發現0x00804000這個地址就是不存在的
后面發現是importREC中OEP填錯了,應該是00004000才對,然后重新修復下,重新運行,現在可以了,如下圖所示