脫一些簡單的壓縮殼

2021-10-07 02:27:26 字數 1646 閱讀 3131

脫一些簡單的壓縮殼.

首先看看乙個殼的基本流程

1:儲存入口引數, 一般都有這一步了

2:獲取外殼所需的位址, 比如loadlibrary, getprocaddress

3:解密源程式的各個區塊

4:iat的初始化, 這個所有的殼都必須做的事情, 這一步也是鬥爭最激烈的戰場

5:重定位的處理, exe加密就沒有了, dll有這一步.

6:hook api函式, 外殼為了能夠不停的得到控制權, 所以一般都會將原來iat的位址替換成外殼的位址.

7:跳到源程式的oep..

根據上面的情況我們可以看出來, 我們只要的第七步dump程式出來就可以了.. 這時間時機很好, 各項全域性變數也

沒有初始化. 挺好. 但是現在到第7步的程式, 一般iat表都已經被殼給處理了, 所以在oep處, 我們還需要做一些工作.

找oep.

1: 根據跨段指令尋找oep. 這個主要是根據外殼程式每次處理的步驟乙個漏洞.

2: 程式退出法找oep, 這個對視窗程式比較有效果, 執行程式, 然後繫結上去, 中斷, 讓所有的跳轉都不往回跳轉, 然後程式就會走到退出的位置, 就是這樣. 退出的位置也在oep附近了.

3: esp定律尋找oep, 這個更加快.esp定律還用兩種方法, 一種是在堆疊頂部下硬體讀取斷點, 斷在popad的地方, 另外一種是對堆疊底部下硬體寫入斷點, 這種就剛好停在入口了.

dump:

dump這裡沒什麼好說的, 除了一些限制我們dump的手段外, 就是這個修復iat了, 主要是這個麻煩點. 不過手工修復幾次, 然後用importrec搞幾次, 應該就印象比較深刻了.

簡單的殼就是這樣了. 呵呵.

dll檔案的脫殼.

想都想得到, 對於dll檔案的脫殼, 除了相等的exe的難度外, 另外還需要處理乙個重定位表, 這個表處理套路其實也很簡單.

對於dll來說, 入口會在load和free的時候都呼叫, 所以如果我們遇到未知的殼, 又想簡單找入口, 用dll會比較簡單, 在free那次斷在入口.跑幾步就到oep了.

另外乙個dll檔案的話, 有乙個重定位表的處理, 這個的話在**段找乙個有重定位的專案, 在**段解壓出來還沒有重定位的時候, 在乙個重定位專案上面下個

記憶體寫入斷點, 這樣很容易就可以找到我們需要定位的地方.

exe檔案脫殼過程:

1:找oep, 因為我們這裡使用的殼非常的簡單, 主要是用於實驗性目的, 就用upx了. upx的oep的話, 是非常好找的. esp定律就行.

2:到oep, 使用lordpe dump出來就可以了.

3:importrec修復iat表 ok就這麼簡單.

dll檔案脫殼過程:

1:找oep, dll的oep比較好找, 一般在退出程式free的時候找一次就可以.

2:dll dump的時候和exe不大一樣, 首先在跑到oep之前, 我們應該跳過dll的重定位**, 不要給做重定位. dump乙份出來

3:dump了乙份沒有重定位的**, 然後重新執行exe跑到oep, 這次是使用importrec修復iat. 和exe一樣

4:dump出來以後, 這次我們要將dll的重定位資料抽取乙份出來, 這個要具體分析外殼的重定位格式和**.

4:重定位資訊修復出來以後, 使用看雪加密解密3的乙個工具, 將抽取出來的重定位表, 再次匯入我們dump出來的dll中.

對殼的一些理解

需要兩個檔案 待加殼的a.exe和加殼程式。加殼程式對a.exe檔案處理後,對a.exe做的手腳也就是清除或者加密原檔案的iat和各個段 和資料段等 並且會在a.exe檔案中新增加一些內容,這些內容可能獨立的在乙個新的段中,也可能在原來的段中,一般新的內容是可執行的,這些新的內容就構成了外殼程式 外...

有關殼問題的一些總結

重定位問題 資訊互動問題 如何寫殼 api函式的呼叫問題 重定位問題 資訊互動問題 除錯問題 關於目標程式的隨機基址 7.關於目標程式的匯入表 8.關於動態加解密 9.關於tls的處理 考慮到自己的專案是用c 寫的,可以直接把編好的 生成乙個dll檔案,然後將dll檔案的 直接拷貝過去即可,這裡要注...

一些簡單的演算法

氣泡排序,比如你有五個數 3 4 2 1 0 其原理就是用沒個數和 其他數進行比較 下面我們來書寫每一輪的數值 第一輪 3 4 2 得出佇列 2 4 3 1 0 2 1 0 得出佇列 1 4 3 2 0 得出佇列 0 4 3 2 1 第二輪 4 3 得出佇列 0 3 4 2 1 3 2 1 得出佇列...