iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
Software Development

闖入DLL的世界 DLL我要進來了哦系列 第 17

第十七天:強制卸載模組概念

  • 分享至 

  • xImage
  •  

嗨大家好,今天是第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網站找,裡面有滿滿的函式庫。

結語

今天大概講一下怎麼去遠程卸載模組,中秋節烤肉真香。
(吃不到烤肉開始亂寫文章),好了我們明天見。


上一篇
第十六天:淺談
下一篇
第十八天:強制卸載DLL:上
系列文
闖入DLL的世界 DLL我要進來了哦30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言