国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

淺析木馬服務端的生成技術
2006-12-25   

從“生成”的這個事實來看,我們可以猜想客戶端程序可能本身綁有一段自定義的二進制數據,這段二進制數據實質上就是一個服務端的模板。在用戶進行了設置工作之后,客戶端就會將設置完成的這些特定數據填充到這個模板之中,然后再通過寫文件的操作將這段已經配置完畢的二進制數據模板生成一個特定的服務端程序,如下圖所示:

打個比方來說,郵局有很多空白的信封。你在買下一個信封之后,在信封上填寫郵政編碼、收件人地址和姓名,然后再將你的信件裝入信封糊好,這就成為了你所特有的一封信件了。——希望我這么解釋能夠讓你明白我下面將要在操作的大致過程。

下面我要實現一個名為“MsgBox生成器”的演示程序,你可以在客戶端進行MessageBox的標題和文本的設置,然后程序就會在C:\下生成一個名為MsgBox.exe的“Hello, World”程序,這個彈出的MessageBox就是你先前在客戶端所設置的那樣。運行界面如下圖:

好了,那么我先來設計生成服務端的功能。為了十足地模仿木馬程序,我使用Win32 ASM來編寫服務端程序,代碼如下:

.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
szTitle db "Hello", 0
szText db "Hello, World", 0
.code
start:
invoke MessageBox, NULL, addr szText, addr szTitle, MB_OK or MB_ICONINFORMATION
invoke ExitProcess, NULL
end start

如你所見,這正是Iczelion在他的Win32匯編教程中編寫的那個“Hello, World”,你可以利用MASM32將這段源代碼編譯鏈接,生成一個MsgBox.exe,在此我就利用這個程序來充當我要生成的服務端。

現在需要考慮的問題是,如何將這個MsgBox.exe嵌入到客戶端程序中?一個最好想,也是最直觀的辦法是利用一個BYTE數組來放置MsgBox.exe的二進制數據(CIH病毒就是這樣,它專門準備了一個PE文件頭),然后再使用API函數CreateFile將這段二進制數據寫成文件。部分代碼如下:

