اطلاعیه

Collapse
No announcement yet.

inject pe

Collapse
X
 
  • Filter
  • زمان
  • Show
Clear All
new posts

  • inject 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;
    }

  • #2
    InjectImage(hProcess,TEXT("C://10.jpg"));

    این به نظرت نباید اینجوری باشه c:\\10.jpg
    Last edited by keylogger; 02-15-2014, 05:22 PM.

    Comment


    • #3
      مشکل از اون نیست . به فرم شما هم تغییر داده بودم ...
      نمیدونم چرا کار نمی کنه؟

      Comment


      • #4
        درود؛

        این کد اصولا درست نیست! آدرس تصویر رو با آرگومان ImageAddress به تابع InjectImage ارسال کردی و بعدش تبدیل به نوع PIMAGE_DOS_HEADER کردی که اصلا امکان نداره!
        به طور خلاصه اینجکت کردن شامل باز کردن تصویر و خوندن آن و بعد اضافه کردن یک section جدید (اگه جا نباشه ) است.
        توی این کد اصلا تصویر خونده نشده!(مثلا با readfile)

        Comment

        Working...
        X