윈도우즈 플랫폼에서 dll 원격 주입을 실현하는 간단한 예
//dll 코드, 메시지 박스 함수를 아무렇게나 추가하여 주입 테스트에 성공하면 이 대화상자가 팝업됩니다
- #include "stdafx.h"
- #include
-
- BOOL APIENTRY DllMain( HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- MessageBoxA(NULL,"hello world","dll",MB_OK);
- return TRUE;
- }
//dll 원격 주입 코드, 나는 수동으로 하나의 프로세스의pid를 입력한 것이고, 사실은 스냅샷 방식으로 하나의 프로세스를 고정시켜 주입할 수도 있다
- #include
-
-
- int main ()
- {
- DWORD pid = 2324;
- LPVOID pAddress = 0;
- char *dllpath = "C:\\Documents and Settings\\All Users\\ \\dll\\Debug\\dll.dll";
- int dwSize = lstrlen(dllpath) + 1;
- DWORD write = 0;
- BOOL bRet = FALSE;
- HANDLE hThread = 0;
- DWORD dwthread = 0;
-
- PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"LoadLibraryA");
-
- HANDLE hPid = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
-
- if ( NULL == hPid )
- {
- CloseHandle(hPid);
- }
-
- pAddress = VirtualAllocEx( hPid,0,0x1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
-
- if ( NULL == pAddress)
- {
- VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);
- CloseHandle(hPid);
- }
-
- bRet = WriteProcessMemory(hPid,pAddress,dllpath,dwSize,&write);
-
- if ( FALSE == bRet )
- {
- VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);
- CloseHandle(hPid);
- }
-
- hThread = CreateRemoteThread(hPid,NULL,0,pfnThreadRtn,pAddress,0,&dwthread);
-
- if ( NULL == hThread)
- {
- VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);
- CloseHandle(hPid);
- }
-
- return 0;
- }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
양식 제출 후 제출 버튼 비활성화텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.