Перехват системного сообщения Windows

Тема в разделе "WASM.BEGINNERS", создана пользователем altlogic, 29 июн 2007.

  1. altlogic

    altlogic New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2007
    Сообщения:
    9
    Благодарю за то, что не оставили пост без внимания!

    Необходимо заменить стандартное сообщение Windows XP
    "Не удаётся удалить имя_файла. Объект используется..."
    на своё (само сообщение уже сформировано).

    Теории по хукам в интернете много, а вот кода я нигде не нашёл. Мне нужен код на Си для реализации подобной функции. Думаю подобные перехваты делали многие.

    Заранее благодарю за ответ!
     
  2. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    код очень простой: 1qaz
     
  3. axe_roma

    axe_roma New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2004
    Сообщения:
    93
    Адрес:
    Russia
    Может инжект в процессы с подменной MessageBox на свою с проверкой на нужный текст! Или поиск по окнам но это заметно будет!
     
  4. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    простой хук мессажбокса
    проверяешь текст - если строка совпала - подменяешь строку, и вызываешь оригинал
    если не совпала - вызываешь оригинал без подмены.
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    проще пропатчить текст мессаги.
     
  6. altlogic

    altlogic New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2007
    Сообщения:
    9
    Буду искать исходники на
    :)

    n0name
    Это тот же вариант в смысле, с подменой текста?

    Вопрос немного не по теме: а как можно узнать полное имя неудаляемого файла? Windows же выдаёт только его короткое имя. Это тоже наверное как-то можно отловить?
     
  7. n0name

    n0name New Member

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

    altlogic New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2007
    Сообщения:
    9
    Предложение интересное, но мне нужно подменять сообщение динамически. Задача состоит в том, чтобы показать имя процесса занявшего файл, его я с горем пополам получил:)
     
  9. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    ЭТА мессага формируется динамически, поэтому пропатчить ее будет не проще.
    я конечно могу ошибаться, может я не знаю простых способов патча динамически формируемых мессаг?
     
  10. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    в таком случае, мне кажется нужно хукать то, что вызывает мессажбокс, там должен быть хендл "неудаляемого" файла;
    а уж что вызывает этот мессажбокс я не знаю, ищи сам, или может ктото подскажет.
     
  11. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    altlogic
    Это сообщение выдает EXPLORER.EXE, стало быть надо хукать DeleteFile (или нативные аналоги) и если DeleteFile возвращает неудачу, то далее вспает буй MessageBox, ну и проверка по соответсвующим параметрам. Чтобы хукать прочитай про Detours в гугли или здесь в FAQ'е.
     
  12. altlogic

    altlogic New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2007
    Сообщения:
    9
    Благодарю всех участвующих в обсуждении за помощь.

    я думаю в мессаджбокс хэндл файла уже не передаётся.

    Я так понял нужно перехватывать функцию DeleteFile, вызываемую Exporer'ом. Перехват должен состоять в определении возможности удаления файла. И если его(вообще какой-либо файл) нельзя удалить, то тогда нужно вешать хук на мессаджбокс. Я правильно понял задачу?
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Практически да. Но всё же лучше посмотреть сорцы проводника и ориентироваться на конкретные связи, а не на абстрактную прикидку.
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Да? А мне кажется что она хранится в виде "File %s ...".
     
  15. someone

    someone New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    51
    ну естественно, просто не получится ее так просто подменить, чтобы она выводила еще чтонибудь.
    по крайней мере мне так кажется.
    а то что я имел ввиду динамически - это то что добавляется в нее имя файла, а затем надо добавить имя процесса.
    при изначальной постановке задачи то что ты предлагаешь действительно подходило.
    я просто прочитал сразу все, и не обратил внимание что ты выложил этот пост до уточнения задачи.

    возможен конечно вариант патчить эту строку, а затем патчить процедурку, которая формирует из нее сообщение именно это я имел ввиду здесь
    и даже в изначальной задаче необходимо или уравнять строку по размеру старой или пересобирать весь ПЕ-файл.
     
  16. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    IceStudent
    Гыг, если бы все исходные коды были доступны. IDA'у Топикстартеру в руки.

    someone
    Патчить файлы винды - это дико. Явно имеется ввиду падчинг в памяти - ну т.е. ищем в АП чужого процесса нужную строку предварительно найдя ее в IDA. Хотя способ не блещет универсальностью, хотя бы потому что в разноязыковых версиях будут разные строки. Кароч в топку такой метод. Хуки рулят.
     
  17. altlogic

    altlogic New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2007
    Сообщения:
    9
    Я с этим согласен. Но к сожалению тему дальше сейчас развивать не могу, так как время поджало совсем, и с преподом сошлись на том, что с меня хватит и консольного приложения определения процесса занявшего файл.

    Тем не менее я очень благодарен axe_roma'y, someone'y, n0name'y, Mental_Mirror'y и IceStudent'y за принятие участия в обсуждени данного вопроса. Возможно в следующем семестре этот вопрос будет поднят снова.