• 6848
  • 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
3403

Загрузка...

Комментарии

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

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

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

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

Японец о Казахстане: «Ваши девушки уж сильно себе набивают цену...»

Японец о Казахстане: «Ваши девушки уж сильно себе набивают цену...»

"Мужчины должны у вас тут права качать, ибо их процент в вашей численности населения уступает проценту женщин". Я машинально начала уверять, что у нас в стране таковых не имеется...
Sapientia
5 дек. 2016 / 10:52
  • 7603
  • 65
Мысли вслух. Почему казахи перестали общаться с родственниками и ходить в гости?

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

Дастархан в те времена был скромен. Не было понятия «сынау» - осуждения кто как живет, какой в доме ремонт и т.д. Пока взрослые обсуждали задержку заработной платы, мы играли в армию, жмурки, строили городки...
socium_kzo
5 дек. 2016 / 15:19
  • 7065
  • 17
Взгляд со стороны: Назарбаев глазами кыргыза

Взгляд со стороны: Назарбаев глазами кыргыза

В чем уникальность этой личности? В чем его успех или провалы? Эти вопросы требуют глубокой аналитики и исследований. Я же хочу рассказать о Нурсултане Абишевиче глазами рядового кыргыза...
maxes
1 дек. 2016 / 8:05
  • 5812
  • 20
Молчание врачей. Дети ЮКО, заражённые ВИЧ 10-11 лет назад, узнают о диагнозе-приговоре

Молчание врачей. Дети ЮКО, заражённые ВИЧ 10-11 лет назад, узнают о диагнозе-приговоре

Как сообщают новостные издания, в ближайшее время в Южном Казахстане 102 детям в возрасте 11-12 лет сообщат об их страшном диагнозе. Все эти дети были заражены ВИЧ, причём большинство было инфицировано по вине врачей.
openqazaqstan
2 дек. 2016 / 13:57
  • 4340
  • 4
Почему Дональд Трамп назвал Казахстан чудом. Президент подтягивается по географии

Почему Дональд Трамп назвал Казахстан чудом. Президент подтягивается по географии

Трамп и не подозревает, что 16 декабря 1991 Казахстан не создал, а восстановил свою национальную государственность. Иначе бы он упомянул не только 25 лет, а больше чем 550 лет казахской истории.
Stehlikova
2 дек. 2016 / 9:02
  • 4900
  • 88
Мой личный опыт использования Astra Plat: мелочи в моем кармане заметно стало меньше

Мой личный опыт использования Astra Plat: мелочи в моем кармане заметно стало меньше

Давно ждал запуска электронного билетирования в общественном транспорте Астаны. В ноябре 2016 года этот день настал. Мой опыт насчитывает последние 2 недели и мне есть чем поделиться.
iamYerlan
1 дек. 2016 / 15:24
  • 3383
  • 15
10 причин, по которым я не смогла работать учителем. Не только в зарплате дело, ребята

10 причин, по которым я не смогла работать учителем. Не только в зарплате дело, ребята

Я почти год проработала в школе, и когда уходила оттуда, была самым счастливым человеком в мире. Тот год, честно говоря, я и сейчас вспоминаю с ужасом.
demonica
вчера / 17:21
  • 3309
  • 48
После крупной пьяной аварии бизнесмены в Чечне отказались торговать спиртным. В Казахстане едва ли такое возможно

После крупной пьяной аварии бизнесмены в Чечне отказались торговать спиртным. В Казахстане едва ли такое возможно

После тяжкого ДТП по вине пьяного водителя в Чечне закрылись все магазины, торгующие алкоголем. Их владельцы – 14 бизнесменов – добровольно отказались от выданных им лицензий.
openqazaqstan
5 дек. 2016 / 13:09
Как отдохнуть за 220$. Гоа – это не Индия: купил дешевую путевку и улетел!

Как отдохнуть за 220$. Гоа – это не Индия: купил дешевую путевку и улетел!

В Гоа я не первый раз. Очень многое знаю. Минус такой путевки только в том, что вы не сможете выбрать пляж и отель, но за такие смешные деньги – какая разница. Гоа – это не Индия.
fima
2 дек. 2016 / 11:32
  • 3247
  • 25