Process Handle

Тема в разделе "WASM.BEGINNERS", создана пользователем spencer, 22 окт 2006.

  1. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    как бы узнать хэндл процесса по его имени?
    я думал что хэндл возвращает OpenProcess, однако когда я позже пытаюсь передать его в WriteProcessMemory то он говорит что хэндл инвалидный.
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    а c GetLastError'oм согласовался?
     
  3. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    я смотрю через oplly debuger
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Приведи код.
     
  5. _io_lock

    _io_lock Андрей

    Публикаций:
    0
    Регистрация:
    5 окт 2006
    Сообщения:
    14
    Адрес:
    Тверская область
    Если не ошибаюсь, у ms-rem'a в advAPIHook была функция для этого дела. И в какой-то статье, имхо, описано...
     
  6. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    вот мой код для поиска хэндла. Предпологается что в target лежит строка с именем процесса, а результат будет в ps (
    ps PROCESSENTRY32 <>)
    Код (Text):
    1.    
    2. invoke  CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
    3.     mov var1, eax
    4.     mov ps.dwSize, sizeof PROCESSENTRY32
    5.     invoke  Process32First, var1, addr ps
    6. next:  
    7.     invoke  cmpstr, addr ps.szExeFile, addr target
    8.     test    eax, eax
    9.     jne found
    10.     invoke  Process32Next, var1, addr ps
    11.     test    eax, eax
    12.     jne next
    13.     jmp err_not_found
    14. found:
    позже, когда я размышлял почему это не пашет я обратил внимание на то что из структуры PROCESSENTRY32 можно вытянуть лишь ProcessID (th32ProcessID) и что этот айди не есть хэндл.
    Ешё позже у меня все заработало, а баг оказался вообще не в том о чём я писал в топике (я млин невнимательный до ужаса).
    Далее у меня идёт кусок кода для инжектинга кода (загружаюшего длл) и запуска его.

    Код (Text):
    1. invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_VM_READ , 1, ps.th32ProcessID
    2.     mov var1, eax   ; var1 - process handle
    3.     mov ebp, eee
    4.     sub ebp, initproc
    5.     invoke  VirtualAllocEx,eax, 0, ebp,MEM_COMMIT, PAGE_EXECUTE_READWRITE
    6.     xchg    eax, var2   ;var2 - memory address
    7.     mov ecx, initproc
    8.     invoke  WriteProcessMemory,var1,var2, ecx, ebp,0
    9.     xor ebx, ebx
    10.     invoke  CreateRemoteThread,var1, ebx,ebx, var2, ebx, ebx, ebx
    тоесть всё пашет нормально и хэндл от OpenProcess валидный ивсе норльно.
    Но раз уж тема создана, хотел бы спросить, возможно ли как то оптимизировать такой способ поиска хэндла по имени (ну да, его надо дополнить еще открытием процесса, чтоб получать хэндл а не айди) или может есть другие способы.

    P/s
    может обьяснит мне кто чем отличаются хэндл от айди, и зачем нужно каждому процессу два этих уникальных номера.
     
  7. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    айди универсален - он одинаков вне зависимости от процесса, из которого ты его определяешь. А вот хэндлы будут разными, чтобы разные процессы могли открыть один процесс с разными правами.
    PS То же в свое время долго мучался с этим тонким отличием.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Хе. "Тонкое" отличие =)
    PID - уникален. Хендл нет, кроме того хендлу соответствуют права доступа.
     
  9. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    спасибо за обьяснение насчёт PID & HANDLE
    получается в данном случае по другому никак сыграть не получилось бы, только Toolhelp32. Или все же есть еще варианты?
     
  10. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    так в оли в окошке Registers сразу пишется LastErr даже ненада ничего вызывать сразу его видно :)
     
  11. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    я про то и говорил
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    spencer
    Можно, но это один из самых простых способов.