Работа с файлом

Тема в разделе "WASM.BEGINNERS", создана пользователем aasakaa, 24 май 2006.

  1. aasakaa

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9
    Здраствуйте, уважаемые программисты.

    Может вопрос покажется глупым, хотя он наверное и есть глупый, но все же...

    Я никогда не сталкивался с асмой в своей практике, потому как в основном работа связана с разработкой крупных систем. В основе Дельфя + Оракл, С# + Оракл и так далее...

    То есть работал всегда с "высоким" уровнем. Поэтому отнеситесь с нисхождением, пожалуйста =).

    Тут возникла задача, скрыть действия по модификации файла.

    Объясню подробней.

    Имеем к примеру такую функцию Дельфийную:
    Код (Text):
    1.  
    2. procedure TForm1.Button2Click(Sender: TObject);
    3. var
    4.   hFile :THandle;
    5. begin
    6.   hFile := CreateFile(PChar('c:\1.txt'),
    7.            GENERIC_READ or GENERIC_WRITE,
    8.            FILE_SHARE_READ or FILE_SHARE_WRITE,
    9.            nil,
    10.            OPEN_ALWAYS,
    11.            FILE_ATTRIBUTE_NORMAL,
    12.            0);
    13.   CloseHandle(hFile);
    14. end;
    15.  


    Запуск приложения, запуск FileMonitor`а от Руссиновича.

    Жмем на кнопку, видим лог:
    Код (Text):
    1.  
    2. Project1.exe:488    IRP_MJ_CREATE   C:\1.txt    SUCCESS Options: OpenIf  Access: All   
    3. Project1.exe:488    IRP_MJ_CLEANUP  C:\1.txt    SUCCESS    
    4. Project1.exe:488    IRP_MJ_CLOSE    C:\1.txt    SUCCESS    
    5.  


    То есть файлмон спокойненько перехватил обращения к файлику 1.txt из нашего приложения.

    На сколько я понимаю, он отлавливает АПИшные вызовы и пишет лог.

    Так вот собственно вопрос.

    Как можно обратиться к файлу и сделать какие-то изменения в нем, минуя АПИ, на асме. То есть работа с файлами на самом низком уровне.

    Если можно, то ссылку на статьи, учебник и так далее. А если будет код с объяснением, то еще лучше. Потому как вобщем не знаком с этим языком =(

    Кстати, возникает еще один вопрос. Если файлмон на самом деле ловит только АПИ вызовы, и есть возможность работать с файлом без АПИ, то какой смысл от этого монитора, если можно обойти его. Скорей всего, я ошибаюсь на счет него. По этому вобщем-то и обратился к вам. Нужен советы и мнения специалистов в этой области.

    Заранее спасибо!
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    aasakaa



    API в винде не очень-то минуешь.



    А работа с файлом на самом низком уровне - руками парсить файловую систему, но доступ к ней получать придётся опять же через CreateFile.
     
  3. LOL

    LOL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2006
    Сообщения:
    175
    Адрес:
    Russia
    Имхо, можно через Native API. Яркий пример такого приложения - scandisk, запускаемый еще до старта всяких гуев ;)
     
  4. aasakaa

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9


    хм... то есть получается, замнкнутый круг... странновато немножко....



    Не совсем представляю, что такое Native API, сейчас почитаю про это, но есть при этом гарантия, что FileMon не отловит обращения к файлу?
     
  5. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Native API перехватить тоже не сложно. Подозреваю, что FileMon это делает.

    Можно напрямую, через системные вызовы, но сложно, и на разных системах может не работать.
     
  6. aasakaa

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9


    Похоже на правду....



    2 варианта... Или сразу застрелится. Или все-таки покопать глубже, а потом застрелится =)

    Выбираю второе...

    Не скажешь, где можно найти информацию именно по про эти системные вызовы?
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    asd



    Что ты имеешь ввиду? sysenter? Так файлмон сидит ниже: он перехватывает запросы к драйверу файловой системы. Ниже - только самому лезть в ФС. Хотя ещё ниже - контролёр винта, то бишь, работать непосредственно с винчестером. Но реализовать это — весьма нелегко, если вообще можно (присоседясь к системе).
     
  8. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    IceStudent



    Да, его и имел в виду.

    Не думал, что FileMon так глубоко сидит.
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    aasakaa

    Ты бы в "Inside Windows 2000" заглянул или хотя бы в гости к Руссиновичу на sysinternals.com - тогда бы понял в общих чертах, что такое драйвер фильтра файловой системы и насколько глубоко надо копать, чтобы его обойти. Так что из 2-х вариантов лучше выбрать третий - бросить нафиг эту затею ;)
     
  10. aasakaa

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9
    leo

    шпасибо, разъяснил. У Руссиновича я был... голова уже позеленела... Трудно попытаться понять за пару дней то, с чем никогда не сталкивался... За совет и книгу спасибо! Пойду менять свежекупленный Кольт на книжку =)

    Вобщем то понял, что копал в нужном направлении. Но лопатой не обойтись одной.



    Уважаемые гуру, тогда исходя из всего этого следует, что:

    дисковую активность очень и очень трудно (читай, невозможно) скрыть от существующих средств мониторинга Системы.



    Если можно, я задам еще вопрос. Точнее попрошу совет.

    Вобщем, ситуация такая. Как уже говорил, никогда не сталкивался с защитой софта. Был опыт взлома одной программки, но там свелось все к правке ключей реестра, эт не важно.

    Какие советы можете дать, чтобы не защитить, но хотя бы отшвырнуть большую часть взломщиков? Прекрасно понимаю, что идеала сделать невозможно. Но все же....

    Использовать несколько паралельных и независимых проверок?

    Засирать реестр фейковымим ключами где попало?

    Прошу совета. Нужно это для того, чтобы успокоится окончательно и работать в нужном направлении.
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Зачем засирать реестр? Ведь существует ещё и Regmon...



    Поправьте меня, если я не прав:

    Filemon не имеет в своём составе никакого драйвера.

    Перехват функций работы с файлами осуществляется не ниже уровня sysenter, т.к. filemon - это user-mode приложение, для которого самый низкий доступный уровень - это уровень "ворот в kernel-mode". Эти "ворота" - sysenter.

    Поэтому написание простенького драйвера, осуществляющего перехват и фильтрацию обращений к файлу на уровне например sdt полностью исключает мониторинг со стороны filemon'а и подобных ему "высокоуровневых" утилит.



    Чтобы не выдавать активность приложения, которое пытается модифицировать файл, можно эту активность перенести в драйвер, и из него писать в файл. И никакая user-mode утилита не отследит этого, в т.ч. и filemon.
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    cresta



    Неправ :) Загляни в его ресурсы или в исходники на wasm.ru.
     
  13. aasakaa

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9
    cresta





    Вот я как бы об этом и думал по началу. Точнее о таком варианте скрытия активности. Но на многих форумах упорно говорят, что FileMon умеет обходить user-mode и работать на уровне нулевого кольца, ну или на предыдущем уровне. Хотя для меня остается загадкой каким образом это делается.



    IceStudent





    Кстати, тож везде говорят, смотри на исходники четвертого файлмона. А гиде они тут? =) Не могу найти =/
     
  14. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    IceStudent, точно, не думал, что filemon по-партизански прячет свои драйвера :)

    RFILEMSYS и RFILEMVXD...



    aasakaa

    В любом случае, чтобы отсечь значительную часть желающих поковыряться, достаточно написать драйверок, и переложить на него запись в файл. Тот же Filemon уже не будет ассоциировать этот файл с твоим приложением: он будет записываться либо в контексте процесса system.exe (если драйвер пишет в файл в DriverEntry), либо в контексте svchost.exe. Это проверено.
     
  15. aasakaa

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9
    cresta

    хм... Значит есть способ.... Это уже лучше намного!!!

    Буду работать в этом направлении. Спасибо большое!
     
  16. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    aasakaa

    В NT системах примерно такая лесенка

    Приложение Win32

    \/

    ---------------------------

    Драйвер файловой системы

    \/

    Драйвер устройства HDD

    \/

    Драйвер шины



    Причем каждый из них может имееть драйвер фильтр причем как сверху так и снизу (да еще - сам драйвер фильтр может иметь собственный драйвер фильтр). FileMon ставит фильтр сверху Драйвера файловой системы. Т.О. без написания собственного драйвера обойти FileMon невозможно, но

    если написать драйвер фильтр, который уже будет грузиться ниже драйвера фильтра от FileMon, и будет создавать свою символическую ссылку, то мы можем обойти FileMon.
     
  17. aasakaa

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9
    PROFi

    Спасибо за разъяснение!!!!

    То есть получается.... работа должна вестись непосредственно с драйвером HDD... нда... задача не из легких для меня....



    Как я полагаю, аналогичные проблемы возникнут с обходом RegMon?
     
  18. IceStudent

    IceStudent Active Member

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

    aasakaa New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    9
    нда уж....

    никуда не скроешься.

    с одной стороны, довольно приятно осознавать сей факт, с другой... сами понимаете... противоядия хочется....
     
  20. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Можно внедриться в какой-нибудь процесс и работать с файлом оттуда.