ايران ويج

نسخه‌ی کامل: سوال در مورد Process Injection
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام به همه دوستان .
راستش من مي خواستم پروسس اينجكشن ياد بگيرم .
يه سري تاپيك ها رو ديدم ولي جواب گو نبودن.

من وقتي تو سورسايه اينجكشن نگاه ميكنم
اكثريت دو تا كار ميكنن :
1- يه تايپ دارن كه توش يه flag هست كه به اون يه مقداري ميدن .
2 - يه متغير يا تايپ ساده

بعد براي هر كدوم از اينا با VirtualAllocEx يه فضا اختصاص ميدن و بعد با WriteProcessMemory اين ها رو تو پروسه تزريق مي كنن و بعد با تابع Sendmessage يه مسيجي ( كه نمي دونم چيه رو ) به پروسه ارسال ميكنن و اگه قراره چيزي از پروسه دريافت كنن با ReadProcessMemory اون تايپ دوم ( در بالا با شماره ي 2 ذكر شده ) رو دريافت مي كنن .

حالا سواله من اينه كه اولا ساختار اين تايپ ها چين و ثانيا اين ميسيجي كه به پروسه ارسال ميشه چه كاري انجام ميده ؟؟

اگرم كسي ميدونه چه جوري با اينجكشن اطلاعات متغير هاي يك پروسه رو استخراج كرد لطفا توضيح بده .

مرسي كه توجه كردين و جوابمو ميدين :wink:
ببين اين كد به دردت مي خوره يا نه

کد:
#pragma comment(lib,"Shlwapi.lib")
#pragma comment(lib,"ADVAPI32.LIB")

#include <stdio.h>
#include <windows.h>
#include <Shlwapi.h>
#include <tlhelp32.h>

#define INJECT_EXE  "explorer.exe"

typedef struct _RPar
        {
        DWORD dwDeleteFile;
        DWORD dwSleep;
        char Filename[1024];
        } RPar;

DWORD __stdcall ThreadProc(RPar *Para)
      {
      FARPROC PDeleteFile = (FARPROC)Para->dwDeleteFile;
      FARPROC PSleep = (FARPROC)Para->dwSleep;

      while(PDeleteFile(Para->Filename) == 0) {PSleep(1000);}
      return 0;
      }

int _stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nCmdShow)
    {
    DWORD dwThreadId,pID=0,dwThreadSize=2048;
    void *pRemoteThread;
    char ExeFile[1024];
    HANDLE hProcess,hSnap;
    HINSTANCE hKernel;
    RPar my_RPar,*pmy_RPar;

    PROCESSENTRY32 pe32 = {0};

    if( (hSnap =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) == INVALID_HANDLE_VALUE )
        return 3;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    Process32First(hSnap, &pe32);
    do {
      if ( StrCmpNI(INJECT_EXE,pe32.szExeFile,strlen(INJECT_EXE)) == 0)
          {
          pID=pe32.th32ProcessID;
          break;
          }
      } while (Process32Next(hSnap,&pe32));

    if ( hSnap != INVALID_HANDLE_VALUE )
    CloseHandle(hSnap);
    hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pID);
    pRemoteThread = VirtualAllocEx(hProcess, 0, dwThreadSize, MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);

    WriteProcessMemory(hProcess, pRemoteThread, &ThreadProc, dwThreadSize,0);


    ZeroMemory(&my_RPar,sizeof(RPar));
    hKernel = LoadLibrary( "kernel32.dll");
    my_RPar.dwDeleteFile = (DWORD)GetProcAddress(hKernel, "DeleteFileA");
    my_RPar.dwSleep = (DWORD)GetProcAddress(hKernel, "Sleep");
    GetModuleFileName(NULL,ExeFile,1024);
    strcpy(my_RPar.Filename, ExeFile);
    
    pmy_RPar =(RPar *)VirtualAllocEx (hProcess ,0,sizeof(RPar),MEM_COMMIT,PAGE_READWRITE);
    WriteProcessMemory(hProcess ,pmy_RPar,&my_RPar,sizeof my_RPar,0);
    
    CreateRemoteThread(hProcess ,0,0,(DWORD (__stdcall *)(void *))pRemoteThread ,pmy_RPar,0,&dwThreadId);
    
    FreeLibrary(hKernel);
    CloseHandle(hProcess);
    return 0;
    }