日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DLL 远程线程注入

發布時間:2024/4/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DLL 远程线程注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遠程線程注入


首先 , 這里講和為注入 , 通俗講 , 就是把自己的東西強加給別人
也就是在 其他程序的運行的內存空間里面 插入自己的代碼
這里提到的遠程線程注入
這個算是很常用,也算是用的比較多的一種注入方式了

實用代碼解析

打開進程

// 打開遠程線程if ((hRemoteProcess = OpenProcess(PROCESS_CREATE_THREAD |PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwRemoteProcessID)) ==NULL)

根據PID 打開一個程序 返回其句柄

創建遠程線程

CreateRemoteThread(hRemoteProcess, NULL, 0, LoadLibrary, "./a.dll", 0, NULL))

這行代碼就是 winAPI 中提供的用于創建遠程線程的代碼 , 從表面上看 , 很容易理解 就是在我們打開的應用空間里 加載 a.dll 這個鏈接庫
但是實際上沒有這么簡單咯
下面的分析
這里面臨的問題主要就是在這兩個參數里面 LoadLibrary 和 a.dll

LoadLibrary

我們知道一個進程的地址,和其真實內存空間的地址是一種映射關系 , 雖然DLL 已經被加載到內存中去 , 可是對于不同的進程 這個映射值是不一樣的 , 所以 我們 如果 直接把這個函數值 傳入 , 多半得到的是內存非法訪問的異常

”a.dll”

這里A.dll 是個字符串 , 那么其屬性應該是 寬字節的字符串指針 PWSTR , 如果直接這樣傳入, 顯然得到的是異常錯誤

得到函數地址

PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "LoadLibraryW");

所以這里 必須 通過 GetProcAddress 得到這個函數的 確切的地址 .這樣上述問題一得到解決

創建遠程字符串

//使用VirtualAllocEx函數在遠程進程內存地址空間分配DLL文件名緩沖區pszLibFileRemote = (PWSTR)VirtualAllocEx(hRemoteProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);//在遠程進程中寫緩沖區WriteProcessMemory(hRemoteProcess, pszLibFileRemote,(PVOID)szDllFullPath, cb, NULL

VirtualAllocEx 用于在遠程進程的空間里 開辟 一塊緩沖區
WriteProcessMemory 則是寫特定進程的特定內存空間
這樣通過兩個函數的配合 就可以 將 本地進程的字符串 傳遞到 遠程的進程

遠程線程程創建

CreateRemoteThread(hRemoteProcess, NULL, 0, pfnStartAddr , pszLibFileRemote , 0, NULL))

最后就是這樣 , 好可以成功創建遠程線程.

總結

以上是生活随笔為你收集整理的DLL 远程线程注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。