2016-11-09 11 views
0

다른 프로세스에 dll을 주입하기 위해 SetWindowsHookEx를 사용하고 있습니다. 그러나 인젝터 프로그램이 종료되면 dll은 다른 프로세스에서 언로드됩니다. 어쨌든 내 짐을 멈출 수 있니? 기본적으로 인젝터 프로그램이 실행 중인지 여부에 관계없이 dll을 영구적으로 유지하려고합니다. DLL 내에서 dll 참조 횟수를 늘릴 수 있다면 작동 할 수 있습니다. 그러나 나는 방법을 찾지 못했습니다.SetWindowsHookEx DLL 언로드

+1

작업 -'LdrAddRefDll (0, & __ ImageBase와)' – RbMm

+0

감사합니다. 나는 당신의 제안을 Visual Studio에 넣었지만,이 이름들은 알려져 있지 않다. 사용할 파일이 있습니까? – user118708

+0

자체로 선언하고 ntdll.lib을 사용하십시오. – RbMm

답변

2

존재 2 방법 1.) 가장 효과적입니다 - LdrAddRefDll을 사용하십시오 - 이것은 당신이 가장 짧은 방법으로 필요한 것을 정확히합니다. 연결을 위해 ntdll.lib (또는 ntdllp.lib)을 사용해야합니다. 좋은 효과가 없습니다

LdrAddRefDll(0, (HMODULE)&__ImageBase); 

2)하지만 DLL의 참조 횟수 증가에 대한

WCHAR sz[MAX_PATH]; 
if (GetModuleFileName((HMODULE)&__ImageBase, sz, RTL_NUMBER_OF(sz))) 
{ 
    LoadLibrary(sz); 
} 
+0

감사합니다. 나는 서면의 중간에 있었다 2). 이제 복사하고 붙여 넣기 만하겠습니다. :) 1)에 관해서는, 그것은 복잡해 보입니다. 나는 2)가 작동하지 않으면 그것을 사용할 것이다. – user118708

+0

물론 1과 2 모두 작동합니다. 모두 언로드에서 그것을 잡아 dll에 대한 참조를 추가 - 이제 여분의 FreeLibrary 필요합니다. 그러나 1 - 직접하십시오. 2 먼저 & __ ImageBase를 이름으로 변환 한 다음 이름을 동일한 __ImageBase로 변환하고 마지막으로 참조 – RbMm

+0

을 추가합니다. 링커 설정을 변경할 필요가 없었기 때문에 2를 사용했습니다. 어디 있는지도 모르겠습니다. DLL_PROCESS_ATTACH는 GetModuleFileName에 피드하는 dll 핸들을 제공합니다. 모듈은 DllMain의 고정 된 잠금의 경우 새 스레드에서로드되었습니다. – user118708