| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > NtCreateFile-и комбинация флагов |
| Автор: Coocky 23.7.2007, 10:41 | ||||
| Привет! Есть такая ситуация. Нужно отловить комбинацию флагов,когда файл открывается на запись. Никак не получается. Для функции
не работает,к примеру в Фаре по нажатию F4 такой код
Может кто подскажет правильные флаги,комбинацию которых надо проверить, что б узнать, что файл может открываться для записи Спасибо |
| Автор: dumb 23.7.2007, 11:07 |
файл открывается "на запись" при сохранении, а не при открытии. GENERIC_WRITE и GENERIC_ALL - комбинации флагов, а тебе нужно ловить какой-нибудь FILE_WRITE_DATA. |
| Автор: Coocky 23.7.2007, 11:53 | ||
Не попадаю ни в один блок при отладке. То же самое, к примеру, и с блокнотом ,при сохранении. uCreateDisposition приходит с флагом FILE_OPEN Ну и что делать? |
| Автор: dumb 23.7.2007, 13:00 |
| ты б хоть привел значение AccessMask |
| Автор: W4FhLF 23.7.2007, 13:02 |
| Coocky, для начала покажи ты получаешь uCreateDisposition и AccessMask. |
| Автор: W4FhLF 23.7.2007, 14:25 | ||
Код?
Т.е. один вызов NtCreateFile и разные значения AccessMask у тебя и в FileSpy? |
| Автор: Coocky 23.7.2007, 14:35 | ||
Да ну перестань. Сейчас возьму и всю либу брошу сюда Там с перехватом все ок. Все флаги нормальные.
Похоже, что да. |
| Автор: W4FhLF 23.7.2007, 15:16 |
Ну давай тогда спишем всё на FileSpy, ибо из двух программ одна работает не верно, но т.к. ты уверен, что твоя работает верно, стало быть Far Manager просто нагло обманывает FileSpy, а сам на самом деле юзает порты IO для записи в файл. |
| Автор: Coocky 23.7.2007, 15:24 | ||||
Ну так а что-обвинить Detours ? Что тебе -сюда код перехвата выложить? Ну лови,найди ошибку
Замечу, что все работает во многих приложениях нормально.И ВСЕ совпадает, кроме маски доступа. Ты просил код? Вот тебе код |
| Автор: W4FhLF 23.7.2007, 16:09 |
Встречал я такого зверя, не помню правда, толи это был Trojan.Downloader толи Bot.DDOS/Socks. Я надеюсь не ты автор? Ага, благодарю за одолжение Собственно, я вообще не знаю чего тут репу чесать, у тебя AccessMask_i = 0x40100080, а FILE_WRITE_DATA = 0x0002. С чего условие выполниться должно? Я б на твоём месте подключился к FAR'у, в который уже внедрена DLL, отладчиком и поставил бряк на CreateFile и протрейсил бы всё это дело внимательно анализирую параметры, ибо это гадание на кофейной гуще ни к чему не приведёт. |
| Автор: dumb 24.7.2007, 02:11 | ||||
| прошу пардона за небольшой увод в сторону. GENERIC_xxx - это отдельные флаги, которые "превращаются"(где-то там "внутрях") в комбинации флагов согласно типам объектов. посему проверять надо как-то так:
GENERIC_WRITE | SYNCHRONIZE | FILE_READ_ATTRIBUTES. GENERIC_WRITE вроде как содержит SYNCHRONIZE, так что зачем он тут -
|
| Автор: Coocky 24.7.2007, 09:03 | ||
| dumb, хм.. Мне понравилась твоя мысль. Только не могу за нее толком зацепится Вот что я нашел в описании winnt.h
Хрен его знает,как это мне поможет |
| Автор: Coocky 24.7.2007, 09:34 | ||
dumb, ничего не понимаю, но вот так
работает Ладно,лови плюс в репу,незнаю чем помог,но на мысль натолкнул Дальше постараюсь копать сам. W4FhLF, не.Я не пишу трояны.Скорее наоборот-антитроянские программы.Хотя раньше просто интерфейсы для них, теперь-не повезло.Само ядро. |
| Автор: dumb 24.7.2007, 13:47 |
| http://msdn2.microsoft.com/en-us/library/aa374902.aspx более правильную проверку я уже изобразил. а вот одолжений мне не нужно делать |
| Автор: W4FhLF 24.7.2007, 14:40 | ||
Нет, это был обычный ддос-бот, с жалкими зачатками руткита(прятал ключи реестра, свой файл и скрывал себя из диспетчера задач обычным перехватом по средствам сплайсинга). Достал я его вроде из эксплойта, ссылка на который пришла спамом.
Очень интересно. И отчего, по-твоему, должен защитить перехват в usermode? |
| Автор: Coocky 24.7.2007, 15:12 | ||||||
А никто и не делал Просто благодаря твоей мысли-я решил свою проблему Добавлено @ 15:14
Ну во-первых я уже написал-я пишу ИНТЕРФЕЙСЫ под антируткиты А вот сейчас нужна маленькая утилита для защиты от кривых рук Я ж не говорил, что сейчас пишу защиту от троянов, а вот интерфейсы для работы с драйверами писал Но это уже оффтоп Добавлено через 10 минут и 23 секунды dumb, то что ты мне дал ссылку-я не про то. Я про вот что GENERIC_WRITE это комбинация FILE_APPEND_DATA FILE_WRITE_ATTRIBUTES FILE_WRITE_DATA FILE_WRITE_EA STANDARD_RIGHTS_WRITE SYNCHRONIZE тогда почему не работало
ведь
|
| Автор: W4FhLF 24.7.2007, 15:29 |
А под какие именно, если не секрет? |
| Автор: Coocky 24.7.2007, 15:31 |
| В приват отвечу |
| Автор: dumb 24.7.2007, 15:58 | ||||
эти GENERIC'и - старшие четыре бита в маске доступа. посмотри на схематичное изображение, которое ты приводил в одном из своих постов. ты даешь GENERIC_WRITE для объекта файла - он(этот флаг) в ядре "раскрывается" в специфичные для данного типа объекта(файл) флаги + флаги доступа к самому объекту - их список в твоем посте. схематичный код того, что творится в ядре:
для другого типа объекта(например, папка или ком-порт) этот GENERIC_WRITE "раскроется" в иной набор флагов. но какой-нибудь "извращенец" может вместо указания какого-либо GENERIC, указать точный набор флагов, специфичных для объекта, с которым он работает. поэтому ловить только GENERIC_WRITE - тоже не совсем правильно. так что бери тот if, что я приводил. ps. блин, что-то у меня объяснялка сломалась от недосыпа. |
| Автор: Coocky 24.7.2007, 16:09 | ||||
Так что делать? Понимаешь-тот набор заточен так, а представь будет два флага вместо трех-ведь тогда не раскроется? |
| Автор: dumb 24.7.2007, 16:37 | ||||
повторюсь:
|
| Автор: Coocky 24.7.2007, 17:07 | ||||
У меня НЕТ ПРОБЛЕМ с этим Еще раз НЕ РАБОТАЕТ!
Добавлено через 3 минуты и 43 секунды Вот вот Я тебя не могу понять, что ты мне хочешь донести . Хотя проблема давно решена. Просто мы наверное не можем понять друг друга. |
| Автор: dumb 24.7.2007, 17:48 | ||
!!! я не знаю, как еще можно это объяснить... |
| Автор: Coocky 25.7.2007, 08:54 |
dumb, ты издеваешься? Бл.... Все..Тема закрыта. |