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

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

  1. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    по адресу, записанному в SYSENTER_EIP_MSR...
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Если вкратце, то любой процес во время своей жизни успевает побывать и в user и в kernel mode.
    Точнее даже не процес, а его треды.

    P.S.
    Чувствуется, у автора некая каша в голове.
    Думаю, слова "учите матчасть", здесь будут очень уместны.
     
  3. skyproc

    skyproc New Member

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Для любого KiUserApcDispatcher().
     
  5. skyproc

    skyproc New Member

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

    Я добавил её в драйвер но последний отказывается запускаться...
    В чем дело.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Что те нужно, не пойму.
    Чтобы запустить поток ядро ставит апк в очередь потока, это первое событие в очереди. В зависимости от того, является ли поток системным или нет, задаётся определённый адрес хэндлера, который выполнит поток в начале работы, это PspSystemThreadStartup() либо PspUserThreadStartup(). Далее после запуска потока вызывается одна из двух указанных процедур, если поток пользовательский то ставится в очередь потока апк, Eip для него загружается из KeUserApcDispatcher, а там указатель на KiUserApcDispatcher(при запуске ядра определяетсо), отсюда начнёт исполнятсо пользовательский поток.
    Походу тебе есчо рано дрова делоть.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Кстати, понятным языком Грит всё расписал, вторая стотья в списке на васме, нужно носом ткнуть http://wasm.ru/article.php?article=scheduler
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я мог бы обидеться на такое отношение, но на дураков обычно не обижаются.
    Проблема в том, что у процесса нет уровней привилегий. Даже у потока нет. Привилегии есть у дескриптора в таблице GDT/IDT/LDT, привилегии есть у селектора. Уровнем привилегий текущего выполняемого кода обычно называют уровень привилегий в текущем значении селектора CS кода. Проблема в том, что у каждого потока значение селектора CS постоянно меняется (почти у каждого, есть потоки, которые никогда не переходят в режим юзера), но у процесса в целом много потоков и значение CS которого из них брать за уровень привилегий процесса - вот в чем вопрос?
    Проблема номер два. Оказывается, если поток не находится в состоянии Running, то в стеке сохранён его TrapFrame, где хранится значение CS откуда был вызов, а текущее значение CS обычно равно селектору кода ядра. Которое из них брать - тоже не понятно.
    Отсюда делаем логичный вывод, что твой первый вопрос и все последующие уточнения не имеют смысла
     
  9. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Great ну извени если обидел, задачи такой не ставил...

    Что мне нужно я сформулировал кажется чётко.
    Есть драйвер корторый должен модифицировать главный тред известного процесса

    А если получить структуру CONTEXT
    Там ятак понимаю eip нужного треда?
    Ну а дальше вручную модифицировать...
     
  10. Clerk

    Clerk Забанен

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нифига не четко

    Аххх.. адрес процесса это по-твоему EIP главного потока? так бы сразу и сказал

    на дураков не обижаются
     
  12. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Да уж, четко. Несколько человек два дня пытаются понять чего тебе надо.

    Любой процесс - это диапазон адресов от нуля до 0xFFFFFFFF (в 32 битной системе)
    Тебе уже сказали, что из драйвера можно приаттачиться к конкретному процессу с помощью KeStackAttachProcess.
    Приаттачился ? Вот и меняй что тебе вздумается.

    P.S
    BSOD тебе в руки и барабан на шею :)
     
  13. skyproc

    skyproc New Member

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    опять разберемся с терминологией.
    что значит 2программа не работает" по-твоему?
    Windows позволяет вешать кучу каллбеков на различные события в системе. Это полностью заменяет потребность, которая растет еще со времен ДОСа с TSR программами.
    для чего тебе это нужно?
     
  15. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Я модифицировал код проги №1 драйвером так что в заданной точке последней стаит jmp на код программы №2, прога №2 совершает нужные манипуляции и возвращает управление проге №1 как не вчем не бывало.

    Но на практике, к моменту перехода по jmp, кода проги №2 в памяти уже нет...
    Вероятно он был выгружен в фай подкачки.
    Или я опять ошибаюсь.

    Есле передать управление драйверу из проги №1 возникает исключение, вероятно из-за уровня привелегий проги №1 (ring 3).

    Возможно мою идею можно реализовать несколько иначе...
     
  16. wasm_test

    wasm_test wasm test user

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

    в чем твоя идея то? ты описал свои кривые реализации, а идею - нет
     
  17. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    м.б. это инжект из драйвера?
     
  18. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Что есть инжект?
     
  19. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Опять непонятно. Прога 1 и прога 2 это разные процессы?
    Невозможно сделать jmp из одного процесса в другой. Даже теоретически.

    P.S.
    Прислушайся к советам умных людей, и, в конце концов, внятно сформулируй что тебе надо сделать.
     
  20. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Partner
    Можно. Заюзать гейт, через который поток сменит кольцо а далее думою проблем не будет, в простейшем случае задействовать второй поток, который выполнит переход во второй процесс.