Статья [Reverse-Engineering] Лоадер NEVERLOSE

  • colby57
  • UNEXPECTED_KERNEL_MODE_TRAP_M (1000007f)
  • 155
  • 2
  • 238
Шалом. Давно я не выпускал статью с реверсом чего-либо, связано это было с отсутствием времени и апатией, которая меня преследовала неделями.
Сегодня я решил разобрать лоадер Neverlose.cc, не знаю кто работал над ним, но парочку фишек я подчеркнул которые встретил во время отладки
Не знаю откуда появились разговоры о невозможности реверса неверлуза из-за его защиты, но это было довольно забавно читать =)

1. Введение

2. Лоадер ImGui
2.1. Аватарка + токен
2.2. Парсинг информации о читах
2.3. Проверка версии
2.4. Чек на валидность токена
2.5. Парсинг логина с сервера
3. Консольное приложение с инжектом
3.1. Анти-дебаг трюки и их обход
3.1.1. Детект с помощью OsBuildNumber
3.1.2. Детект с помощью BeingDebugged
3.2. Hello From Kernel-Mode!
4. Генерация HWID и соединение с сервером
4.1. Метки для генерации HWID
5. Итоги
6. Бонус

1. Введение
Ожидалось, что как и со спиртхаком и миднайтом лоадер Neverlose будет скомпилирован на x64 архитектуре с использованием asmjit. (Нет)
На деле оказалось, что это х32 приложение накрытое вмпротектом, это относится к двум файлам


2. Лоадер ImGui
Первый файл, который имеет при себе ImGui интерфейс, это своего рода "дроппер", который перед тем, как сбросить второй файл сделает 5 реквестов на сервер, чтобы взять:

2.1. Аватарку юзера + токен -> (Токен юзера находится в HKEY_CURRENT_USER\Software\neverlose)

1622715843836.png


2.2.
Второй реквест нужен для того, чтобы лоадер неверлуза спарсил результат, который находится в .json формате ->
Код:
[{"cheat": "csgo", "changelog":
{"changelog": "- Fixed Grenade Prediction\r\n- Fixed some lua crashes/bugs\n", "date": 1619808270}, "desc": "Neverlose for CS:GO will make you feel like a real professional.\nOne of the best legit and rage aimbots will allow you to kill all your enemies, and incredibly beautiful and customizable visuals will give your game new colors.\n", "status": "Undetected", "name": "CS:GO", "version": "2.5.1", "license": 1625150529, "lastlaunch": 1622560669, "type": "Release"},
{"cheat": "apex", "changelog": {"changelog": "", "date": 0}, "desc": "Neverlose for Apex Legends will allow you to make the most incredible kills in your life.\nThanks to customizable visuals and radar, you can see enemies even on the other end of the map.\nWith the help of skinchanger you can change the look of all your weapons. Isn't that great?\nOnly Windows 10 1803+ supported.", "status": "Unknown", "name": "Apex Legends", "version": "1.0.0", "license": 0, "lastlaunch": 0, "type": "Release"}]

2.3. Третий реквест это просто видимо проверка версии ->
2.4. Четвертый реквест - это проверка на токен с реестра. При валидном токене сервер напишет "ok" -> https://neverlose.cc/api/isvalid?token=

2.5. Ну и пятый реквест, это парсинг моего логина с сервера, опять же без токена тут никак не обойтись =) ->
Впринципе всё, разбирать особо нечего, конечно я успел еще глянуть проверку на подписку, но там нет ничего интересного
Скрин проверки:
unknown.png


Вообще в некоторых моментах у неверлуза есть проверка на User-Agent и так просто с браузера уже зайти нельзя будет
Лоадер сам по себе не имеет при себе какой-то защиты в отличии от второго файла, который он будет дроппать для инжекта




3. Консольное приложение с инжектом

Если же в первом лоадере неверлуза файл не имел при себе никаких сюпризов, то тут разработчики решили поиграться с любителями
поюзать ScyllaHide, делает он "12.4 шагов", где он успеет сгенерировать хвид, загрузить и выгрузить драйвер NeverBSOD, записать все логи с шагами в
"C:\\Users\\user_name\\AppData\\Local\\Temp\\\\nl.log" и т.д. Начнем по порядку

3.1. Анти-дебаг трюки и их обход

У Neverlose есть два типа антидебага: Исключения и MessageBoxA с сообщение об обнаружении отладчика
Вся антиотладка неверлуза состоит из работы со структурой Process Environment Block (PEB)

3.1.1. Детект с помощью OsBuildNumber

По началу когда я расставил везде галки на плагине я думал, что неверлуз детектит хуки на Nt функции, однако это далеко не так
Первый метод заключается в детекте хука OsBuildNumber
При детекте хука в EAX засовывался 0xDEADC0DE, а EIP полностью сбивается и ставится 0x0
т.е. программу уже невозможно будет дебажить

Скрин детекта:
deadcode.png


3.1.2. Детект с помощью BeingDebugged

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

1622715772389.png


Пример детекта отладчика с помощью BeingDebugged:
C++:
typedef struct _PEB {
  BYTE                          Reserved1[2];
  BYTE                          BeingDebugged;
  BYTE                          Reserved2[1];
  PVOID                         Reserved3[2];
  PPEB_LDR_DATA                 Ldr;
  PRTL_USER_PROCESS_PARAMETERS  ProcessParameters;
  BYTE                          Reserved4[104];
  PVOID                         Reserved5[52];
  PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
  BYTE                          Reserved6[128];
  PVOID                         Reserved7[1];
  ULONG                         SessionId;
} PEB, *PPEB;

