Как получить адрес процесса

Тема в разделе "WASM.BEGINNERS", создана пользователем skyproc, 11 дек 2008.

  1. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Есть не документированная ф-ция ZwQuerySystemInformation
    Как получить адрес системного процесса я знаю...

    Код (Text):
    1. push    offset cb
    2. push    cb
    3. push    p
    4. push    SystemModuleInformation
    5. call    ZwQuerySystemInformation
    Но как получить адрес обычного пользовательского процесса?
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Непонятно, что имеется ввиду. Entry point ?
    Процесс не имеет адреса.
    Можно получить адрес конкретного модуля (GetModuleHandle(ModuleName)).
     
  3. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Хочу модифицировать из ядра код пользовательского процесса.
    Как это реализовать?
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    KeStackAttachProcess
     
  5. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Можно чуть подробней?
    С описанием параметров и структур...
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    http://msdn.microsoft.com/en-us/library/ms796307.aspx
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Адрес процесса это указатель на EPROCESS.
    Открываем процесс по PID, делоем слепок и находим поле описывающее хэндл - SystemHandleInformation.Object.
    Но это в юзермоде, в режиме ядра PsLookupProcessByProcessId().
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    процессы этим критерием не отличаются и нет разницы между пользовательскими и системными. что ты под этим понимаешь?

    это адрес объекта "процесс". всетаки интересует что именно надо ТС.

    этим ты не получишь точку входа главного треда, если чувак это имеет в виду.

    ТС, что ты понимаешь под
    1) адресом процесса?
    2) системным и пользовательским процессами
     
  9. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Житие мое, млин...
    Устанавливать перехват ф-ций ядерных процессов я умею, при помощи ZwQuerySystemInformation я беру список последних ну и т.д.

    Мне же нужно перехватить управление user процесса, изменить регистры и переменные и отдать обратно.

    Через ZwQuerySystemInformationроде кажется вот так...

    Код (Text):
    1. push    offset cb
    2. push    cb
    3. push    p
    4. push    SystemProcessesAndThreadsInformation
    5. call    ZwQuerySystemInformation
    6. mov esi,p
    7.  
    8. assume  esi:ptr SYSTEM_INFORMATION_CLASS
    9. lea     eax,[esi].ImageName
    10. assume  esi:nothing
    Но в буфере абра кадабра...
    Есле в место SystemProcessesAndThreadsInformation написать SystemModuleInformation, то получу список ядерных модулей...
    Что делать?
    :dntknw:
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Чтоб вас всех подбросило и разорвало! =/ (Ц)
    Что такое по-твоему ядерные процессы и обычные?
     
  11. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Что не понятно ядерный(kernel) - нулевой уровень привелегий.
    Пользовательский(user) - уровень привелегий 3...
    ...
     
  12. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    skyproc
    Так, еще раз вопрос, что же ты все таки имеешь ввиду под "адресом процесса"?
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    skyproc
    Не понятно что ты имеешь в виду под "уровень привилегий процесса" ?
    У процесса нет уровня привилегий.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Думою стоит вначале спросить что есть процесс.
     
  15. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Для тех кто в танке...
    :)
    Аппаратно CPU поддерживает 0,1,2,3 уровни привелегий.
    В Windows XP реализовано только 0,3
    т.е. kernel,user соответственно...
    Разница к примеру в том что user процесс не может работать с портами ввода вывода, если конечно ему это не разрешить опять же через kernel mode.

    Так вот оказывается увожаемый Great у каждого процесса есть 0 или 3 уровень привилегий.

    Что такое процесс я отвечу если вы ответите мне на вопрос что такое растояние и длина...
    :)

    Может всётаки есть коментарии по теме???
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ыыы.. :lol: ))))))
     
  17. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    ой, что ща будет...
    *возхохотамши из-под лавки xD
     
  18. VENOM4X

    VENOM4X New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    29
    Уважаемый skyproc, нет ядерных и пользовательских процессов! Это код может выполнятся с разным уровнем привелегий.
    Процесс содержит потоки (threads). А вот как-раз поток переключается в kernel mode во время вызова API'шек, а потом возвращаяется обратно.

    Теперь прочитай ниже написанное:
    All native API calls from User Mode have a body that simply loads an index into EAX, executes SystemCallStub, and returns.

    SystemCallStub saves a pointer to the top of the User Mode stack into EDX and executes a SYSENTER instruction

    SYSENTER disables interrupts, switches the thread into Kernel Mode and executes the instruction located in the SYSENTER_EIP_MSR (which on XP SP1 is KiFastCallEntry)

    KiFastCallEntry builds a trap frame so it knows where to go when returning back to User Mode, enables interrupts, and jumps into KiSystemService

    KiSystemService, amongst doing other things, copies the parameters from the User stack (pointed to by EDX) and takes the value previously stored in EAX and executes the function located at KiServiceTable[EAX]

    (полностью прочитать можешь здесь http://www.osronline.com/article.cfm?article=257 , однако их сервак на момент поста лежит, поэтому вот эта страница в кэше гугла: http://216.239.59.132/search?q=cache%3Ahttp%3A%2F%2Fosronline.com%2Farticle.cfm%3Farticle%3D257)
     
  19. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Английсекий я знаю чуть лучше немецкого...
    А немецкий вообще не знаю.
     
  20. VENOM4X

    VENOM4X New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2008
    Сообщения:
    29
    Учи англиский.
    SYSENTER disables interrupts, switches the thread into Kernel Mode and executes the instruction located in the SYSENTER_EIP_MSR (which on XP SP1 is KiFastCallEntry) = SYSENTER запрещает прерывания, переключает поток в режим ядра и выполняет инструкцию, находящуюся но адресу SYSENTER_EIP_MSR (по которому в XP SP1 находится KiFastCallEntry).

    Может расскажешь, что ты понимаешь под процессом? Т.к. похоже, что это предстваление эм... неверно и это и является основным камнем преткновения.