Играем в прятки с Filemon и Regmon. Нестандартный (читай - кривой) кодинг

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _kREveDKo_, 21 Jun 2006.

  1. _kREveDKo_

    _kREveDKo_ _kREveDKo_

    Joined:
    4 Dec 2005
    Messages:
    778
    Likes Received:
    620
    Reputations:
    1,040
    ::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 наградил двумя. за то, что с задачей своей он
    справился.

    ::Зачем я всё это читал?::

    Лично я считаю, что применение этому способу можно найти лишь в часном случае, при работе в
    конкретных условиях. Так обычно и случается: прочитал какую-нибудь статьюс интересным подходом
    и отложил в памяти. Потом через определённое время появляется необходимость действовать не
    по-страндартному и тогда вспоминается отложенный в "опиративке" способ. Надеюсь
    моё мини-исследование тебе тоже когда-нибудь пригодится. =) На этом ставлю точку.
    Не болей!
     
    #1 _kREveDKo_, 21 Jun 2006
    Last edited: 21 Jun 2006
    3 people like this.
  2. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Мда... какого только кодинга не существует ;)
     
  3. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    Дурь
     
  4. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    541
    Reputations:
    445
    а можно просто:
    CreatFileMapping -> MapViewOfFile и файлмон уходит отдохнуть
     
  5. _kREveDKo_

    _kREveDKo_ _kREveDKo_

    Joined:
    4 Dec 2005
    Messages:
    778
    Likes Received:
    620
    Reputations:
    1,040
    На то ж я не Pr0_c0d3r а b00zy_c0d3r =) и на то это кривой кодинг =)
     
    1 person likes this.