Перехват запуска приложений

Тема в разделе "WASM.WIN32", создана пользователем Serzh, 13 ноя 2006.

  1. Serzh

    Serzh New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    20
    n0name Спасибо большое за ссылочку, буду иметь ввиду :)
    Но все-таки, такой подход на практике кем-нибудь применялся? Ужасно не хочется потратить кучу времени на то, что практически невозможно заставить работать в реальных условиях ;) Если бы знал, что люди такое уже делали, получил бы мощный импульс оптимизма :))
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Мной :)
     
  3. Serzh

    Serzh New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    20
    Прямо гора с плеч :) Исходники тогда выпрашивать уже не буду, надо и свой мозг напрягать, для развития :) Но пару вопросов, пожалуй, задам: дизассемблер свой или от Ms Rem'a? Тестили на нескольких версиях Windows? (Win2000 + Service Packs, а потом на WinXP)
    В принципе, было предложено три разных функции для перехвата (ZwResumeThread, ZwCreateFile и метод, предложенный fluderast, реабилитировавший ZwCreateProcess), поэтому думаю, что теоретическая часть разработки завершена... Когда начну писать код, наверное и пойму, что знаю только то, что ничего не знаю :)
    Спасибо еще раз всем за помощь!
     
  4. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Сначала было просто return *((char *) func_start + 1) , работало везде, кроме Win64 :)
    Потом перевел на udis86, соответственно, работает везде.
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Serzh
    Я тоже делал, дизасм свой, работает только на WinXP SP(0-2), Win2k3SP(0-1), хотя для Win2k там переписать одну строчку.
     
  6. Serzh

    Serzh New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    20
    А что за строчку? Этот метод вроде бы на универсальность претендует :)
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    тогда смотри winNT/2k OpenSource начиная от функции CreateProcessW
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    как звучит =)
    Ну хз, у меня под рукой ntdll.dll из Win2k нет.
    Я ищу по маске "mov ecx, 7FFE0300h", или "BA0003FE7F". После этого в eax заноситься номер syscall'a, его я и выдираю.
     
  9. Serzh

    Serzh New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    20
    Мысль понял :)

    P.S. А Windows NT/2K OpenSource- действительно звучит красиво =)
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    но фраза не моя, кто-то из форумчан уже ее применял
     
  11. Guest

    Guest Guest

    Публикаций:
    0
    Вообще лучше из таблицы экспорта адрес функции Zw* найти - это будет ее начало, а потом искать mov eax, "something" от этого адреса.
    P.S. Искать ничего непридется, mov eax, ххх идет первым, но всякое бывает :)
     
  12. TarasCo

    TarasCo New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    106
    fluderast
    SectionHandle вроде как может быть равен нулю
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Можно и так.
    Хм, и как ты думашь что тогда будет? Мне такое тоде приходило в голову, тк SectionHandle OPTIONAL, но так ничего хорошего и не придумал =) А копаться в соцах неохота из-за такого пустяка.
     
  14. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Будет что-то типа никсового fork(). У Неббета в книге была полная реализация
     
  15. vdzz

    vdzz New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    5
    Раз уж речь зашла об этом не подскажите какие функции нужно использовать для:
    1) Определения имени создаваемого файла, зная хэндл файла (из ZwCreateFile)
    2) Определения имени файла процесса, зная хэндл процесса (из ZwCreateProcess)
    Знаю что все это есть в справочникe но у меня пока мало опыта программирования драйверов((
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Как параметр ZwCreateFile принимает структуру OBJECT_ATTRIBUTES, оттуда и бери имя файла.
     
  17. vdzz

    vdzz New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    5
    Да не, я не об этом. Я ничего не перехватываю. Каким-то образом (неважно каким) у меня есть два хэндла- некоторого файла и некоторого процесса. Как мне по этим хэндлам получить имя этого файла и имя исполняемого файла процесса? Короче говоря, мне нужно знать какие функции это делают
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    NtQueryInformationFile с классом информации FileNameInformation.
    NtQueryInformationProcess с классом ProcessBasicInformation.
    Получил адрес PEB, дальше PEB->ProcessParameters->ImageName
     
  19. vdzz

    vdzz New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    5
    Да, это то, что я хотел узнать. Благодарю)
     
  20. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    а PsSetCreateProcessNotifyRoutine + ZwQueryInformationProcess(ProcessImageFileName) не модно уже?