1. 程式人生 > >shellcode轉換成彙編程式碼

shellcode轉換成彙編程式碼

方法1:提取ShellCode中的機器碼---->把機器碼貼上到WinHEX並儲存成exe檔案---->用C32Asm反彙編---->得到反彙編碼。

方法2:提取ShellCode中的機器碼---->用OllyDBG隨便開啟一個exe程式---->把機器碼直接二進位制貼上到OllyDBG---->得到反彙編碼。

方法1:


1.我先寫了個簡單的Perl指令碼,把裡面的機器碼提取出來,當然用其它語言或者手動提取也可以,比較快速的方法是先把ShellCode儲存到記事本里,去掉前後的引號和多餘程式碼,然後用查詢替換把“\x”替換成空,再刪除換行就可以了。

一次性提取程式碼如下(pick.pl):
# -w
while (<>)
{
    while(/(x)(\w{2})/)
    {
        $code .=$2;
        s/$1$2//;
    }
}
open(HEX,">HEX.TXT") or die("error:$!");
print HEX $code;

在命令列執行
perl pick.pl ShellCode.cpp
就會把ShellCode裡面的機器碼提取到HEX.TXT文字檔案中。


2.開啟HEX.TXT,可以算出我這的機器碼有222位元組。然後複製所有機器碼。
開啟WinHEX,點新建,檔案大小這裡填150位元組,只要大於機器碼位元組數的一半就行了。
然後點貼上,選擇剪貼簿格式那選擇“ASCII Hex”,確定就可以把機器碼貼上到WinHEX。
再把它儲存成EXE檔案,比如ShellCode.exe。


3.用C32Asm開啟剛才儲存的exe檔案,點右鍵-->到對應彙編模式編輯,就可以看到彙編程式碼了。


現在機器碼已經變成了彙編程式碼,就很容易看懂了。
我們可以在C32Asm裡面對ShellCode進行修改,修改完只要記住變化了的機器碼,然後在ShellCode.cpp裡面改對應的機器碼就行了。

方法2:

其實完全可以複製上面提取到的機器碼,然後用OllyDBG隨便開啟一個exe程式,選擇一塊區域,直接右鍵-二進位制-二進位制貼上,就可以看到ShellCode的反彙編程式碼了。而且這樣更加簡單。

我現在一般都是先用記事本替換提取機器碼然後直接貼上到OllyDBG裡面檢視的。

如下圖:紅色部分就是貼上進去的機器碼的反彙編程式碼。

方法2:

其實完全可以複製上面提取到的機器碼,然後用OllyDBG隨便開啟一個exe程式,選擇一塊區域,直接右鍵-二進位制-二進位制貼上,就可以看到ShellCode的反彙編程式碼了。而且這樣更加簡單。