DLL的建立使用以及注入

2021-10-18 13:26:22 字數 3786 閱讀 1805

dll的入口函式:

bool winapi dllmain

(hinstance hinstance, dword reason,

lpvoid lpvreserved)

;

hinstance:該引數是當前dll模組的控制代碼,即本動態連線庫模組的例項控制代碼。

reason:該引數表示dllmain()函式被呼叫的原因。分別是:值作用

dll_process_attach

當dll被某程序載入時,dllmain()函式被呼叫

dll_pro cess_detach

當dll被某程序解除安裝時,dllmain()函式被呼叫

dll_thread_attach

當程序中有執行緒被建立時,dllmain()函式被呼叫

dll_thread_detach

當程序中有執行緒結束時,dllmain()函式被呼叫

lpvreserved:保留引數,即不被程式設計師使用的引數。

新增匯出函式:

extern

"c"__declspec

(dllexport)

(函式返回型別)

(函式名稱)

(引數...

);

dll的呼叫:

hmodule hmodule =

loadlibrary

("dll檔名.dll");

函式指標 mfun =

getprocaddress

(hmodule,

"dll中所匯出的函式名"

);

getprocaddress(

hmodule hmodule, // dll模組控制代碼

lpcstr lpprocname // 函式名

);返回值:

如果函式呼叫成功,返回值是dll中的輸出函式位址。

如果函式呼叫失敗,返回值是null。得到進一步的錯誤資訊,呼叫函式getlasterror。

dll遠端注入:

先介紹幾個函式:

handle createremotethread

(__in handle hprocess,

__in lpsecurity_attributes lpthreadattributes,

__in size_t dwstacksize,

__in lpthread_start_routine lpstartaddress,

__in lpvoid lpparameter,

__in dword dwcreationflags,

__out lpdword lpthreadid);/*

*/

hprocess : 執行緒所屬程序的程序控制代碼.該控制代碼必須具有

process_create_thread,

process_query_information,

process_vm_operation,

process_vm_write,

和process_vm_read 訪問許可權.一般使用openprocess()獲得。

lpthreadattributes: 乙個指向 security_attributes 結構的指標, 該結構指定了執行緒的安全屬性.一般為null;

dwstacksize: 執行緒棧初始大小,以位元組為單位,如果該值設為0,那麼使用系統預設大小.

dwcreationflags [in]:

執行緒的建立標誌.值含義

0執行緒建立後立即執行

create_suspended

0x00000004

執行緒建立後先將執行緒掛起,直到 resumethread 被呼叫

stack_size_param_is_a_reservation

0x00010000

dwstacksize 引數指定為執行緒棧預訂大小,如果stack_size_param_is_a_reservation沒有被指定,dwstacksize 引數指定為執行緒棧分配大小.

lpthreadid [out]

指向所建立執行緒id的指標,如果建立失敗,該引數為null.

lpvoid virtualallocex

(handle hprocess,lpvoid lpaddress,

size_t dwsize,

dword flallocationtype,

dword flprotect)

;//在目標程序申請記憶體

hprocess:

申請記憶體所在的程序控制代碼。

lpaddress:

欲分配的記憶體大小,位元組單位;注意實際分 配的記憶體大小是頁記憶體大小的整數倍

flallocationtype 可取下列值:值含義

mem_commit

為特定的頁面區域分配記憶體中或磁碟的頁面檔案中的物理儲存

mem_physical

分配物理記憶體(僅用於位址視窗擴充套件記憶體)

mem_reserve

保留程序的虛擬位址空間,而不分配任何物理儲存。保留頁面可通過繼續呼叫virtualalloc()而被占用

mem_reset

指明在記憶體中由引數lpaddress和dwsize指定的資料無效

mem_top_down

在盡可能高的位址上分配記憶體(windows 98忽略此標誌)

mem_write_watch

必須與mem_reserve一起指定,使系統跟蹤那些被寫入分配區域的頁面(僅針對windows 98)

flprotect 可取下列值:值含義

page_readonly:

該區域為唯讀。如果應用程式試圖訪問區域中的頁的時候,將會被拒絕訪

page_readwrite

區域可被應用程式讀寫

page_execute

區域包含可被系統執行的**。試圖讀寫該區域的操作將被拒絕。

page_execute_read

區域包含可執行**,應用程式可以讀該區域。

page_execute_readwrite

區域包含可執行**,應用程式可以讀寫該區域。

page_guard

區域第一次被訪問時進入乙個status_guard_page異常,這個標誌要和其他保護標誌合併使用,表明區域被第一次訪問的許可權

page_noaccess

任何訪問該區域的操作將被拒絕

page_nocache

ram中的頁對映到該區域時將不會被微處理器快取(cached)

bool writeprocessmemory

(handle hprocess,

lpvoid lpbaseaddress,

lpvoid lpbuffer,

dword nsize,

lpdword lpnumberofbyteswritten);

//把lpbuffer中的內容寫到程序控制代碼是hprocess程序的lpbaseaddress位址處,寫入長度為nsize。

hprocess:該引數是指定程序的程序控制代碼。

lpbaseaddress:該引數是指定寫入目標程序記憶體的起始位址。

lpbuffer:該引數是要寫入目標程序記憶體的緩衝區起始位址。

nsize:該引數是指定寫入目標記憶體中的緩衝區的長度。lpnumberofbyteswritten:該引數用於接收實際寫入內容的長度。

PyMySQL基本使用以及SQL注入問題

目錄又是乙個可以幫助我們實現用 來運算元據庫的模組,安裝,匯入即可 然後匯入即可使用 pymysql基本使用 import pymysql conn pymysql.connect user root password 123 host 127.0.0.1 port 3306,charset utf...

CMFCColorButton的使用以及重繪

cmfccolorbutton是visual studio 2008 sp1版本以上提供的顏色採集器。系統環境 windows 7 程式設計環境 visual studio 2008 sp1 下面介紹下使用步驟 1.新建基於對話方塊的工程,名稱為mycolorbuttondemo 2.拖動乙個按鈕到...

NSSortDescriptor使用以及陣列排序

nssortdescriptor 指定用於物件陣列排序的物件的屬性。物件可能是字典,這種情況就是對字典陣列排序 如果是employee物件需要按照name來排序,就生成下面的descriptor nssortdescriptor descriptor nssortdescriptor sortdes...