Здраствуйте, уважаемые программисты. Может вопрос покажется глупым, хотя он наверное и есть глупый, но все же... Я никогда не сталкивался с асмой в своей практике, потому как в основном работа связана с разработкой крупных систем. В основе Дельфя + Оракл, С# + Оракл и так далее... То есть работал всегда с "высоким" уровнем. Поэтому отнеситесь с нисхождением, пожалуйста =). Тут возникла задача, скрыть действия по модификации файла. Объясню подробней. Имеем к примеру такую функцию Дельфийную: Код (Text): procedure TForm1.Button2Click(Sender: TObject); var hFile :THandle; begin hFile := CreateFile(PChar('c:\1.txt'), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); CloseHandle(hFile); end; Запуск приложения, запуск FileMonitor`а от Руссиновича. Жмем на кнопку, видим лог: Код (Text): Project1.exe:488 IRP_MJ_CREATE C:\1.txt SUCCESS Options: OpenIf Access: All Project1.exe:488 IRP_MJ_CLEANUP C:\1.txt SUCCESS Project1.exe:488 IRP_MJ_CLOSE C:\1.txt SUCCESS То есть файлмон спокойненько перехватил обращения к файлику 1.txt из нашего приложения. На сколько я понимаю, он отлавливает АПИшные вызовы и пишет лог. Так вот собственно вопрос. Как можно обратиться к файлу и сделать какие-то изменения в нем, минуя АПИ, на асме. То есть работа с файлами на самом низком уровне. Если можно, то ссылку на статьи, учебник и так далее. А если будет код с объяснением, то еще лучше. Потому как вобщем не знаком с этим языком =( Кстати, возникает еще один вопрос. Если файлмон на самом деле ловит только АПИ вызовы, и есть возможность работать с файлом без АПИ, то какой смысл от этого монитора, если можно обойти его. Скорей всего, я ошибаюсь на счет него. По этому вобщем-то и обратился к вам. Нужен советы и мнения специалистов в этой области. Заранее спасибо!
aasakaa API в винде не очень-то минуешь. А работа с файлом на самом низком уровне - руками парсить файловую систему, но доступ к ней получать придётся опять же через CreateFile.
Имхо, можно через Native API. Яркий пример такого приложения - scandisk, запускаемый еще до старта всяких гуев
хм... то есть получается, замнкнутый круг... странновато немножко.... Не совсем представляю, что такое Native API, сейчас почитаю про это, но есть при этом гарантия, что FileMon не отловит обращения к файлу?
Native API перехватить тоже не сложно. Подозреваю, что FileMon это делает. Можно напрямую, через системные вызовы, но сложно, и на разных системах может не работать.
Похоже на правду.... 2 варианта... Или сразу застрелится. Или все-таки покопать глубже, а потом застрелится =) Выбираю второе... Не скажешь, где можно найти информацию именно по про эти системные вызовы?
asd Что ты имеешь ввиду? sysenter? Так файлмон сидит ниже: он перехватывает запросы к драйверу файловой системы. Ниже - только самому лезть в ФС. Хотя ещё ниже - контролёр винта, то бишь, работать непосредственно с винчестером. Но реализовать это — весьма нелегко, если вообще можно (присоседясь к системе).
aasakaa Ты бы в "Inside Windows 2000" заглянул или хотя бы в гости к Руссиновичу на sysinternals.com - тогда бы понял в общих чертах, что такое драйвер фильтра файловой системы и насколько глубоко надо копать, чтобы его обойти. Так что из 2-х вариантов лучше выбрать третий - бросить нафиг эту затею
leo шпасибо, разъяснил. У Руссиновича я был... голова уже позеленела... Трудно попытаться понять за пару дней то, с чем никогда не сталкивался... За совет и книгу спасибо! Пойду менять свежекупленный Кольт на книжку =) Вобщем то понял, что копал в нужном направлении. Но лопатой не обойтись одной. Уважаемые гуру, тогда исходя из всего этого следует, что: дисковую активность очень и очень трудно (читай, невозможно) скрыть от существующих средств мониторинга Системы. Если можно, я задам еще вопрос. Точнее попрошу совет. Вобщем, ситуация такая. Как уже говорил, никогда не сталкивался с защитой софта. Был опыт взлома одной программки, но там свелось все к правке ключей реестра, эт не важно. Какие советы можете дать, чтобы не защитить, но хотя бы отшвырнуть большую часть взломщиков? Прекрасно понимаю, что идеала сделать невозможно. Но все же.... Использовать несколько паралельных и независимых проверок? Засирать реестр фейковымим ключами где попало? Прошу совета. Нужно это для того, чтобы успокоится окончательно и работать в нужном направлении.
Зачем засирать реестр? Ведь существует ещё и Regmon... Поправьте меня, если я не прав: Filemon не имеет в своём составе никакого драйвера. Перехват функций работы с файлами осуществляется не ниже уровня sysenter, т.к. filemon - это user-mode приложение, для которого самый низкий доступный уровень - это уровень "ворот в kernel-mode". Эти "ворота" - sysenter. Поэтому написание простенького драйвера, осуществляющего перехват и фильтрацию обращений к файлу на уровне например sdt полностью исключает мониторинг со стороны filemon'а и подобных ему "высокоуровневых" утилит. Чтобы не выдавать активность приложения, которое пытается модифицировать файл, можно эту активность перенести в драйвер, и из него писать в файл. И никакая user-mode утилита не отследит этого, в т.ч. и filemon.
cresta Вот я как бы об этом и думал по началу. Точнее о таком варианте скрытия активности. Но на многих форумах упорно говорят, что FileMon умеет обходить user-mode и работать на уровне нулевого кольца, ну или на предыдущем уровне. Хотя для меня остается загадкой каким образом это делается. IceStudent Кстати, тож везде говорят, смотри на исходники четвертого файлмона. А гиде они тут? =) Не могу найти =/
IceStudent, точно, не думал, что filemon по-партизански прячет свои драйвера RFILEMSYS и RFILEMVXD... aasakaa В любом случае, чтобы отсечь значительную часть желающих поковыряться, достаточно написать драйверок, и переложить на него запись в файл. Тот же Filemon уже не будет ассоциировать этот файл с твоим приложением: он будет записываться либо в контексте процесса system.exe (если драйвер пишет в файл в DriverEntry), либо в контексте svchost.exe. Это проверено.
cresta хм... Значит есть способ.... Это уже лучше намного!!! Буду работать в этом направлении. Спасибо большое!
aasakaa В NT системах примерно такая лесенка Приложение Win32 \/ --------------------------- Драйвер файловой системы \/ Драйвер устройства HDD \/ Драйвер шины Причем каждый из них может имееть драйвер фильтр причем как сверху так и снизу (да еще - сам драйвер фильтр может иметь собственный драйвер фильтр). FileMon ставит фильтр сверху Драйвера файловой системы. Т.О. без написания собственного драйвера обойти FileMon невозможно, но если написать драйвер фильтр, который уже будет грузиться ниже драйвера фильтра от FileMon, и будет создавать свою символическую ссылку, то мы можем обойти FileMon.
PROFi Спасибо за разъяснение!!!! То есть получается.... работа должна вестись непосредственно с драйвером HDD... нда... задача не из легких для меня.... Как я полагаю, аналогичные проблемы возникнут с обходом RegMon?
С регмон ещё сложнее, т.к. получить непосредственный доступ к кустам реестра трудно, а их структура вообще не документирована.
нда уж.... никуда не скроешься. с одной стороны, довольно приятно осознавать сей факт, с другой... сами понимаете... противоядия хочется....