首页
社区
课程
招聘
[求助]x64下FreeLibrary失败
发表于: 2014-3-10 09:18 6764

[求助]x64下FreeLibrary失败

2014-3-10 09:18
6764
x64 下注入dll成功,但是无法卸载dll

注入自己的程序后也是无法卸载

但是自己的程序直接调用 FreeLibrary 是可以成功卸载的

是远程卸载的参数有问题吗?




HMODULE baseModule = GetModuleHandle(_T("HK_CF.dll"));

LPVOID pRemoteModule = VirtualAllocEx(hRemoteProcess, NULL, sizeof(HMODULE), MEM_COMMIT, PAGE_READWRITE);

if (pRemoteModule == NULL)
{
	printf("VirtualAllocEx error\n");
	return -3;
}
 

DWORD Size;
SIZE_T sSize;
if (WriteProcessMemory(hRemoteProcess, pRemoteModule, &baseModule, sizeof(HMODULE), &sSize) == NULL)   
{
	printf("WriteProcessMemory error\n");
	return -4;
}

//取得目标进程的的FreeLibrary API内存地址
LPTHREAD_START_ROUTINE pFreeLibrary = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "FreeLibrary");
if (pFreeLibrary == NULL)
{
	printf("GetProcAddress error\n");
	return -5;
}
else
{
	printf("LoadLibrary's Address is 0x%x\n\n", pFreeLibrary);
}

HANDLE hThread = NULL;
hThread = CreateRemoteThread(hRemoteProcess, NULL, NULL, pFreeLibrary, pRemoteModule, 0, NULL);
if(hThread == NULL)
{
	printf("Uninstall error\n");
	return -6;
}

GetExitCodeThread(hThread, &dwThreadRet);
CloseHandle(hThread);

//释放分配内存
if (VirtualFreeEx(hRemoteProcess, pRemoteModule, 0, MEM_RELEASE) == 0)//释放内存
{
	printf("VitualFreeEx error\n");
	return -8;
}

//释放句柄
if (hRemoteProcess != NULL) CloseHandle(hRemoteProcess);

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
看见CreateRemoteThread.....我瞬间蛋疼一地
2014-3-10 10:21
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
dll加载地址不同
FreeLibrary直接传句柄,不用传句柄的地址
楼主还是多看看msdn吧
2014-3-11 10:16
0
雪    币: 32
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢,一直误以为要把句柄也写入目标程序才能调用

原来可以直接传入,小弟学艺不经,感谢指点!

2014-3-11 14:04
0
游客
登录 | 注册 方可回帖
返回
//