전체 DLL 도입
1, OpenProcess는 프로세스를 실행할 핸들을 가져옵니다.
2, VirtualAllocEx는 원격 프로세스에서 strlen(dllname)+1 길이의 메모리를 개척한다.
3, WriteProcessMemory는 두 번째 단계에서 개척한 메모리에 Dll의 이름을 씁니다.
4, CreateRemoteThread는 LoadLibraryA를 스레드 함수로 하고 Dll의 이름을 매개 변수로 하여 새 스레드를 만듭니다.
5, CloseHandle 스레드 핸들 닫기
Dll을 마운트 해제하려면 다음과 같이 하십시오.
1,CreateRemoteThread는 GetModuleHandle을 원격 프로세스에 주입하고 매개 변수는 주입된 Dll 이름입니다
2, GetExitCodeThread는 스레드가 종료된 종료 코드를 Dll 모듈의 핸들 값으로 사용합니다.
3, CloseHandle 스레드 핸들 닫기
3, CreateRemoteThread는 FreeLibraryA를 원격 프로세스에 주입하고 매개 변수는 두 번째 단계에서 얻은 핸들 값입니다.
4, WaitForSingleObject 객체 핸들이 반환될 때까지 대기
5, CloseHandle은 스레드와 프로세스 핸들을 닫습니다.
- //Code By Pnig0s1992
- //Date:2012,3,13
- #include <stdio.h>
- #include <Windows.h>
- #include <TlHelp32.h>
-
-
- DWORD getProcessHandle(LPCTSTR lpProcessName)// PID
- {
- DWORD dwRet = 0;
- HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- if(hSnapShot == INVALID_HANDLE_VALUE)
- {
- printf("
%d",GetLastError());
- return dwRet;
- }
-
- PROCESSENTRY32 pe32;//
- pe32.dwSize = sizeof(PROCESSENTRY32);//
- Process32First(hSnapShot,&pe32);//
- do
- {
- if(!lstrcmp(pe32.szExeFile,lpProcessName))// PID
- {
- dwRet = pe32.th32ProcessID;
- break;
- }
- } while (Process32Next(hSnapShot,&pe32));
- CloseHandle(hSnapShot);
- return dwRet;//
- }
-
- INT main(INT argc,CHAR * argv[])
- {
- DWORD dwPid = getProcessHandle((LPCTSTR)argv[1]);
- LPCSTR lpDllName = "EvilDll.dll";
- HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwPid);
- if(hProcess == NULL)
- {
- printf("
%d",GetLastError());
- return -1;
- }
- DWORD dwSize = strlen(lpDllName)+1;
- DWORD dwHasWrite;
- LPVOID lpRemoteBuf = VirtualAllocEx(hProcess,NULL,dwSize,MEM_COMMIT,PAGE_READWRITE);
- if(WriteProcessMemory(hProcess,lpRemoteBuf,lpDllName,dwSize,&dwHasWrite))
- {
- if(dwHasWrite != dwSize)
- {
- VirtualFreeEx(hProcess,lpRemoteBuf,dwSize,MEM_COMMIT);
- CloseHandle(hProcess);
- return -1;
- }
-
- }else
- {
- printf("
%d。",GetLastError());
- CloseHandle(hProcess);
- return -1;
- }
-
- DWORD dwNewThreadId;
- LPVOID lpLoadDll = LoadLibraryA;
- HANDLE hNewRemoteThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)lpLoadDll,lpRemoteBuf,0,&dwNewThreadId);
- if(hNewRemoteThread == NULL)
- {
- printf("
%d",GetLastError());
- CloseHandle(hProcess);
- return -1;
- }
-
- WaitForSingleObject(hNewRemoteThread,INFINITE);
- CloseHandle(hNewRemoteThread);
-
- // Dll
- DWORD dwHandle,dwID;
- LPVOID pFunc = GetModuleHandleA;// Dll
- HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pFunc,lpRemoteBuf,0,&dwID);
- WaitForSingleObject(hThread,INFINITE);
- GetExitCodeThread(hThread,&dwHandle);// Dll
- CloseHandle(hThread);
- pFunc = FreeLibrary;
- hThread = CreateRemoteThread(hThread,NULL,0,(LPTHREAD_START_ROUTINE)pFunc,(LPVOID)dwHandle,0,&dwID); // FreeLibraryA Dll
- WaitForSingleObject(hThread,INFINITE);
- CloseHandle(hThread);
- CloseHandle(hProcess);
- return 0;
- }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.