DLL 주입 및 언로드 원격 스레드
/*
*
*/
HMODULE FindRemoteMod(HANDLE hProcess, const wchar_t * pszModShortName)
{
HMODULE _hModules [0x100] = {0};
int _cbNeeded = 0;
if (!EnumProcessModules(hProcess
, _hModules
, sizeof(_hModules)
, (unsigned long *)&_cbNeeded))
return (HMODULE)0;
for (int _i = 0; _i < (_cbNeeded >>2); _i ++)
{
wchar_t _szModuleName [0x200] = {0};
GetModuleBaseNameW(hProcess
, _hModules[_i]
, _szModuleName
, sizeof(_szModuleName)/sizeof(_szModuleName[0]));
if (!wcsicmp(_szModuleName, pszModShortName))
return _hModules[_i];
}
return (HMODULE)0;
}
########################################################################
/*
* dll
*/
BOOL UnloadDll(unsigned long pid, const wchar_t * dllname)
{
// ,
HANDLE hProcess = OpenProcess(PROCESS_VM_READ
| PROCESS_VM_WRITE
| PROCESS_VM_OPERATION
| PROCESS_SUSPEND_RESUME
| PROCESS_CREATE_THREAD
| PROCESS_QUERY_INFORMATION
, FALSE
, pid);
if (NULL == hProcess)
return FALSE;
//
HANDLE _hToken = INVALID_HANDLE_VALUE;
if (!OpenProcessToken(hProcess, TOKEN_READ, &_hToken))
{
CloseHandle(hProcess);
return FALSE;
}
CloseHandle(_hToken);
HMODULE _hDllModule = CheckDllLoaded(hProcess, dllname);
if (_hDllModule != 0)
{
// FreeLibrary , DLL.
unsigned long _tid = 0;
CreateRemoteThread(hProcess
, 0, 0
, (LPTHREAD_START_ROUTINE)FreeLibrary
, _hDllModule
, 0
, &_tid);
}
CloseHandle(hProcess); hProcess=0;
return TRUE;
}
########################################################################
/*
* dll
*/
BOOL LoadDll(HANDLE hProcess, const wchar_t * dllpath)
{
// ,
DWORD dwRemoteBufLength = (wcslen(dllpath)+1)*sizeof(wchar_t);
// LoadLibraryW
wchar_t * _pBuf =(wchar_t * )VirtualAllocEx(hProcess
, NULL
, dwRemoteBufLength
, MEM_COMMIT
, PAGE_READWRITE);
if(!_pBuf)
return FALSE;
// dll
if(!(WriteProcessMemory(hProcess
,_pBuf
,(PVOID)dllpath
,dwRemoteBufLength
,NULL)))
return FALSE;
// LoadLibraryW
HANDLE _hThread = CreateRemoteThread(hProcess
, NULL
, 0
, (PTHREAD_START_ROUTINE)(LoadLibraryW)
, (PVOID)_pBuf
, 0
, NULL);
// ?!
return (_hThread != INVALID_HANDLE_VALUE);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.