DLL 주입: 프로그램 실행 프로세스를 변경하여 대상 DLL-createRemoteThread를 능동적으로 로드합니다.
2062 단어 역어셈블리
CreateRemoteThread법: 목표 프로세스에서 메모리 저장 목표 DLL 경로를 요청한 다음CreateRemoteThread를 호출하여 루트 함수를 만드는 것은 LoadLibrary이고 파라미터는 목표 DLL 경로를 저장하는 메모리 포인터입니다.
코드는 다음과 같습니다.
void InjectDLL::InjectDLLToProcessMethodOne(wchar_t* targetProcName, char* dllPath)
{
DWORD targetPid = GetProcessPid(targetProcName);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, targetPid);
if (hProc == NULL)
{
cout << " !" << endl;
return;
}
LPTSTR AllocatedMem = (LPTSTR)VirtualAllocEx(hProc, NULL, strlen(dllPath)+1, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (AllocatedMem == NULL)
{
cout << " !" << endl;
return;
}
if (WriteProcessMemory(hProc, AllocatedMem, dllPath, strlen(dllPath), NULL) == 0)
{
cout << "dll !" << endl;
return;
}
//LoadLibraryA kernel32.dll ,GetModuleHandle
HMODULE mKernel = GetModuleHandleA("kernel32");
if (mKernel == NULL)
{
cout << "kernel32 !" << endl;
return;
}
LPTHREAD_START_ROUTINE lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(mKernel, "LoadLibraryA");
if (lpStartAddress == NULL)
{
cout << " LoadLibraryA " << endl;
return;
}
HANDLE mHandle = CreateRemoteThread(hProc, NULL, 0, lpStartAddress, AllocatedMem, 0, NULL);
if (mHandle == NULL)
{
cout << " !" << endl;
return;
}
}
DWORD InjectDLL::GetProcessPid(wchar_t* processName)
{
HANDLE lpSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == lpSnapshot)
{
cout << " !" << endl;
return 0;
}
PROCESSENTRY32 pe32 = { 0 };
pe32.dwSize = sizeof(pe32);
Process32First(lpSnapshot, &pe32);
do
{
if (_wcsicmp(processName, pe32.szExeFile) == 0)
return pe32.th32ProcessID;
} while (Process32Next(lpSnapshot, &pe32));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
DLL 주입: 프로그램 실행 프로세스를 변경하여 대상 DLL-createRemoteThread를 능동적으로 로드합니다.프로그램 프로세스를 변경하는 것은 일반적으로 스레드 EIP를 변경하거나 새 스레드를 만들거나 대상 프로세스의 코드를 수정하여 LoadLibrary를 실행하여 대상 DLL을 불러오는 것입니다. CreateRemoteT...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.