嗨大家好,今天是第17天我們來講講遠程注入模組後,那要如何去遠程卸載DLL,廢話不多說我們直接進入主題。
先附上今天的需要用到的程式碼
#include <Windows.h>
#include <iostream>
typedef void (*ccc)();
int main() {
HMODULE hmodule = LoadLibrary("Dll5.dll");
printf("%X", hmodule);
if (hmodule == NULL) {
MessageBox(NULL,"沒抓到","標題", MB_OK);
return -1;
}
ccc a = (ccc)GetProcAddress(hmodule, "ccc");
a();
getchar();
return 0;
}
#include <Windows.h>
void del(int PID, char* Path) {
//獲取進程句柄
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
//申請一個記憶體給Path
LPVOID Return = VirtualAllocEx(hProcess, NULL, strlen(Path) + 1, MEM_COMMIT, PAGE_READWRITE);
//寫入到VirtualAllocEx申請的記憶體內
WriteProcessMemory(hProcess, Return, Path, strlen(Path) + 1, NULL);
//LoadLibrary的函數庫
HMODULE hModule = LoadLibrary("Kernel32.dll");
LPTHREAD_START_ROUTINE lpStartAddress = LPTHREAD_START_ROUTINE(GetProcAddress(hModule, "LoadLibraryA"));
CreateRemoteThread(hProcess, NULL, 0, lpStartAddress, Return, 0, NULL);
}
int main() {
const char* p = "D:\\鐵人賽DLL\\Dll5\\Debug\\Dll5.dll";
del(4304, (char*)p);
return 0;
}
我們先拿上次遠程注入的程式碼來講,首先我們需要蓋的地方是
LPTHREAD_START_ROUTINE lpStartAddress = LPTHREAD_START_ROUTINE(GetProcAddress(hModule, "LoadLibraryA"));
這串因為在注入的時候我們使用LoadLibraryA,那在上次卸載模組的時候也有講過使用FreeLibrary,但這邊不需要加A
而上面的函式庫當然也要找FreeLibrary所在的DLL
其實蠻多都可以從微軟的mdsn網站找,裡面有滿滿的函式庫。
今天大概講一下怎麼去遠程卸載模組,中秋節烤肉真香。(吃不到烤肉開始亂寫文章),好了我們明天見。