Перехват запуска .exe

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by [stranger], 15 Oct 2010.

  1. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    Доброго всем времени суток!

    Задача состоит в перехвате запуска екзешников. Вариант с реестром(HCR\exefile\shell\open\command) по непонятным причинам не работает, хотя сама перехватывалка имеет расширение .com
    Какие будут варианты?
     
  2. 090808

    090808 Member

    Joined:
    15 Mar 2009
    Messages:
    171
    Likes Received:
    46
    Reputations:
    10
    Держать твой софт в памяти, и если софт находит этот exe который тебе нужно он его просто убивает.
     
  3. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    не вариант!
    перехватывать необходимо ДО инициализации, а в твоем случае это невозможно..
    и есть риск падения, что не очень хорошо.
     
  4. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Сплайсить CreateProcess
     
  5. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    вариант хорош, но:
     
  6. crypt0n

    crypt0n Member

    Joined:
    20 Feb 2010
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    Устанавливаем нотфикатор PsSetCreateProcessNotifyRoutine, в калбеке вызываем PsLookupProcessByProcessId и передаем ид процессса, если имя процесса нам не нравится, то ZwOpenProcess->ZwTerminateProcess->ZwClose
     
  7. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    да что ж такое! резидентный способ не подходит!
     
  8. crypt0n

    crypt0n Member

    Joined:
    20 Feb 2010
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    [stranger], нотификаторы легальные API
     
  9. crypt0n

    crypt0n Member

    Joined:
    20 Feb 2010
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    http://x64.blog.ru/86096739.html
     
  10. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    хм, интересно.. ушел читать
    вариант с длл-кой может и пройти, но хотелось бы все-таки отбивать приложение еще до того как пойдет процесс инициализации..
     
  11. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Перехватывай CreateProcess с таким условием: если имя запускаемого файла равняется имени нужного тебе exe, то просто выходи из функции (заканчивай ее выполнение) иначе вызывай истинную CreateProcess со всеми входящими параметрами.

    Нужный тебе exe не запуститься никак.
     
  12. crypt0n

    crypt0n Member

    Joined:
    20 Feb 2010
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    забудьте про перехват CreateProcess, слишком палевно, используйте нотификаторы
     
  13. crypt0n

    crypt0n Member

    Joined:
    20 Feb 2010
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    если это поможет:
    запуск процесса в Windows NT:
    1) Открытие исполняемого файла.
    2) Создание секции (ZwCreateSection).
    3) Создание обьекта процесса (ZwCreateProcess или ZwCreateProcessEx в Windows XP).
    4) Создание окружения процесса (RtlCreateProcessParameters).
    5) Создание главной нити процесса (ZwCreateThread).
    6) Информирование сервера подсистемы о создании нового процесса (CsrClientCallServer).
    7) Запуск главной нити нового процесса (ZwResumeThread).
     
    2 people like this.
  14. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    спасибо, перехватываю ZwCreateThread
    не все процессы проходят через CreateProcess, а ZwCreateThread вызывается в любом случае, так что это более универсальный способ!

    Всем спасибо, вопрос исчерпан!
     
    #14 [stranger], 16 Oct 2010
    Last edited: 24 Oct 2010