逆向工程 打造免殺後門(續《逆向工程 打造隱蔽後門》)
文章作者:無敵最寂寞[-273℃@EST] 資訊來源:邪惡八進位 中國 以前在x上發表過一篇《逆向工程 打造隱蔽後門》的文章,講述了如何在一個可執行檔中嵌入後門代碼的方法。但是這種方法很有可能被殺毒軟體給查到,因此這次我們要打造免殺的後門。 先看看我們需要什麼“傢伙”: Olly debug 1.10b 漢化版 —— 逆向的主要工具 UltraEdit —— 經典的16進位編輯器 PEDITOR v1.7 —— PE檔案編輯工具 dcmd —— 一個簡單的邦定81連接埠的後門,會被瑞星查殺 一、原理簡介 其實方法有點和上一篇打造隱蔽後門中的方法類似:首先需要在可執行檔中找到一些“空”地,這裡添加我們的加/解密代碼,然後修改入口地址處的指令,使用一個jmp指令調轉到我們添加的代碼處執行,這樣就可以對前面的後門代碼進行加/解密。執行完我們的代碼後,再跳回到程式入口處的未被修改的第一條指令。一:
大家可以參考《逆向工程 打造隱蔽後門》。 二、打造實戰 原理簡單介紹完了,俗話說光說不練假把式,那咱們就操練起來。首先用olly debug開啟我們的後門程式dcmd,二。
好了,我們先把入口處的一小段資料備份出來(以防萬一嘛,至於複製多少你自己看著辦吧^_^),三。
接著我們需要看看我們是否具有對該程式碼片段的寫入權限,如何檢測呢?向後托動olly的視窗捲軸,找到四的地方(前篇文章中提到的“dead space”),
在004011f0地址處按空格鍵開啟彙編視窗,輸入下面的指令: mov dword ptr ds:[4011f0],90909090 這條指令運行後會往004011f0地址出寫入4位元組的90,如果寫入成功說明是可以寫入的,否則就是不可寫入的。那麼不可寫入怎麼辦呢?稍後我們再說。OK,按右鍵我們輸入的指令->“此處建立IP”,五。
然後按下F7鍵來運行這條指令,結果六。
呵呵,是可以寫入的。那麼我們接下來就就可以繼續打造了,下面我們要確定需要加密的代碼部分了。回到程式入口處,因為我們後面還要修改入口處的指令為一個跳轉指令,因此需要加/解密的開始部分應該往後選,找到0040101F $ 55 PUSH EBP,我們就從這裡開始加密吧。接著確定加/解密的結束部分,往後翻看代碼到七的部分。
看到下面的一行了: 結構 'IMAGE_IMPORT_DESCRIPTOR' 這個結構就是IAT了(Import Address Table)就是PE檔案格式中的匯入表了。我們加/解密是不能包括IAT的(詳細情況讀者朋友可以去翻越PE方面的資料),因此結束部分我們就選擇004010fe吧。到此為止,我們已經確定了需要加/解密的部分,接下來要確定我們的密碼編譯演算法了。這裡我們可以使用非常簡單的異或作為我們的演算法,因為異或有以下特性是不錯的: XOR SOURCE,KEY=DEST XOR DEST,KEY=SOURCE 也就是說我們對SOURCE異或兩次得到的結果還是SOURCE。演算法確定後,我們在olly視窗中的004011f0處開始我們的加/解密程式吧,如下: 004011F0 B8 1F104000 MOV EAX,dcmd.0040101F ;需要加/解密部分的起始地址 004011F5 8030 0F XOR BYTE PTR DS:[EAX],0F ;與0f進行異或,這個0f讀者朋友可以自由替換 004011F8 40 INC EAX ;遞增eax 004011F9 3D FE104000 CMP EAX,dcmd.004010FE ;看看是不是到了加/解密部分的結束位址 004011FE ^7E F5 JLE SHORT dcmd.004011F5 ;如果沒到繼續迴圈了 程式就這麼簡單,看上去很容易哦。。。這還沒完呢繼續回到olly上來,來到程式的入口地址處按空格鍵進行彙編,輸入:jmp 004011f0,八。
這個時候拿出我們先前備份的那段代碼進行比較,看看有哪些指令被覆蓋了,九。
只有 SUB ESP,190一條指令被覆蓋了,那麼我們就要在加/解密代碼的最後處把覆蓋的指令添上,而且還要添加一條跳轉指令,跳回入口地址的下一條地址,完整代碼十。
到這裡,我們先儲存一下吧。按右鍵任意代碼處選擇複製到可執行檔->“全部修正”,結果十一。
好像出錯了!這個錯誤的意思是我們的檔案不夠大無法儲存我們修改的代碼,那麼我們得手工為這個檔案增加點體積了。關掉olly,用ultraedit開啟該檔案,在檔案的最後單擊滑鼠右鍵選擇HEX插入與刪除,彈出十二的對話方塊,
在位元組數量的文字框中輸入256,確定後十三,然後儲存退出。接著用PEDITOR開啟這個檔案,單擊Section按鈕,彈出節表視窗裡面只有一個.h4x節,按右鍵這個節選擇edit section,十四。
在彈出的對話方塊中在New Values欄中的Raw size改成00002e4(即加上256的16進位數0x100),十五。點擊apply changes按鈕後退出。
到此,我們已經給這個程式增加了100h個位元組的長度了,下面我們再重複前面的步驟來修改這個檔案,修改完後我們在dump一次看看,這次就沒有錯誤提示了。OK!最後一項工作,我們需要先把這個檔案進行加密,然後再dump到一個可執行檔裡,這樣下次它在啟動並執行時候就會自動異或而還原回到原來的代碼從而順利執行。於是我們在olly中,找到我們添加的代碼的第一條指令,在此建立EIP,然後往後在“SUB ESP,190”指令處設定斷點,十六。
然後單擊ollydebug的運行按鈕,運行結束後十七。
看到了嗎?我們制定的代碼全部被異或了,OK!我們按右鍵任意代碼處選擇複製到可執行檔->“全部修正”,這個時候出現了一個新的調試視窗,關閉它,會提示你是否儲存,選擇是,儲存為“修改後的dcmd.exe”。下面我們分別用瑞星對dcmd.exe 和修改後的dcmd.exe殺毒,結果十八。
哈哈,是不是成功躲過了殺毒軟體的追殺?我們運行一下修改後的dcmd.exe看看還能運行不?十九。
到此,整個過程都介紹完了。向心讀者朋友應該可以打造自己的免殺後門了,如果碰到無法寫入怎麼辦呢?這個也很好說,有一下兩個辦法可供讀者參考: 1.使用VirtualProtect API函數。使用這種方法,需要讀者在添加的加解密代碼的前面使用此函數修改保護屬性,使之可寫,剩下的和上面介紹的一樣了。這個函數的具體用法可以參閱MSDN,很簡單的。我就不多說了。 2.使用PE編輯工具進行修改。這個方法應該比較適合一些新手朋友,還是用PEDITOR,我拿咱們這個修改後的dcmd.exe為例簡單介紹一下吧。首先開啟PEDITOR,開啟我們的檔案“修改後的dcmd.exe”,單擊section按鈕開啟節表對話方塊,右鍵你想修改的節表,選擇edit section彈出一個新的對話方塊,單擊“char. wizard”按鈕開啟特性對話方塊,二十。
看到我紅框框起的屬性了嗎?其中“writable”就是是否可寫的,在這裡已經是可寫了,那麼我們去掉它會怎麼樣呢?試試看,把“writable”前面的勾去掉,然後單擊“take it”按鈕,然後選擇“apply changes”,退出PEDITOR,運行程式,二十一。
啊哦,引發了防寫保護錯誤。讀者朋友看到這裡,你應該會修改了吧? 三、結束語又到了該說再見的時候了,青山不改,綠水常流,咱們後會有期了!歡迎大家來邪惡八進位交流! |