DLL 주입을 위한 APC 삽입
#include <Windows.h>
#include <TlHelp32.h>
int InjectDllWithApc(char DllFullPath[MAX_PATH], ULONG pid )
{
HANDLE hProcess,hThread,hThreadSnap = INVALID_HANDLE_VALUE;
THREADENTRY32 te32 = {0} ;
HMODULE hDll = GetModuleHandle("Kernel32.dll");
int len = strlen(DllFullPath) + 1;
hProcess = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE,TRUE,pid);
// , DLL
if(hProcess==NULL)
{
printf("failed to open process!!
");
return 0;
}
//
PVOID pszLibFileRemote = (char *)VirtualAllocEx(hProcess, NULL, lstrlen(DllFullPath)+1, MEM_COMMIT, PAGE_READWRITE);
if (pszLibFileRemote != NULL)
{// DLL
if(WriteProcessMemory(hProcess,pszLibFileRemote,(void *)DllFullPath, lstrlen(DllFullPath)+1, NULL))
{
HANDLE hThreadSnap = INVALID_HANDLE_VALUE;
THREADENTRY32 te32;
hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );
if( hThreadSnap == INVALID_HANDLE_VALUE )
return 1;
te32.dwSize = sizeof(THREADENTRY32 );
if( !Thread32First( hThreadSnap, &te32 ) )
{
CloseHandle( hThreadSnap );
return 1;
}
do
{//
if( te32.th32OwnerProcessID == pid )
{ printf("TID:%d
", te32.th32ThreadID) ;
hThread = OpenThread(THREAD_SET_CONTEXT ,FALSE,te32.th32ThreadID);
if (hThread != 0)
{// APC
if(QueueUserAPC((PAPCFUNC)LoadLibraryA, hThread, (DWORD)pszLibFileRemote))
{
printf(" APC
") ;
}
else
{
printf(" APC
");
return 1;
}
CloseHandle(hThread);
}
}
}while( Thread32Next(hThreadSnap, &te32 ) );
CloseHandle( hThreadSnap );
}
}
CloseHandle(hProcess);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
InjectDllWithApc("C:\\DllTest.dll",1496);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.