static void detect_debug()
{
   if(PPEB->BeingDebugged)
   {
      MessageBoxA(0, "Debugger found, please disable it.", 0, 0);
   }

   return;
}

3.2. Hello From Kernel-Mode!

Так как разработчики очень часто использовали CreateFileW для записи лога, я случайно пропалил место хранения драйвера, мониторя действия над nl.log =p Ну и как оказалось позже драйвер был вовсе накрыт вмпротектом, из-за чего невозможно провести какой-либо анализ
Разве что пытаться палить с клиента параметры DeviceIoControl. CreateFileW также будет использоваться и для создания хендла драйвера \\\\.\\nbsod, после создания хендла неверлуз пытается выгрузить свой драйвер через NtUnloadDriver, если он был загружен раннее до этого.
Сразу же после загрузки драйвера c помощью NtLoadDriver и сервиса с именем NeverBSOD драйвер удаляется полностью с пк, а сервис остаётся

1622725552665.png


Если кому интересно местоположение драйвера: C:\Windows\Temp\nbsod.sys

1622724037514.png



4. Генерация HWID и соединение с сервером

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

4.1. Метки для генерации HWID

Первым делом он берет информацию о HID-девайсе: USB Keyboard SEM с помощью всё того же CreateFileA

Вызов CreateFileA:
get_hid_device_1.png

016FEAF0 01A11600 "%20&hid=USB%20Keyboard%20%20SEM%0AUSB%20Keyboard%20%20SEM%0A"

Далее он будет брать информацию о количестве оперативной памяти (пример: ram=7.983875);
О версии винды: (win=Windows%2010%20Pro%2018362.1.amd64fre.19h1_release.190318-1202);
О видеокарте: (gpu=AMD%20Radeon%20R7%20200%20Series&)
О процессоре: (cpu=%20%20%20%20%20%20%20%20Intel%28R%29%20Core%28TM%29%20i3-2100%20CPU%20%40%203.10GHz&)
О прозводителе биоса: (bios=Award%20Software%20International%2C%20Inc.%20F1%2002%2F11%2F2011%20Gigabyte%20Technology%20Co.%2C%20Ltd.%20H67M-UD2H-B3%20Gigabyte%20Technology%20Co.%2C%20Ltd.%20H67M-UD2H-B3%20&)

Ну и напоследок после биоса он засунет информации о HID-девайсе, который я упомянул выше.

В целом весь реквест на сервер выглядит так:
016FEB50 01A112E8 "ram=7.983875&win=Windows%2010%20Pro%2018362.1.amd64fre.19h1_release.190318-1202&gpu=AMD%20Radeon%20R7%20200%20Series&cpu=%20%20%20%20%20%20%20%20Intel%28R%29%20Core%28TM%29%20i3-2100%20CPU%20%40%203.10GHz&bios=Award%20Software%20International%2C%20Inc.%20F1%2002%2F11%2F2011%20Gigabyte%20Technology%20Co.%2C%20Ltd.%20H67M-UD2H-B3%20Gigabyte%20Technology%20Co.%2C%20Ltd.%20H67M-UD2H-B3%20&hid="

5. Итоги

Вот и подошел к концу мой реверс этого чудо-приложения, на который я потратил +- полтора дня. Я не упомянул много мелких деталей и реквестов по типу neverlose.cc/api-2/inj-start, neverlose.cc/api-2/getkey2?hash= и прочее. Да и впринципе уже не смогу о них рассказать, так как после того как я решил прочекать регионы памяти у csgo после инжекта - игра ушла в краш, а подписка была забанена. Полагаю, это был скан и отлавливание лишних открытых хендлов игры, но уже не суть =)

1622725726021.png


6. Бонус

Скрытое содержимое доступно для зарегистрированных пользователей!


Ну и ещё хочу поблагодарить троих людей, которые поспобоствовали выходу этой статейки:
Arting, iDReeM, Rolzzandik

Возможно поговорю по поводу реверса неверлуза в своем тг канале, подписывайтесь если шо: Colby5Covington / Back-Engineering
 

Вложения

  • deadcode.png
    deadcode.png
    2.6 KB · Просмотры: 383
Последнее редактирование:
  • 14
  • 13
Я всё прочитал но чёт не понял а что сам драйвер нл делает?
В этой статье не говорится т.к он накрыт VMProtect.
Я попытался проанализировать,но,видимо,придётся дебажить.
Во-первых,они используют украденный сертификат"Nanjing Zhixiao Information Technology Co.,Ltd"
Во-вторых,с дампа вы получите почти 0 инфы,но я делал анализ на VMware.
P.S меня смущает KeQueryPerformanceCounter(user mode RtlQueryPerformanceCounter вызывет rdtscp т.е Anti-vm,скорее всего).
С Novmp не получилось,может,у вас что-то нормальное получится.
Дамп:meh


Import:
Library
FltParseFileName
RtlInitUnicodeString
ExAllocatePool
NtQuerySystemInformation (systemmoduleinformation)
ExFreePoolWithTag
IoAllocateMdl
MmProbeAndLockPages
MmMapLockedPagesSpecifyCache
MmUnlockPages
IoFreeMdl
KeQueryActiveProcessors
KeSetSystemAffinityThread
KeRevertToUserAffinityThread
DbgPrint
KeQueryPerformanceCounter
NtUnloadDriver
xxPoolWithTag ? ExAllocatePoolWithTag || ExFreePoolWithTag
String:
FLTMGR.SYS
HAL.dll
ntoskrnl.exe
 
Активность
Пока что здесь никого нет
Сверху Снизу