BYTE bySrvData[] = {
    0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00,
    0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
    0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    
// 由于篇幅略去以下所有數據-_-#...
};
BOOL CreateServer()
{
    HANDLE hFile;
    DWORD dwWritten;
    hFile = CreateFile( "C:\\MsgBox.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL );
    
if
( hFile == NULL )
        
return
FALSE;
    WriteFile( hFile, (LPCVOID)bySrvData, 
sizeof
( bySrvData ), &dwWritten, NULL );
    CloseHandle( hFile );
    
return
TRUE;
}

好了,代碼到此為止。雖然它可以勝利完成任務,但是你一定不愿意編寫這樣的代碼——對于MsgBox.exe的數據部分,它實在太冗長了(我算了一筆賬,對于編譯完成的MsgBox.exe,它只有不到3KB的大小,但是如果把它的二進制數據像上面那樣保存成文本文件,這個文本文件就會擁有15KB的體積)。況且,這僅僅是一個“Hello, World!”程序,那么換成真正的木馬服務端程序又會怎么樣呢?而且,很多的服務端是用高級語言編寫的,它們動輒會擁有幾十KB的體積!

現在我們只能別無選擇地換一個角度考慮如何來解決這個問題:除了用BYTE數組,還有別的方法可以將MsgBox.exe放入客戶端程序中嗎?

答案是肯定的,那就是利用EXE文件的自定義資源。在解說如何使用自定義資源之前,我先大體介紹一下我要使用的幾個API:

FindResource:查找一個資源。由于我們是要將這個服務端作為EXE的自定義資源形式放在EXE之中,所以在釋放它之前必須首先找到它才可以。

SizeofResource:獲得資源的尺寸,裝載資源時使用。

LoadResource:裝載資源,將資源的二進制數據裝載到內存中。

LockResource:鎖定資源,將內存中的資源數據鎖定。

好了,你可以通過查閱MSDN來了解這幾個函數的詳細功能及參數,這里我就不贅述了。我的整個思路如下:

將MsgBox.exe作為客戶端程序的二進制資源一同編譯。

在生成MsgBox.exe服務端的時候,使用以上的幾個API函數讀取這一段二進制資源數據。

將這段二進制數據保存為文件。

現在我來實現第1步。首先你將MsgBox.exe改名為MsgBox.bin作為一個二進制文件,并將這個文件放入客戶端源代碼的文件夾下。然后,向客戶端的資源腳本(.rc文件)中導入這個二進制資源,如下圖所示:

這時候,VC會彈出一個對話框提示,如下圖:

你可以在“Resource Type”中隨意填寫你的資源類型,這個類型名稱就是我們將要在FindResource函數的第三個參數lpType中使用的資源類型,我這里以“Server”為例。

這樣,我就能夠以資源的方式來使用這段數據了。我的代碼如下:

BOOL CreateServer()
{
    HRSRC hResInfo;
    HGLOBAL hResData;
    DWORD dwSize, dwWritten;
    HANDLE hFile;
    
// 查找所需的資源
    hResInfo = FindResource( NULL, MAKEINTRESOURCE(IDR_SERVER), "Server" );
    
if
( hResInfo == NULL )
        
return
FALSE;
    
// 獲得資源尺寸
    dwSize = SizeofResource( NULL, hResInfo );
    
// 裝載資源
    hResData = LoadResource( NULL, hResInfo );
    
if
( hResData == NULL )
        
return
FALSE;
    
// 寫文件
    hFile = CreateFile( "C:\\MsgBox.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL );
    
if
( hFile == NULL )
        
return
FALSE;
    WriteFile( hFile, (LPCVOID)LockResource( hResData ), dwSize, &dwWritten, NULL );
    CloseHandle( hFile );
    
return
TRUE;
}

到這里,如何生成服務端的問題就已經解決了,現在我來討論如何自定義服務端的數據。我還是以一個例子來解釋這個問題,下面是一段代碼,也就是一個MessageBox的調用過程:

TCHAR strContext[] = "Hello, World!";
TCHAR strTitle[] = "Hello";
MessageBox( NULL, strContext, strTitle, MB_OK );
以上代碼相對應的匯編代碼為:
push 0 
; 最后一個參數MB_OK
lea eax,[ebp-18h]
push eax 
; 第3個參數strTitle
lea ecx,[ebp-10h]
push ecx ;
第2個參數strContext
push 0 
; 第1個參數NULL
call dword ptr [__imp__MessageBoxA@16 (0042a2ac)] 
; 函數調用

也就是說,MessageBox的調用過程是傳入了兩個字符串地址,那么我們只需要將字符串所指向的內容進行改變,就可以達到修改MessageBox顯示結果的目的了。

那么,又如何來確定在MsgBox.exe中那兩個字符串的位置呢?在這里,我玩弄了一個小把戲,就是將原來MsgBox.asm的.data段改為:

.data
szTitle db 100 dup('A')
szText db 100 dup('B')

你也許會對這段代碼頗為不解。不過我還是請你先按照上面的步驟將這個新的源文件編譯鏈接,然后再改名為MsgBox.bin,最后導入到客戶端的資源中。現在,你可以打開那個二進制資源MsgBox.bin看一看,相信你一定會在某個位置找到像下面這樣的東西:

這樣一來,你就會很容易地發現,標題的相對偏移量是0x800,文本的相對偏移量是0x864——這也就是我定義那一連串'A'和'B'的用意了。

現在,就可以編寫我在本文開始所提到的“MsgBox生成器”了,它的核心代碼如下:

HRSRC hResInfo;
HGLOBAL hResData;
DWORD dwSize, dwWritten;
LPBYTE p;
HANDLE hFile;
TCHAR szTitle[100], szText[100];
// 查找所需的資源
hResInfo = FindResource( NULL, MAKEINTRESOURCE( IDR_SERVER ), "Server" );
if
( hResInfo == NULL )
{
    MessageBox( hDlg, "查找資源失敗!", "錯誤", MB_OK | MB_ICONINFORMATION );
    
break
;
}
// 獲得資源尺寸
dwSize = SizeofResource( NULL, hResInfo );
// 裝載資源
hResData = LoadResource( NULL, hResInfo );
if
( hResData == NULL )
{
    MessageBox( hDlg, "裝載資源失敗!", "錯誤", MB_OK | MB_ICONINFORMATION );
    
break
;
}
// 為數據分配空間
p = (LPBYTE)GlobalAlloc( GPTR, dwSize );
if
( p == NULL )
{
    MessageBox( hDlg, "分配內存失敗!", "錯誤", MB_OK | MB_ICONINFORMATION );
    
break
;
}
// 復制資源數據
CopyMemory( (LPVOID)p, (LPCVOID)LockResource( hResData ), dwSize );
// 獲取標題和文本,并復制數據
GetDlgItemText( hDlg, IDC_EDT_TITLE, szTitle, 100 );
GetDlgItemText(hDlg, IDC_EDT_TEXT, szText, 100);
CopyMemory( (LPVOID)( p + 0x800 ), (LPCVOID)szTitle, 100 );
CopyMemory( (LPVOID)( p + 0x864 ), (LPCVOID)szText, 100 );
// 創建文件,寫數據
hFile = CreateFile( "C:\\MsgBox.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL );
if
( hFile != NULL )
    WriteFile( hFile, (LPCVOID)p, dwSize, &dwWritten, NULL );
else
{
    MessageBox( hDlg, "創建文件失敗!", "錯誤", MB_OK | MB_ICONINFORMATION );
    GlobalFree( (HGLOBAL)p );
    
break
;
}
// 收尾工作,釋放資源
CloseHandle( hFile );
GlobalFree( (HGLOBAL)p );

到這里,這一技術的核心部分基本上就已經講完了。對于一個實際的木馬程序服務端而言,你只需要把MsgBox的標題和文本替換為相應的端口號和郵件地址就可以了。另外,對于用C/C++、Delphi等高級語言所編寫的服務端模板,它的尺寸肯定會大大超過一個匯編寫成的程序,這樣的話查找要替換的字符串或者數值就肯定會花些時間了。

本文配套代碼用SDK編寫,在Windows XP Professional + VC 6.0下編譯通過。

責任編輯 趙毅 zhaoyi#51cto.com TEL:(010)68476636-8001


熱詞搜索:

上一篇:網絡安全常用命令精萃(1)
下一篇:如何準確檢測出你電腦上的間諜軟件

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
蜜臀va亚洲va欧美va天堂| 欧美色区777第一页| 国产人成亚洲第一网站在线播放| 精品在线播放午夜| 国产欧美精品区一区二区三区 | 久久精品国内一区二区三区| 在线不卡免费欧美| 国产在线精品视频| 国产精品成人免费在线| 欧美日韩在线播放一区| 美女被吸乳得到大胸91| 国产69精品一区二区亚洲孕妇| 99久久精品免费看国产| 亚洲另类春色国产| 日韩一区二区三区在线| 国产精品亚洲视频| 亚洲激情一二三区| 日韩免费视频线观看| 99久久精品国产精品久久| 亚洲国产综合人成综合网站| 精品国产精品一区二区夜夜嗨| 成人高清在线视频| 日本欧美一区二区| 国产精品麻豆99久久久久久| 欧美日韩和欧美的一区二区| 国产精品正在播放| 亚洲无人区一区| 国产欧美日韩在线看| 欧美体内she精高潮| 国产精品资源在线观看| 亚洲综合男人的天堂| 久久九九久久九九| 这里只有精品视频在线观看| 另类小说综合欧美亚洲| 捆绑调教一区二区三区| 国产精品伦理在线| 欧美日韩的一区二区| 成人美女视频在线看| 日韩1区2区3区| 亚洲免费电影在线| 久久综合九色综合欧美98| 欧美视频一区二区三区四区| 国产白丝网站精品污在线入口| 国内偷窥港台综合视频在线播放| 亚洲三级电影网站| 久久精品人人做人人爽97| 欧美久久婷婷综合色| 色偷偷成人一区二区三区91| 国产精品亚洲а∨天堂免在线| 日韩电影一区二区三区四区| 亚洲精品国产一区二区精华液| 国产日韩精品一区| 欧美精品一区二区三区四区 | 国产精品久久看| 欧美猛男超大videosgay| 99riav一区二区三区| 国产成人综合亚洲网站| 免费视频一区二区| 香蕉av福利精品导航| 亚洲综合色婷婷| 亚洲日本在线天堂| 亚洲色大成网站www久久九九| 欧美韩日一区二区三区四区| 精品国产免费人成电影在线观看四季 | 欧美日韩精品欧美日韩精品一| 成人福利电影精品一区二区在线观看| 久久er99热精品一区二区| 人妖欧美一区二区| 日韩国产一二三区| 日韩精品成人一区二区在线| 一区二区日韩av| 亚洲一区在线看| 亚洲bt欧美bt精品777| 亚洲一区二区黄色| 亚洲成人av资源| 亚洲第一久久影院| 午夜精品久久久久久久| 国产欧美va欧美不卡在线 | 国产精品网站一区| 久久久99精品免费观看| 亚洲精品在线三区| 国产欧美日本一区视频| 国产拍揄自揄精品视频麻豆| 国产农村妇女精品| 国产精品久久久久毛片软件| 国产精品国产三级国产aⅴ中文| 国产精品久久久久久一区二区三区| 中文字幕亚洲在| 亚洲激情第一区| 午夜激情久久久| 老司机午夜精品| 国产99久久久久| 色域天天综合网| 在线播放国产精品二区一二区四区 | 欧美变态凌虐bdsm| 久久九九久久九九| 亚洲女女做受ⅹxx高潮| 亚洲v精品v日韩v欧美v专区 | 亚洲韩国精品一区| 久久精品国产精品亚洲精品 | 91小视频免费观看| 在线观看中文字幕不卡| 91精品国产综合久久久蜜臀粉嫩 | 精品欧美一区二区三区精品久久| 欧美精品一区二区三区很污很色的 | 亚洲国产中文字幕| 久久99久久精品欧美| 成人黄色大片在线观看| 在线观看国产精品网站| 精品免费视频一区二区| 中文字幕 久热精品 视频在线| 一区二区三区欧美日韩| 蜜桃av噜噜一区| 国产成人一区二区精品非洲| 色久综合一二码| 精品成a人在线观看| 最新日韩av在线| 老司机精品视频一区二区三区| 99视频超级精品| 884aa四虎影成人精品一区| 亚洲人成在线观看一区二区| 视频一区视频二区中文| 国产成人综合在线播放| 欧美亚洲日本国产| 欧美激情中文不卡| 日韩av网站免费在线| 99久久久无码国产精品| 久久综合999| 亚洲国产精品人人做人人爽| 国产精品456露脸| 欧美精品亚洲二区| 国产精品乱人伦中文| 免费观看久久久4p| 欧美专区日韩专区| 国产精品久久久久久久第一福利| 天堂一区二区在线| 91久久久免费一区二区| 国产精品三级在线观看| 久久国产日韩欧美精品| 欧美乱妇15p| 一区二区三区91| 93久久精品日日躁夜夜躁欧美| 亚洲精品在线观看视频| 三级在线观看一区二区| 91成人免费电影| 亚洲欧洲日产国码二区| 国产精品综合视频| 精品久久国产老人久久综合| 亚洲一区二区三区美女| 一本色道亚洲精品aⅴ| 日本一区二区视频在线| 久久99精品久久久久久国产越南 | 8x8x8国产精品| 亚洲国产一区视频| 91丝袜高跟美女视频| 中文字幕乱码日本亚洲一区二区| 日本在线不卡视频| 制服视频三区第一页精品| 亚洲成人手机在线| 欧亚洲嫩模精品一区三区| 亚洲区小说区图片区qvod| 成人毛片视频在线观看| 欧美国产激情一区二区三区蜜月| 国产主播一区二区| 国产亚洲欧美日韩日本| 国产精品自产自拍| 日本一区二区三区在线观看| 亚洲高清不卡在线| 国产成人欧美日韩在线电影 | 国产欧美一区二区精品性色超碰| 久久99精品久久久久久久久久久久| 日韩欧美国产综合| 国产精品一区二区三区四区| 国产婷婷一区二区| 99久久精品情趣| 亚洲一区国产视频| 777午夜精品免费视频| 美腿丝袜亚洲综合| 久久久亚洲高清| 波多野结衣91| 亚洲欧美日韩精品久久久久| 欧洲一区二区三区在线| 日韩福利视频导航| 久久久久久久久久久久久久久99 | 日本一区中文字幕| 久久综合狠狠综合久久综合88 | 久久精品国产一区二区三| 精品久久人人做人人爰| 成人sese在线| 在线观看亚洲成人| 亚洲成人av电影在线| 69精品人人人人| 精品一区二区三区免费毛片爱| 久久久久久久网| 成人精品免费看| 日韩精品欧美成人高清一区二区| 精品日韩欧美一区二区| 99久久免费视频.com| 日韩在线观看一区二区| 欧美激情一区二区在线|