程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC++動態鏈接庫編程之DLL木馬

VC++動態鏈接庫編程之DLL木馬

編輯:vc教程

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

  DLL木馬的原理

  DLL木馬的實現原理是編程者在DLL中包含木馬程序代碼,隨後在目標主機中選擇特定目標進程,以某種方式強行指定該進程調用包含木馬程序的DLL,最終達到侵襲目標系統的目的。

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

  (1)DLL程序被映射到宿主進程的地址空間中,它能夠共享宿主進程的資源,並根據宿主進程在目標主機的級別非法訪問相應的系統資源;

  (2)DLL程序沒有獨立的進程地址空間,從而可以避免在目標主機中留下"蛛絲馬跡",達到隱蔽自身的目的。

  DLL木馬實現了"真隱藏",我們在任務管理器中看不到木馬"進程",它完全溶進了系統的內核。與"真隱藏"對應的是"假隱藏","假隱藏"木馬把自己注冊成為一個服務。雖然在任務管理器中也看不到這個進程,但是"假隱藏"木馬本質上還具備獨立的進程空間。"假隱藏"只適用於Windows9x的系統,對於基於WINNT的操作系統,通過服務管理器,我們可以發現系統中注冊過的服務。

  DLL木馬注入其它進程的方法為遠程線程插入。

  遠程線程插入技術指的是通過在另一個進程中創建遠程線程的方法進入那個進程的內存地址空間。將木馬程序以DLL的形式實現後,需要使用插入到目標進程中的遠程線程將該木馬DLL插入到目標進程的地址空間,即利用該線程通過調用Windows API LoadLibrary函數來加載木馬DLL,從而實現木馬對系統的侵害。

  DLL木馬注入程序

  這裡涉及到一個非常重要的Windows API――CreateRemoteThread。與之相比,我們所習慣使用的CreateThread API函數只能在進程自身內部產生一個新的線程,而且被創建的新線程與主線程共享地址空間和其他資源。而CreateRemoteThread則不同,它可以在另外的進程中產生線程!CreateRemoteThread有如下特點:

  (1)CreateRemoteThread較CreateThread多一個參數hProcess,該參數用於指定要創建線程的遠程進程,其函數原型為:

HANDLE CreateRemoteThread(
 HANDLE hProcess, //遠程進程句柄
 LPSECURITY_ATTRIBUTES lpThreadAttributes,
 SIZE_T dwStackSize,
 LPTHREAD_START_ROUTINE lpStartAddress,
 LPVOID lpParameter,
 DWord dwCreationFlags,
 LPDWord lpThreadId
);

  (2)線程函數的代碼不能位於我們用來注入DLL木馬的進程所在的地址空間中。也就是說,我們不能想當然地自己寫一個函數,並把這個函數作為遠程線程的入口函數;

  (3)不能把本進程的指針作為CreateRemoteThread的參數,因為本進程的內存空間與遠程進程的不一樣。

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

#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>

void CheckError ( int, int, char *); //出錯處理函數

PDWord pdwThreadId;
HANDLE hRemoteThread, hRemoteProcess;
DWord fdwCreate, dwStackSize, dwRemoteProcessId;
PWSTR pszLib

[1] [2] [3] 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved