Не работает WriteProcessMemory

Тема в разделе "WASM.BEGINNERS", создана пользователем maxteam, 27 июл 2011.

  1. maxteam

    maxteam New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2011
    Сообщения:
    1
    Здраствуйте...

    Пишу простый инжектор кода в процесс(win32). Использую CreateRemoteThread.

    Внедряю код функции которая должна запустится в новом потоке удаленного процесса. Все вроде норм. но у меня траблы с WriteProcessMemory.

    вот кусок кода си++:

    Код (Text):
    1. int main (void)
    2. {
    3.     DWORD dwThreadId = 0, pID=0;
    4.     void *pRemoteThread = NULL;
    5.     char ExeFile[1024] = {0};
    6.     HANDLE hProcess = NULL, hSnap = NULL;
    7.     HINSTANCE hUser = NULL;
    8.     RPar my_RPar, *pmy_RPar = NULL;
    9.     PROCESSENTRY32 pe32 = {0};
    10.     DWORD dwThreadSize = 2048;
    11.  
    12.     GetPrivilege("SeDebugPrivilege"); //получаю SeDebugPrivilege
    13.  
    14.     hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,FindProcessByName("calc.exe")); //открываю процесс
    15.     if(hProcess == NULL) return FALSE;
    16.    
    17.     cout<<"opened\n";
    18.    
    19.     //выделяю память
    20.     pRemoteThread=VirtualAllocEx(hProcess,0,dwThreadSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
    21.     if(pRemoteThread == NULL) return FALSE;
    22.        
    23.     cout<<"alloc\n";
    24.    
    25.     //и тут облом - хочу писать данные в память
    26.     if(!WriteProcessMemory(hProcess, (LPVOID)pRemoteThread, (LPCVOID)&ThreadProc, dwThreadSize, 0) )
    27.         {cout<<"error:"<<GetLastError()<<endl;system("PAUSE");return FALSE;}
    28.  
    29.     cout<<"wrote code\n";
    30.  
    31.         system("PAUSE");
    32.  
    33.     ....................
    WriteProcessMemory выдает ERROR_ACCESS_DENIED хотя я использую SeDebugPrivilege да и система у меня Win32 SP3

    помогите разобратся...может существует лучшый способ инжекта кода(не dll)

    спасибо
     
  2. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Может использовать VirtualProtect для данного куска памяти. Как-то раз дядя Рихтер в своей книге писал, что код с WriteProcessmemory может крашиться как раз из-за отсутствия этой самой функции.