_kREveDKo_
21.06.2006, 12:46
::goto intro::
:intro
Здарова, перец, сейчас я поведаю тебе маленькую историю о том, как я играл в прятки с Filemon Nt и Regmon Nt.
Этаи программы призваны засекать обращение к файловой системе и к реестру. А мне вот
захотелось сделать так, что бы они не пялились на места, где моя прога оставляет следы.
Начнём с примитива. Вот простейшая программа на си, которая всего-то и делает, что объявляет
переменную с путём к файлу для обращения и записывает по этому пути строчку текста.
#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("");. Вышло:
#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".
#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(моя прога)
на девственный реестр не покушался.
Можно было ещё пойти немножко другим способом. Вот код:
#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 наградил двумя. за то, что с задачей своей он
справился.
::Зачем я всё это читал?::
Лично я считаю, что применение этому способу можно найти лишь в часном случае, при работе в
конкретных условиях. Так обычно и случается: прочитал какую-нибудь статьюс интересным подходом
и отложил в памяти. Потом через определённое время появляется необходимость действовать не
по-страндартному и тогда вспоминается отложенный в "опиративке" способ. Надеюсь
моё мини-исследование тебе тоже когда-нибудь пригодится. =) На этом ставлю точку.
Не болей!
:intro
Здарова, перец, сейчас я поведаю тебе маленькую историю о том, как я играл в прятки с Filemon Nt и Regmon Nt.
Этаи программы призваны засекать обращение к файловой системе и к реестру. А мне вот
захотелось сделать так, что бы они не пялились на места, где моя прога оставляет следы.
Начнём с примитива. Вот простейшая программа на си, которая всего-то и делает, что объявляет
переменную с путём к файлу для обращения и записывает по этому пути строчку текста.
#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("");. Вышло:
#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".
#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(моя прога)
на девственный реестр не покушался.
Можно было ещё пойти немножко другим способом. Вот код:
#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 наградил двумя. за то, что с задачей своей он
справился.
::Зачем я всё это читал?::
Лично я считаю, что применение этому способу можно найти лишь в часном случае, при работе в
конкретных условиях. Так обычно и случается: прочитал какую-нибудь статьюс интересным подходом
и отложил в памяти. Потом через определённое время появляется необходимость действовать не
по-страндартному и тогда вспоминается отложенный в "опиративке" способ. Надеюсь
моё мини-исследование тебе тоже когда-нибудь пригодится. =) На этом ставлю точку.
Не болей!