首页
社区
课程
招聘
未解决 [求助]远程注入DLL成功后,有些程序没有运行DLL
发表于: 2019-11-15 09:43 2920

未解决 [求助]远程注入DLL成功后,有些程序没有运行DLL

2019-11-15 09:43
2920
参考了Window核心编程里的远程注入DLL。远程注入DLL成功后,某些程序没有运行DLL,有些程序正常执行了DLL,这是什么原因?
DLL里只是简单的调用了下messagebox
代码如下:
BOOL WINAPI InjectLibW(DWORD dwProcessId, PCWSTR pszLibFile)
{
//如果函数执行失败
BOOL bOk = FALSE;
HANDLE hProcess = NULL, hThread = NULL;
PWSTR pszLibFileRemote = NULL;

__try
{
hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION |
PROCESS_CREATE_THREAD | //用于创建远程线程
PROCESS_VM_OPERATION | //用于virtualAllocEx/VirtualFreeEx
PROCESS_VM_WRITE, //用于写入进程内存
FALSE, dwProcessId);
if (hProcess == NULL)
__leave;

//计算DLL路径名所需的字节数
int cch = 1 + lstrlenW(pszLibFile);
int cb = cch * sizeof(wchar_t);

//在远程进程中为路径名分配空间
pszLibFileRemote = (PWSTR)
VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);
if (pszLibFileRemote == NULL)
__leave;

//复制DLL路径到远程进程地址空间
if (!WriteProcessMemory(hProcess, pszLibFileRemote, (PVOID)pszLibFile, cb, NULL))
__leave;

//获取在Kernel32中loadlibraryW的真实地址
PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW");

if (pfnThreadRtn == NULL)
__leave;

//创建远程线程并调用LoadLibraryW(DLLPathname)
hThread = CreateRemoteThread(hProcess, NULL, 0,
pfnThreadRtn, pszLibFileRemote, 0, NULL);
if (hThread == NULL)
__leave;

WaitForSingleObject(hThread, INFINITE);
bOk = TRUE;
}
__finally
{
if (pszLibFileRemote != NULL)
VirtualFreeEx(hProcess, pszLibFileRemote, 0, MEM_RELEASE);
if (hThread != NULL)
CloseHandle(hThread);
if (hProcess != NULL)
CloseHandle(hProcess);
}

return bOk;
}

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 319
活跃值: (1026)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
注意下32、64位问题。
2019-11-15 15:18
0
雪    币: 209
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
aqtata 注意下32、64位问题。
都是64位的
2019-11-15 17:08
0
雪    币: 969
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看编译选项,如果是/MD编译的话,注入某些非动态库的函数会失败,把DLL用/MT编译再注入试试。
2019-11-22 14:37
0
雪    币: 209
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
wx_大方 看编译选项,如果是/MD编译的话,注入某些非动态库的函数会失败,把DLL用/MT编译再注入试试。
注入好像是成功的,但是没有执行DLL
2019-12-5 11:05
0
游客
登录 | 注册 方可回帖
返回
//