c语言加花指令,花指令的应用
原標題:花指令的應用
對免殺的影響是非常大的,有效地利用花指令可以使免殺工作事半功倍,甚至單憑花指令就可以達到免殺的效果。
一、花指令在免殺領域的應用
1、花指令的應用技巧
在使用之前,首先我們應該明白什么時候比較適合使用,同時還要清楚什么時候不適合。總的來說,應該在無殼的木馬中應用,如果木馬已經被加殼,那么我們必須要先脫殼然后再添加。不管是加殼還是加都可以看作是一種加密行為,因此一般都是先加然后再加殼。
有一點需要說明的是,添加也會增加木馬被啟發式掃描器發現的概率,因為常見的可能本身就包含著特征碼,所以究竟什么時候加,加多少是件仁者見仁、智者見智的事情。
下面將帶大家進行一次典型的花指令添加操作。首先打開Ollydbg并載入我們要加花的程序,然后找到一段空白區域寫入以下花指令:
首先選中空白區域并按空格鍵,在調出的反匯編窗口中依次寫入上面的指令,然后寫入jmp指令跳回到原程序入口點并將程序Dump(轉儲)保存,最后修改OEP。
其實除了手工添加花指令外,還有一些工具也可以實現自動加花。
2、花指令的修改技巧
既然能制作出來,那么必然也可以修改它,但是的修改是否能達到我們預期的目的,是否能修改成功呢?這就需要有一定的匯編語言基礎了。
花指令首先要保證不破壞堆棧平衡,或者它只能在程序可以接受的范圍內進行有目的的破壞,這樣才能保證程序在加花后仍可正常運行。說到這里,或許會您對“堆棧”這個名詞發悚,不用擔心,帶著問題看下去就會明白了。
所謂的堆棧平衡,目前可以簡單地理解為不影響程序的運行結果,例如我們先執行一條push eax,也就是將eax的內容壓入棧,然后再執行一條pop eax,也就是將棧頂的內容取出并傳遞給eax,這樣一存一取,對于堆棧來說沒有任何影響,也就是說這時的堆棧是平衡的。
保證堆棧平衡是的制作原則,如果要在現成的上進行修改,可以使用特征碼的等值替換法來修改原有的語句,例如將add eax,-3修改為sub eax,3等,或者是添加一些自己的語句,例如添加add eax,3與sub eax,3。由此不難看出,的修改其實是很簡單的。
3、空白區域尋找與加空白區段
不管是通過反匯編為程序添加功能還是使用跳轉法修改特征碼,又或者是添加花指令等操作,都有一個共同點,那就是需要有一塊比較大的0x00區域以便于我們進行修改。
不管是OllyDbg還是WinHex,都可以非常輕松地找到一塊可用的0x00區域,但是還有幾點是需要大家注意的:
(1)使用WinHex等十六進制編輯軟件找到0x00區域后,先要將其起始地址轉換為內存地址,這樣就可以在Ollydbg中找到它了,如圖1所示。
圖1 使用WinHex等十六進制編輯器查找0x00區域
(2)找到空白區域后不要忘記檢測此區域是否可寫,如果不可寫的話則會導致最終保存時出現錯誤,從而前功盡棄。驗證方法是選中將要使用的0x00區域,單擊右鍵,在彈出的菜單中選擇“復制到可執行文件”>“選擇”,之后如果彈出了出錯提示,則證明這段區域不可用,否則的話就是可以使用。
(3)在WinHex中也可以通過菜單欄“搜索”下的“查找十六進制數值”來搜索0x00字節,以便快速定位。
除了OllyDbg和WinHex之外,還可以利用一些工具查找空白區段,例如我們常用的PEID就有這個功能。在使用PEID打開一個程序后,單擊“PE段”右側的“>”按鈕,如圖2所示。
圖2 打開PEID的節查看器
右擊選擇一個區段后,在彈出的對話框中選擇“搜索全0處”,如圖3所示。
圖3 搜索全0處
這樣就可以找到如圖4所示的全0x00區域信息了。
圖4 搜索結果
另外還有一款專門用于搜索0x00區域的軟件CodeCaver,也叫做“PE空隙搜索器”,它可以搜索NOP與0空間,但是唯一不好的地方就是需要運行程序才能進行查找。假設我正運行著一個截圖軟件,打開CodeCaver后在“進程名”下拉菜單中選擇“截圖軟件.exe”,然后單擊“搜索”按鈕,就會找到如圖5所示的00區域信息。
圖5 使用“PE空隙搜索器”搜索0x00
CodeCaver找到的0x00區域信息非常豐富,由于是直接在內存中搜索到的,所以不需要進行地址轉換就可以直接在OllyDbg中應用,不過這個工具并不利于在進行木馬修改時應用,因為它只能在已經運行的程序中進行尋找。
倘若利用以上的方法都無法找到合適的0x00區域又該怎么辦呢?其實還可以通過加區段的方法人為地制造出一塊可用的區段來。比如,可以使用ToPo這款小工具來增加所需要的區段。運行ToPo后單擊“打開”按鈕打開要添加區段的程序,在彈出的對話框中選擇“創建一個新的區段[文件大小增加]”,然后再單擊OK按鈕。
接著在“增加字節”欄中填入“128”(一般情況下這里所填寫的字節數最好為2的倍數),并勾選上“改變入口”,最后單擊“生成”按鈕,如圖6所示。由圖6可以看到,程序已經將128字節增加到0x0103E000這個地址的后面了。
圖6 增加字節
在這里需要說明的是,如果此處選擇了“改變入口”這個選項,那程序會自動將入口點更改為軟件中所提示的"0x0103E000"這個地址處,而且還會在區段結尾添加一個跳轉語句跳轉到程序原來的入口地址處,所以我們直接將花指令
二、花指令的高級應用
1、花指令的提取與快速應用
當我們拿到一款免殺的木馬或自動添加工具時,是否想過將對方的據為己有?要是能將提取出來,那么這個以后就是我們自己的了。
如果木馬程序被加了,那么往往在程序開頭處的信息便是了。如圖7所示就是一個通過加花工具自動添加進去的。
圖7 一個由工具自動添加的花指令
通過這個我們可以發現它是通過壓棧(push)來跳到程序的原入口點的,因此應用時只需要更改push后面的內容即可。為了方便以后的調用,我們在OllyDbg中先選中這段,然后單擊右鍵,選擇“二進制復制”,并將其粘貼到記事本中,這樣就完成了的提取操作。
如果以后想應用這段,只需要復制我們保存在記事本中的信息,然后選中一塊空白區域,單擊右鍵,選擇“二進制粘貼”,并將push指令部分更改為“push程序原入口地址”,最后使用peditor將入口點修改為開始的地址就行了。
這里再給大家介紹一款工具—怒劍狂花,它能夠很好地支持自定義的添加。打開“怒劍狂花”后,依次選擇“設置”>“自定義”,然后在彈出的窗口中單擊“添加”按鈕,便進入了“添加”的窗口,如圖8所示。
圖8 打開花指令添加窗口
在“指令名稱”處填寫要給取的名字,這里我填寫的是"X"。下一步就是將我們剛才保存下來的代碼復制進去,然后勾選“自動調整格式”,如圖9所示。
圖9 添加自定義花指令
可以看到上面還有一個“跳轉位置”沒有填寫,這是我們自定義的一個重要參數,它是用來控制應該向哪里跳轉的。回到OllyDbg后,我們可以發現跳轉處的的HEX數據為"68 61 63 01 01",而其上面則為"68 90 90 90 90",如圖10所示。
圖10 獲取跳轉特征信息
由此可知,在字符"68 61 63 01 01"里的"61 63 01 01"就是原程序入口地址的十六進制數據了,而其中的68代表的則是push。返回到“怒劍狂花”中,單擊68后,可以看到窗口底部顯示的信息為“選中的字符序號為:23”,如圖11所示。
圖11 查看顯示序號
也就是說我們要在“跳轉位置”處填寫23,這樣程序在添加時,當添加到23個字符后就會插入它獲取的原程序入口,以保證程序可以前后連貫起來正常運行。掌握了這些,您以后就可以隨意添加自己搜集到的了。
2、SEH異常的應用
SEH異常是一個比較復雜的概念,這里只介紹一下目前我們能用到的知識,以便于引領大家向更深層次邁進。
首先,靜下心來讀讀MSDN對SHE異常給出的解釋:“Windows 支持一種稱為結構化異常處理的可靠的異常處理方法,此方法涉及與操作系統的協作,并且在編程語言中具有直接支持”。
“異常”是意外的或是使進程不能正常進行的事件,硬件和軟件都可以檢測出異常。硬件異常包括被零除和數值類型溢出。而軟件異常指的是通過調用RaiseException函數檢測到并發出信號通知系統的情況,以及由Windows檢測到的特殊情況。
為了避免出現異常后程序崩潰,可以使用異常處理機制編寫更可靠的代碼,以確保資源(如內存塊和文件)在發生意外終止事件時可正常關閉,還可以利用簡潔的、不依靠goto語句或詳細測試返回代碼的結構化代碼來處理具體問題(如內存不足)。
SEH異常也叫做“結構化異常處理(Structured Exception Handling)”,它其實是系統提供的一個服務,例如有時我們在執行程序時會出現一個錯誤提示框,請我們單擊“發送報告”或“調試”或“關閉”按鈕。在這之前的Windows版本也會彈出一個提示框,如果系統安裝了微軟的編譯工具,那它就會引導你啟用工具去調試程序的錯誤。
當系統檢測到異常時,它馬上會將發生異常的程序掛起,并交由系統特定的調試程序來處理,也就是說這時程序的執行流程已經轉移到了系統上,而如果程序此時又運行起來的話,那么就會使程序的運行流程產生更大的迷惑性。
大家可以想象一下,假如殺毒軟件正在跟蹤程序的運行,而此時程序拋出了一個異常,其流程轉移到了系統上,那么可想而知,殺毒軟件肯定也會跟到系統里,而原程序此時就可以大搖大擺地繼續完成自己的使命了。
當然,上面所舉的例子并不十分準確,這里只是為了盡量使大家了解SEH異常。關于SEH異常在中的應用,暫且把它當成一個跳轉使用就行了。假設我們現在有個已經加花的程序,那么只需要將的跳轉替換為SEH異常代碼就可以了。就以下面的SEH異常代碼為例為大家演示一下。
我們先使用OllyDbg打開已經加花的程序,發現程序入口處就是一段花指令,而用鼠標選中的那一行便是跳向程序真正入口的地址了,如圖12所示。
圖12 找到花指令中的程序原入口地址
現在將其替換為上面的SEH異常代碼,并將上面代碼中的"********"改為原程序入口地址0x01016361。
最終的修改結果如圖13所示,最后保存之。
圖13 修改后的情況返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的c语言加花指令,花指令的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腿部刮痧可以瘦腿吗
- 下一篇: 拔罐、刮痧后多久能洗澡