::goto intro:: :intro Здарова, перец, сейчас я поведаю тебе маленькую историю о том, как я играл в прятки с Filemon Nt и Regmon Nt. Этаи программы призваны засекать обращение к файловой системе и к реестру. А мне вот захотелось сделать так, что бы они не пялились на места, где моя прога оставляет следы. Начнём с примитива. Вот простейшая программа на си, которая всего-то и делает, что объявляет переменную с путём к файлу для обращения и записывает по этому пути строчку текста. Code: #include <stdio.h> char *file = "C:\\Windows\\lala.txt"; int main(int argc, char *argv[]) { FILE *fp; fp=fopen(file,"w"); fprintf(fp,"Xex! Palevo!"); fclose(fp); return 0; } Предварительно настроив filemon на процесс моего приложения, я запустил прогу и смог лицезреть в логах место, куда я записал текстовик. Естественно, что это стандартный и наиболее правильный метод записи в файл - создание потока и запись в него. Вот тут я и начал свои поиски альтернативных путей записи. Перепробовав практически все стандартные функции для работы с файловой системой, я вспомнил про свою нездоровую любовь к коммандному интерпретатору и страсть ваять .bat-ники. Для работы с CMD в C/C++ есть функция system(""); Она-то и пошла в бой. Безо всяки колебаний я наколбасил уже давно привычную строчку: echo Xex! Filemon sucksss! > C:\Windows\Help\lala.txt и поместил её в функцию system("");. Вышло: Code: #include <stdio.h> int main(int argc, char *argv[]) { system("echo Xex! Filemon sucksss! > C:\\Windows\\Help\\lala.txt"); return 0; } Какова была моя радость, когда, пролистав логи, я не увидел пути C:\Windows\Help, а лицезрел лишь путь к cmd.exe (C:\Windows\system32). Ну правильно! Filemon правильно отследил, что мы обратились к Cmd.exe!!! Но он даже не стал смотреть, что интерпретатор там вытворяет на харде! Вот оно! Мы же использовали cmd как козла отпущения, который умеет работать с потоками! =) ::Я требую продолжения банкета!:: Через 2 минуты после оргазма, полученного от результата кривой кодерской мысли, глаза мои снова загорелись недеЦЦким пламенем и мне захотелось таким же образом наколоть Regmon Nt. Издав азартное "Гыгы! Нука нука!!" я с блаженным лицом принялся обдумывать, как можно сделать запись в реестр НЕстандартным путём. Ведь все стандартные ф-ции записи в реестр Regmon Nt видит как кошка видит бомжа в тёмном подвале, поэтому я даже не стал пытаться их юзать. "А что тут думать?"-подумал я! Давай опять найдём козла отпущения, только теперь он должен уметь работать с реестром!. Да не вопрос, ёпт! Зачем, спрашивается, программеры конторы Билла придумали прогу reg.exe? Конечно для нас! Её прямая обязанность дать нам возможность работать с реестром через коммандную строку. Изучив основные параметры этой программы, я наколбасил тестовый код, который через reg.exe добавлял в реестр параметр "Test" со значением "regmon sucks". Code: #include <stdio.h> int main(int argc, char *argv[]) { system("reg.exe ADD \"HKCU\\Software\\Microsoft\\Internet Explorer\\Main\" /v Test2 /d \"filemon sucks\""); return 0; } И снова я расплываюсь в улыбке. Regmon своим молчанием даёт понять, что процесс sucks.exe(моя прога) на девственный реестр не покушался. Можно было ещё пойти немножко другим способом. Вот код: Code: #include <stdio.h> int main(int argc, char *argv[]) { system("echo Windows Registry Editor Version 5.00 > sucks.reg"); system("echo [HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main] >> sucks.reg"); system("echo \"Window Title\" = \"lol\" >> sucks.reg"); system("start sucks.reg"); system("del sucks.reg /Q"); system("pause"); return 0; } Примитивный сорец, думаю, не вызывает у тебя вопросов. Создаётся файл sucks.reg (создаётся опять же не стандартным методом), выполняется и удаляется, благополучно занеся запись в реестр и не вызвав внимания на процесс приложения. ::Помечтали и хватит:: Конечно же будут правы те, кто сейчас начнёт бубнеть, что это совершенно не кодерский подход к решению проблемы. Данный способ отвлечения работает увы не так хорошо... Увы...А всё потому, что достаточно в Regmon убрать фильтр по моему процессу и вот уже он прекрасно отследил кто куда и что записал. Ещё один способ - снятие "слепка" с реестра. Этот способ был описан в спец хакере за май (С помощью программы WinTools.Net). НО... всё-таки хоть и не намного, но описанный мною способ осложнит работу крякеру (хотя для нормального крякера, вообще нет неломаемой программы), ведь винда постоянно работает с реестром и файловой системой. Это значит, что в логах будет куча мусора, который неприятно разбирать. В общем вердикт думаю такой: 2:1 в пользу спец софта. Одним очком я наградил себя за храбрость а Reg/File-mon наградил двумя. за то, что с задачей своей он справился. ::Зачем я всё это читал?:: Лично я считаю, что применение этому способу можно найти лишь в часном случае, при работе в конкретных условиях. Так обычно и случается: прочитал какую-нибудь статьюс интересным подходом и отложил в памяти. Потом через определённое время появляется необходимость действовать не по-страндартному и тогда вспоминается отложенный в "опиративке" способ. Надеюсь моё мини-исследование тебе тоже когда-нибудь пригодится. =) На этом ставлю точку. Не болей!