سلام.
از طریق کد زیر Ù…ÛŒ خوام یک عکس به Ùایل pe اینجکت کنم Ú©Ù‡ نمی دونم چرا کار نمی کنه!
برنامه هیچ اروری نمیده و کامپایل میشه ولی کار نمی کنه!
سورس:
از طریق کد زیر Ù…ÛŒ خوام یک عکس به Ùایل pe اینجکت کنم Ú©Ù‡ نمی دونم چرا کار نمی کنه!
برنامه هیچ اروری نمیده و کامپایل میشه ولی کار نمی کنه!
سورس:
کد:
#include "stdafx.h" #include "iostream" #include "windows.h" #pragma comment(lib,"ntdll.lib") #include <tlhelp32.h> using namespace std; PVOID InjectImage(HANDLE hProcess,PVOID ImageAddress); int main() { HANDLE hProcess; PROCESSENTRY32 pe32; hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, 7316 ); if( hProcess == INVALID_HANDLE_VALUE ) { cout<<"erro"; } InjectImage(hProcess,TEXT("C://10.jpg")); return 0; } PVOID InjectImage(HANDLE hProcess,PVOID ImageAddress) { PIMAGE_DOS_HEADER pIDH; PIMAGE_NT_HEADERS pINH; PIMAGE_BASE_RELOCATION pIBR; DWORD i,count; DWORD_PTR delta,OldDelta; PDWORD_PTR p; LPWORD list; PVOID image,mem; pIDH=(PIMAGE_DOS_HEADER)ImageAddress; pINH=(PIMAGE_NT_HEADERS)((LPBYTE)pIDH+pIDH->e_lfanew); if(!(mem=VirtualAllocEx(hProcess,NULL,pINH->OptionalHeader.SizeOfImage,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE))) { return NULL; } image=VirtualAlloc(NULL,pINH->OptionalHeader.SizeOfImage,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); memcpy(image,pIDH,pINH->OptionalHeader.SizeOfImage); pIBR=(PIMAGE_BASE_RELOCATION)((LPBYTE)image+pINH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress); delta=(DWORD_PTR)((LPBYTE)mem-pINH->OptionalHeader.ImageBase); OldDelta=(DWORD_PTR)((LPBYTE)pIDH-pINH->OptionalHeader.ImageBase); while(pIBR->VirtualAddress!=0) { if(pIBR->SizeOfBlock>=sizeof(IMAGE_BASE_RELOCATION)) { count=(pIBR->SizeOfBlock-sizeof(IMAGE_BASE_RELOCATION))/sizeof(WORD); list=(LPWORD)((LPBYTE)pIBR+sizeof(IMAGE_BASE_RELOCATION)); for(i=0;i<count;i++) { if(list[i]>0) { p=(PDWORD_PTR)((LPBYTE)image+(pIBR->VirtualAddress+(0xFFF & (list[i])))); *p-=OldDelta; *p+=delta; } } } pIBR=(PIMAGE_BASE_RELOCATION)((LPBYTE)pIBR+pIBR->SizeOfBlock); } if(!WriteProcessMemory(hProcess,mem,image,pINH->OptionalHeader.SizeOfImage,NULL)) { VirtualFreeEx(hProcess,mem,0,MEM_RELEASE); VirtualFree(image,0,MEM_RELEASE); } VirtualFree(image,0,MEM_RELEASE); return mem; }
Comment