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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ dll注入

發布時間:2023/12/31 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ dll注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Author:linshao

#include <windows.h> #include <iostream>int main() {//x64不能用宏,所以直接寫原函數,加載Kernel32.dll模塊,下面的內存操作api都是在此模塊里HMODULE a=LoadLibraryA("C:\\windows\\system32\\Kernel32.dll");if (a) {}else { printf("導入模塊失敗"); }//拿到進程句柄HANDLE h = OpenProcess(2097151, true, 16208);if (h) { printf("打開句柄成功\n"); }else { printf("打開句柄失敗"); }//定義要注入dll的路徑,下一步將他傳入注入目標的進程內存里, dll里面的代碼注意x86和x64位shellcodeconst char* s = "F:\\TEMP\\64.dll";printf(s); //在目標進程里面申請虛擬一塊內存存放dll路徑LPVOID pbuf=VirtualAllocEx(h, 0, strlen(s), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (!pbuf) {printf("申請內存失敗\n");}else {printf("申請內存成功\n");}//寫入內存區域BOOL aaa=WriteProcessMemory(h,pbuf,s, strlen(s),0); if (aaa){printf("寫入成功\n");}else{printf("寫入失敗\n");}//創建遠程線程,傳入LoadLibrary函數,參數為上面返回的目標進程里的dll路徑HANDLE hand3=CreateRemoteThread(h,0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pbuf,0,NULL);if (hand3!=NULL) {printf("注入成功\n");}else{printf("注入失敗\n");}HANDLE hand2 = CreateRemoteThread(h, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pbuf, 0, NULL);if (hand2 != NULL) { printf("注入成功\n"); }else { printf("注入失敗\n"); }HANDLE hand1 = CreateRemoteThread(h,NULL,0,(LPTHREAD_START_ROUTINE)LoadLibraryA,pbuf,0,NULL);//h, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, pbuf, 0, NULL);if (hand1 != NULL) { printf("注入成功\n"); }else { printf("注入失敗\n"); }WaitForSingleObject(h, -1);CloseHandle(h);return 0; }

湊文字:

#include <windows.h>
#include <iostream>

int main() {
?? ?//x64不能用宏,所以直接寫原函數,加載Kernel32.dll模塊,下面的內存操作api都是在此模塊里
?? ?HMODULE a=LoadLibraryA("C:\\windows\\system32\\Kernel32.dll");
?? ?if (a) {}
?? ?else { printf("導入模塊失敗"); }
?? ?//拿到進程句柄
?? ?HANDLE h = OpenProcess(2097151, true, 16208);
?? ?if (h) { printf("打開句柄成功\n"); }
?? ?else { printf("打開句柄失敗"); }

?? ?//定義要注入dll的路徑,下一步將他傳入注入目標的進程內存里, dll里面的代碼注意x86和x64位shellcode
?? ?const char* s = "F:\\TEMP\\64.dll";
?? ?printf(s);?? ?

?? ?//在目標進程里面申請虛擬一塊內存存放dll路徑
?? ?LPVOID pbuf=VirtualAllocEx(h, 0, strlen(s), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);?? ?
?? ?if (!pbuf) {printf("申請內存失敗\n");}else {printf("申請內存成功\n");}

?? ?//寫入內存區域
?? ?BOOL aaa=WriteProcessMemory(h,pbuf,s, strlen(s),0);?? ??? ?
?? ?if (aaa){printf("寫入成功\n");}else{printf("寫入失敗\n");}

?? ?//創建遠程線程,傳入LoadLibrary函數,參數為上面返回的目標進程里的dll路徑
?? ?HANDLE hand3=CreateRemoteThread(h,0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pbuf,0,NULL);
?? ?if (hand3!=NULL) {printf("注入成功\n");}else{printf("注入失敗\n");}

?? ?HANDLE hand2 = CreateRemoteThread(h, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pbuf, 0, NULL);
?? ?if (hand2 != NULL) { printf("注入成功\n"); }
?? ?else { printf("注入失敗\n"); }

?? ?HANDLE hand1 = CreateRemoteThread(h,NULL,0,(LPTHREAD_START_ROUTINE)LoadLibraryA,pbuf,0,NULL);
?? ??? ?//h, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, pbuf, 0, NULL);
?? ?if (hand1 != NULL) {?
?? ??? ?printf("注入成功\n");?
?? ??? ?
?? ?}
?? ?else { printf("注入失敗\n"); }
?? ?WaitForSingleObject(h, -1);
?? ?CloseHandle(h);
?? ?
?? ?return 0;
}

總結

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

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