脫殼——修復加密IAT


脫殼——修復加密IAT

對兩個練手程序進行脫殼修復加密IAT(其實是一個程序,只是用了幾種不同的加殼方式)

第一個程序

Aspack.exe

下載鏈接:https://download.csdn.net/download/weixin_43916597/18372920

分析程序信息

首先先查看這個程序的信息,使用PEiD查看該exe程序

 

 

這里可以看出:編譯器版本:vc6.0,殼的名稱:ASPack

調用OD調試程序

 

 

很清晰的看得到程序最開始的OEP是pushad

自然而然就想到了對esp打斷點然后找到popad,再找到jmp或者ret之類的指令來得到真正的OEP,然后dump出來所有的字段,再修復導入表和PE文件,這種類型的原理具體可以查看我的上一篇博客:

https://www.cnblogs.com/Sna1lGo/p/14727846.html

這里直接使用工具了

在od里使用OllyDump來Dump出來exe,然后用ImportREC修復導入表就可以脫殼使用了

 

 

得到OEP,然后把OEP輸入給OllyDump,得到初步的脫殼.exe

 

 

1修正入口的地址,2去掉重建輸入表(因為這個重建輸入表不好用)3 脫殼

再用Import REC重構就好了,最后就得到了一個完整的脫殼程序

 

 

這種方法上一個博客有仔細講解,感興趣的可以去看看:https://www.cnblogs.com/Sna1lGo/p/14727846.html

 

 

第二個程序

FateMouse.exe

下載鏈接:https://download.csdn.net/download/weixin_43916597/18372920

分析程序信息

 

 

這個殼名字取得花里胡巧的,但是沒關系嗷

調用OD調試程序

 

 

一開始又是一個很經典的Pushad,果斷對esp打上斷點(這種辦法也就前面用用玩了),然后運行程序跑到斷點處

 

 

但是這里有明顯的區別,這次這里的jmp是跳轉到了一個別的地方(因為這個程序我們前面已經剖析很多次了),但是沒關系先跳轉過去看看

 

 

跳轉過來是這樣的一個東西,再運行看看

先不用管前面的這些,因為這個程序我們之前是操作過的,知道OEP是多少,而且目的是修復加密的IAT,所以前面的可以先不用管

直接跳轉到0x00402680

 

 

這里是一些不清楚的指令,是因為od幫忙分析了,右鍵->分析->從模塊中刪除分析來恢復原來的模樣

 

 

這樣就很清晰明了

平時在采用FF15硬編碼的call函數后面會有api的名稱顯示,但是這里沒有,所以這里很有可能是對導入表加密了,才看call函數對應的地址的內容(注call的硬編碼有兩種,FF15的硬編碼表示是根據函數名稱)

 

 

在命令行中輸入指令查看,可以看到很明顯不是正常的調用API,這里表明要跳轉到對應的地址來執行,那么就再進入對應的地址來查看一下看看內容是什么,這里就查看0042B240對應的0051C275

 

 

這里可以看到,其實相當於是一個中轉,也就是先進入一個函數地址,然后函數的地址里面才是保存了真正的API地址

這樣的話就給我們將程序dump出來之后,再通過一些程序修復IAT表進行了問題,如果這里我們還是直接用ImportREC來修復的話ImportREC找不到函數地址,它只能識別真正的地址,不能識別中轉的地址,所以這里我們只需要 想辦法讓ImportREC能夠認識這個IAT就行了,這里采用對中轉地址打斷點,分析中轉函數的代碼邏輯來修復IAT

分析關鍵程序的代碼段邏輯

它這里的IAT表是從0042B1DC開始的,所以針對這里開始分析

 

 

給這里打一個內存寫入斷點,然后運行

 

 

這里是一個批處理指令,暫時不知道有什么用,繼續運行程序看看,再往后運行了3次后變換到了新的位置:、

 

 

這里就好像有點東西了,首先是旁邊的注釋有函數的名稱

 

 

其次這里的寄存器也是有內容的 ,可以很清楚的看到,這里的指令就是把0042B1DC對應的內容的值改為了一個正常的函數地址的值,相當於這里就是在修復導入函數表了

然后單步調試程序,並且關注0042B1DC這個值在哪里發生了改變

 

 

一直往下走的時候,發現經過了這條指令后0042B1DC所存儲的值發生了改變 004305EA這條指令,又改變成了一個莫名其妙不認識的值,所以這里我猜測是某段指令實現獲取導入表然后對導入表進行加密處理,這里我先將該使得導入表加密的指令使用nop填充,填充完之后再跳轉到一條向下的指令

 

 

跳轉到0043060C,為什么跳轉到這里,因為前面都是循環而且是往上的循環,很大概率就是對導入表的每個函數加密,然后到第二個指令的時候就可以很清晰得看到函數的地址了

 

 

就是一個很正常的地址了,但是這樣操作后直接運行運行不了了,所以這里我猜測,很有可能是加了什么驗證在這個殼代碼里面,那么可以加一個跳轉,直接跳轉到真正的OEP的地址里面,來讓驗證代碼跑不了不就好了

但是我也不知道在哪里加比較好,就只有先試一下,先來對第一天循環執行后的語句實施Jmp oep

 

 

看看能不能行

 

 

可以很明顯得看到運行成功了,算是運氣比較好把,這個時候再用之前的辦法來處理,dump出來,然后修復導入表就好了

總結

針對加密的導入表,可以采用對導入表加斷點,跑到具體的加密指令段,然后進行特殊的分析,有時候並不需要把一個程序完整的破解,只需要達到自己的目的就了

總結中的總結:找到核心代碼段分析

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM