Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Софт Проект кряка Nursultan Client(i64db + dumps + etc)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
29 Мар 2026
Сообщения
6
Реакции
0
Здравствуйте, сегодня я хотел бы слить проект кряка нурсултан клиента - была проделана такая работа, как анализ нетворкинга, реверс лоадер(-ов) и иные манипуляции.

В архиве приложены: i64db(дб иды), спуфер запросов под нурик(абсолютно спокойно адаптируется под Celestial Client т.к один протект = один нетворкинг), клиентские сертификаты(позволяют слать неограниченные запросы на api/launcher в обход CF!!!), декриптор хвида(hwid в нурике шифруется AES ключами, которые я достал успешно из лоадера, это позволяет теоретически создать спуфер хвида под нур/целку), все файлы всех доступных на сервере версий(1.16.5, alpha 1.16.5, test 1.16.5, 1.21.8 старый сурс), webview лоадера.

Внимание!!! Данный проект - не является готовым решением!!! Вам необходимо продолжить работу над кряком самому!!!

Я бы хотел начать с описания нетворкинга Нурсултана, т.к именно из за уязвимостей в нем данный проект возымел право на жизнь. Анализ будет представлен в виде таблицы.

Эндпоинт
Значение
Пояснение
/api/launcher/check-updateПроверка на обновление лаунчера.Вызывается при каждом запуске.

При ошибке(любой статус != 200) не пропускает далее в лаунчер, просит установить обновление. При успехе(200) продолжает работу.
/api/launcher/userПолучает информацию о пользователе.Вызывается при каждом запуске.

При успешном запросе авторизует сразу в лаунчер пропуская ввод логина и пароля(т.к авторизация происходит по JWT-токену). При ошибке просто перебрасывает на ввод логина и пароля.
/api/launcher/loginАвторизует пользователя.Вызывается при вводе логина, пароля и нажатия кнопки "Войти" в главном меню.

Передает в открытом виде логин и пароль, так-же в закрытом виде передает HWID.
/api/launcher/versionsПолучает все версии(клиенты) доступные пользователю.Вызывается при каждой авторизации(через /login или через /user)

Передает json объект со всеми версиями и их объектами.
/api/launcher/startПолучает необходимые аргументы, иногда готовые команды(не было проанализировано полностью) для запуска клиента.Вызывается при запуске клиента из меню(нажатия кнопки "Запустить" в карточке версии)
/api/launcher/initДанный эндпоинт не был полностью проанализирован. Предположительно дает добро или отказ на запуск клиента(распространяется только на платные версии предположительно)Вызывается из под кастомных лаунчеров для клиентов(файлы в папке версий с названиями версий т.е alpha 1.16.5.exe, test 1.16.5.exe, etc.)

Стоит отметить, что данный запрос идет в обход прокси винды, т.е его нельзя словить обычными средствами(только через proxifier для перенаправления, либо через wireshark для анализа)

Это наиболее важные эндпоинты, по которым обращается сервер. Но вы не сможете по ним прямо обратиться - сервер валидирует все запросы на эндпоинты апишки лаунчера посредством проверки клиентского сертификата, если вы отправите запрос без него, сервер выдаст мнимое File not found.

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

Я начну с как раз общения между webview и native. Как передается порт для соединения по вебсокету? Очень просто - нативка передает в вебвью базовые константы(порт, хвид и настройки типо мемори) т.е настраивает окружение.

1777666912684.png


Версия лаунчера захардкожена.
1777666920178.png


Все это происходит в одной единственной функции по адресу 0x0000000140166850(в i64 названа SetupEnv)

Здесь происходит и получение хвида и его крипт и передача всех данных в вебвью

Здесь мы видим - получение memory методом(GlobalMemoryStatusEx), получение хвида посредством GetHwid(к сожалению данная функция была виртуализирована)
1777666929853.png


Причем стоит подметить, что это не стандартная функция из SDK VMPROTECT, сдк собирает гораздо меньше данных о системе.

При ошибке получения HWID нативка убивает свой процесс(Хотя в вебвью есть заданный fallback при отсутствии HWID)
1777666937481.png



При получении HWID он шифруется AES, ключи и IV не защищены в целом
1777666944602.png


При ошибке шифрования хвида такое-же поведение, как при ошибке получения его(килл процесса)

Далее перейдем к анализу нетворкинга. Хотелось бы подметить, что я не заметил виртуализированных функций кроме получения хвида, энтрипоинта и tls_callback0

Сначала разберем загрузку файлов webview - она происходит в функции sub_14048E0A0(0x0000000140158730) в i64 подписана как DownloadWebFiles

1777666953524.png

Происходит все этим запросом - он отправляет запрос на URL_WEB_FILES(или же /storage/launcher/cache.json) и парсит данный json, и далее по нему качает все файлы(идет далее по коду)

Так-же отправляет запросы функция sub_140150260(0x0000000140150260) или же DownloadVersionFiles
1777666961892.png

В большинстве своем у данной функции такой-же принцип - парсит json объект и по данным в нем качает все необходимые файлы.

Так-же советую посмотреть, какие функции вызывают их(DownloadWebFIles и DownloadVersionFiles).

В большинстве своем более разбирать нечего, только подмечу, что заревершены curl функции, которые вы можете хукать при желании.

Разбирать кастомную jvm(те самые лаунчеры версий) я не буду т.к там в большинстве своем нечего анализировать, код слишком запутан для статического анализа. Скажу лишь только то, что сигнатуры функций curl частично обратно совместимы из лоадера(где они заревершены) и из лаунчеров, это понадобится вам для реверса. Так-же в лаунчерах в большинстве важных функций сломаны xrefs.

Теперь давайте перейдем к сетевым уязвимостям, посредством которых были выкачаны без сабки все версии, доступные на сервере. Спуфая запросы я заметил, что сервер нурсултана дает мне скачивать файлы альфы без авторизации в аккаунт(т.е без сабки без ничего), но я это заметил - поглядел, подумал и забил. Но вдруг в чате некотором кто-то заговорил о версии 1.21.8 для нурика. И у меня родилась идея забрутфорсить версии - ну и не долго думая я принялся за брутфорс. И через несколько версий я получил 1.21.8. Это был практически сурс - основная структура была полностью видна, но в итоге она была под криптой. Сам менеджер нурсултана подтвердил, что это реальный билд, но старый.
1777666968950.png

(Дай бог я не на ратке)

Основная уязвимость(критическая) - отсутствие авторизации на загрузке файлов версий.

Подведем итоги: была проделана большая работа, но в итоге она отдается энтузиастам с данного форума. Основной крякер: FREUDE, в кряке принимали участие так-же PasterEnd, но они более освещали его, чем работали над его разработкой. Анализ спуфера и декодера хвида оставляю на вас. Данный проект более не будет поддерживаться мной. Всем спасибо за внимание.

P.S На момент написания статьи был обновлен лаунчер(все равно дампится на раз-два/приложу позже) + пофикшена дыра в нетворкинге(загрузка файлов с сервера), похоже после такого было грех не подсуетиться аргентозу(осталось только отказаться от vmprotect и перейти на адекватную защиту)))).
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Здравствуйте, сегодня я хотел бы слить проект кряка нурсултан клиента - была проделана такая работа, как анализ нетворкинга, реверс лоадер(-ов) и иные манипуляции.

В архиве приложены: i64db(дб иды), спуфер запросов под нурик(абсолютно спокойно адаптируется под Celestial Client т.к один протект = один нетворкинг), клиентские сертификаты(позволяют слать неограниченные запросы на api/launcher в обход CF!!!), декриптор хвида(hwid в нурике шифруется AES ключами, которые я достал успешно из лоадера, это позволяет теоретически создать спуфер хвида под нур/целку), все файлы всех доступных на сервере версий(1.16.5, alpha 1.16.5, test 1.16.5, 1.21.8 старый сурс), webview лоадера.

Внимание!!! Данный проект - не является готовым решением!!! Вам необходимо продолжить работу над кряком самому!!!

Я бы хотел начать с описания нетворкинга Нурсултана, т.к именно из за уязвимостей в нем данный проект возымел право на жизнь. Анализ будет представлен в виде таблицы.

Эндпоинт
Значение
Пояснение
/api/launcher/check-updateПроверка на обновление лаунчера.Вызывается при каждом запуске.

При ошибке(любой статус != 200) не пропускает далее в лаунчер, просит установить обновление. При успехе(200) продолжает работу.
/api/launcher/userПолучает информацию о пользователе.Вызывается при каждом запуске.

При успешном запросе авторизует сразу в лаунчер пропуская ввод логина и пароля(т.к авторизация происходит по JWT-токену). При ошибке просто перебрасывает на ввод логина и пароля.
/api/launcher/loginАвторизует пользователя.Вызывается при вводе логина, пароля и нажатия кнопки "Войти" в главном меню.

Передает в открытом виде логин и пароль, так-же в закрытом виде передает HWID.
/api/launcher/versionsПолучает все версии(клиенты) доступные пользователю.Вызывается при каждой авторизации(через /login или через /user)

Передает json объект со всеми версиями и их объектами.
/api/launcher/startПолучает необходимые аргументы, иногда готовые команды(не было проанализировано полностью) для запуска клиента.Вызывается при запуске клиента из меню(нажатия кнопки "Запустить" в карточке версии)
/api/launcher/initДанный эндпоинт не был полностью проанализирован. Предположительно дает добро или отказ на запуск клиента(распространяется только на платные версии предположительно)Вызывается из под кастомных лаунчеров для клиентов(файлы в папке версий с названиями версий т.е alpha 1.16.5.exe, test 1.16.5.exe, etc.)

Стоит отметить, что данный запрос идет в обход прокси винды, т.е его нельзя словить обычными средствами(только через proxifier для перенаправления, либо через wireshark для анализа)

Это наиболее важные эндпоинты, по которым обращается сервер. Но вы не сможете по ним прямо обратиться - сервер валидирует все запросы на эндпоинты апишки лаунчера посредством проверки клиентского сертификата, если вы отправите запрос без него, сервер выдаст мнимое File not found.

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

Я начну с как раз общения между webview и native. Как передается порт для соединения по вебсокету? Очень просто - нативка передает в вебвью базовые константы(порт, хвид и настройки типо мемори) т.е настраивает окружение.

Посмотреть вложение 334777

Версия лаунчера захардкожена.
Посмотреть вложение 334778

Все это происходит в одной единственной функции по адресу 0x0000000140166850(в i64 названа SetupEnv)

Здесь происходит и получение хвида и его крипт и передача всех данных в вебвью

Здесь мы видим - получение memory методом(GlobalMemoryStatusEx), получение хвида посредством GetHwid(к сожалению данная функция была виртуализирована)
Посмотреть вложение 334779

Причем стоит подметить, что это не стандартная функция из SDK VMPROTECT, сдк собирает гораздо меньше данных о системе.

При ошибке получения HWID нативка убивает свой процесс(Хотя в вебвью есть заданный fallback при отсутствии HWID)
Посмотреть вложение 334780


При получении HWID он шифруется AES, ключи и IV не защищены в целом
Посмотреть вложение 334781

При ошибке шифрования хвида такое-же поведение, как при ошибке получения его(килл процесса)

Далее перейдем к анализу нетворкинга. Хотелось бы подметить, что я не заметил виртуализированных функций кроме получения хвида, энтрипоинта и tls_callback0

Сначала разберем загрузку файлов webview - она происходит в функции sub_14048E0A0(0x0000000140158730) в i64 подписана как DownloadWebFiles

Посмотреть вложение 334782
Происходит все этим запросом - он отправляет запрос на URL_WEB_FILES(или же /storage/launcher/cache.json) и парсит данный json, и далее по нему качает все файлы(идет далее по коду)

Так-же отправляет запросы функция sub_140150260(0x0000000140150260) или же DownloadVersionFiles
Посмотреть вложение 334783
В большинстве своем у данной функции такой-же принцип - парсит json объект и по данным в нем качает все необходимые файлы.

Так-же советую посмотреть, какие функции вызывают их(DownloadWebFIles и DownloadVersionFiles).

В большинстве своем более разбирать нечего, только подмечу, что заревершены curl функции, которые вы можете хукать при желании.

Разбирать кастомную jvm(те самые лаунчеры версий) я не буду т.к там в большинстве своем нечего анализировать, код слишком запутан для статического анализа. Скажу лишь только то, что сигнатуры функций curl частично обратно совместимы из лоадера(где они заревершены) и из лаунчеров, это понадобится вам для реверса. Так-же в лаунчерах в большинстве важных функций сломаны xrefs.

Теперь давайте перейдем к сетевым уязвимостям, посредством которых были выкачаны без сабки все версии, доступные на сервере. Спуфая запросы я заметил, что сервер нурсултана дает мне скачивать файлы альфы без авторизации в аккаунт(т.е без сабки без ничего), но я это заметил - поглядел, подумал и забил. Но вдруг в чате некотором кто-то заговорил о версии 1.21.8 для нурика. И у меня родилась идея забрутфорсить версии - ну и не долго думая я принялся за брутфорс. И через несколько версий я получил 1.21.8. Это был практически сурс - основная структура была полностью видна, но в итоге она была под криптой. Сам менеджер нурсултана подтвердил, что это реальный билд, но старый.
Посмотреть вложение 334784
(Дай бог я не на ратке)

Основная уязвимость(критическая) - отсутствие авторизации на загрузке файлов версий.

Подведем итоги: была проделана большая работа, но в итоге она отдается энтузиастам с данного форума. Основной крякер: FREUDE, в кряке принимали участие так-же PasterEnd, но они более освещали его, чем работали над его разработкой. Анализ спуфера и декодера хвида оставляю на вас. Данный проект более не будет поддерживаться мной. Всем спасибо за внимание.

P.S На момент написания статьи был обновлен лаунчер(все равно дампится на раз-два/приложу позже) + пофикшена дыра в нетворкинге(загрузка файлов с сервера), похоже после такого было грех не подсуетиться аргентозу(осталось только отказаться от vmprotect и перейти на адекватную защиту)))).
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Скрытое содержимое
ну всё теперь краш систем на тебя злой и тебе снесут диски мбр
 
Здравствуйте, сегодня я хотел бы слить проект кряка нурсултан клиента - была проделана такая работа, как анализ нетворкинга, реверс лоадер(-ов) и иные манипуляции.

В архиве приложены: i64db(дб иды), спуфер запросов под нурик(абсолютно спокойно адаптируется под Celestial Client т.к один протект = один нетворкинг), клиентские сертификаты(позволяют слать неограниченные запросы на api/launcher в обход CF!!!), декриптор хвида(hwid в нурике шифруется AES ключами, которые я достал успешно из лоадера, это позволяет теоретически создать спуфер хвида под нур/целку), все файлы всех доступных на сервере версий(1.16.5, alpha 1.16.5, test 1.16.5, 1.21.8 старый сурс), webview лоадера.

Внимание!!! Данный проект - не является готовым решением!!! Вам необходимо продолжить работу над кряком самому!!!

Я бы хотел начать с описания нетворкинга Нурсултана, т.к именно из за уязвимостей в нем данный проект возымел право на жизнь. Анализ будет представлен в виде таблицы.

Эндпоинт
Значение
Пояснение
/api/launcher/check-updateПроверка на обновление лаунчера.Вызывается при каждом запуске.

При ошибке(любой статус != 200) не пропускает далее в лаунчер, просит установить обновление. При успехе(200) продолжает работу.
/api/launcher/userПолучает информацию о пользователе.Вызывается при каждом запуске.

При успешном запросе авторизует сразу в лаунчер пропуская ввод логина и пароля(т.к авторизация происходит по JWT-токену). При ошибке просто перебрасывает на ввод логина и пароля.
/api/launcher/loginАвторизует пользователя.Вызывается при вводе логина, пароля и нажатия кнопки "Войти" в главном меню.

Передает в открытом виде логин и пароль, так-же в закрытом виде передает HWID.
/api/launcher/versionsПолучает все версии(клиенты) доступные пользователю.Вызывается при каждой авторизации(через /login или через /user)

Передает json объект со всеми версиями и их объектами.
/api/launcher/startПолучает необходимые аргументы, иногда готовые команды(не было проанализировано полностью) для запуска клиента.Вызывается при запуске клиента из меню(нажатия кнопки "Запустить" в карточке версии)
/api/launcher/initДанный эндпоинт не был полностью проанализирован. Предположительно дает добро или отказ на запуск клиента(распространяется только на платные версии предположительно)Вызывается из под кастомных лаунчеров для клиентов(файлы в папке версий с названиями версий т.е alpha 1.16.5.exe, test 1.16.5.exe, etc.)

Стоит отметить, что данный запрос идет в обход прокси винды, т.е его нельзя словить обычными средствами(только через proxifier для перенаправления, либо через wireshark для анализа)

Это наиболее важные эндпоинты, по которым обращается сервер. Но вы не сможете по ним прямо обратиться - сервер валидирует все запросы на эндпоинты апишки лаунчера посредством проверки клиентского сертификата, если вы отправите запрос без него, сервер выдаст мнимое File not found.

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

Я начну с как раз общения между webview и native. Как передается порт для соединения по вебсокету? Очень просто - нативка передает в вебвью базовые константы(порт, хвид и настройки типо мемори) т.е настраивает окружение.

Посмотреть вложение 334777

Версия лаунчера захардкожена.
Посмотреть вложение 334778

Все это происходит в одной единственной функции по адресу 0x0000000140166850(в i64 названа SetupEnv)

Здесь происходит и получение хвида и его крипт и передача всех данных в вебвью

Здесь мы видим - получение memory методом(GlobalMemoryStatusEx), получение хвида посредством GetHwid(к сожалению данная функция была виртуализирована)
Посмотреть вложение 334779

Причем стоит подметить, что это не стандартная функция из SDK VMPROTECT, сдк собирает гораздо меньше данных о системе.

При ошибке получения HWID нативка убивает свой процесс(Хотя в вебвью есть заданный fallback при отсутствии HWID)
Посмотреть вложение 334780


При получении HWID он шифруется AES, ключи и IV не защищены в целом
Посмотреть вложение 334781

При ошибке шифрования хвида такое-же поведение, как при ошибке получения его(килл процесса)

Далее перейдем к анализу нетворкинга. Хотелось бы подметить, что я не заметил виртуализированных функций кроме получения хвида, энтрипоинта и tls_callback0

Сначала разберем загрузку файлов webview - она происходит в функции sub_14048E0A0(0x0000000140158730) в i64 подписана как DownloadWebFiles

Посмотреть вложение 334782
Происходит все этим запросом - он отправляет запрос на URL_WEB_FILES(или же /storage/launcher/cache.json) и парсит данный json, и далее по нему качает все файлы(идет далее по коду)

Так-же отправляет запросы функция sub_140150260(0x0000000140150260) или же DownloadVersionFiles
Посмотреть вложение 334783
В большинстве своем у данной функции такой-же принцип - парсит json объект и по данным в нем качает все необходимые файлы.

Так-же советую посмотреть, какие функции вызывают их(DownloadWebFIles и DownloadVersionFiles).

В большинстве своем более разбирать нечего, только подмечу, что заревершены curl функции, которые вы можете хукать при желании.

Разбирать кастомную jvm(те самые лаунчеры версий) я не буду т.к там в большинстве своем нечего анализировать, код слишком запутан для статического анализа. Скажу лишь только то, что сигнатуры функций curl частично обратно совместимы из лоадера(где они заревершены) и из лаунчеров, это понадобится вам для реверса. Так-же в лаунчерах в большинстве важных функций сломаны xrefs.

Теперь давайте перейдем к сетевым уязвимостям, посредством которых были выкачаны без сабки все версии, доступные на сервере. Спуфая запросы я заметил, что сервер нурсултана дает мне скачивать файлы альфы без авторизации в аккаунт(т.е без сабки без ничего), но я это заметил - поглядел, подумал и забил. Но вдруг в чате некотором кто-то заговорил о версии 1.21.8 для нурика. И у меня родилась идея забрутфорсить версии - ну и не долго думая я принялся за брутфорс. И через несколько версий я получил 1.21.8. Это был практически сурс - основная структура была полностью видна, но в итоге она была под криптой. Сам менеджер нурсултана подтвердил, что это реальный билд, но старый.
Посмотреть вложение 334784
(Дай бог я не на ратке)

Основная уязвимость(критическая) - отсутствие авторизации на загрузке файлов версий.

Подведем итоги: была проделана большая работа, но в итоге она отдается энтузиастам с данного форума. Основной крякер: FREUDE, в кряке принимали участие так-же PasterEnd, но они более освещали его, чем работали над его разработкой. Анализ спуфера и декодера хвида оставляю на вас. Данный проект более не будет поддерживаться мной. Всем спасибо за внимание.

P.S На момент написания статьи был обновлен лаунчер(все равно дампится на раз-два/приложу позже) + пофикшена дыра в нетворкинге(загрузка файлов с сервера), похоже после такого было грех не подсуетиться аргентозу(осталось только отказаться от vmprotect и перейти на адекватную защиту)))).
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Скрытое содержимое
а че когда кряк нурсултана? ты же рассказал про ВСЮ защиту нурика, не?
 
Здравствуйте, сегодня я хотел бы слить проект кряка нурсултан клиента - была проделана такая работа, как анализ нетворкинга, реверс лоадер(-ов) и иные манипуляции.

В архиве приложены: i64db(дб иды), спуфер запросов под нурик(абсолютно спокойно адаптируется под Celestial Client т.к один протект = один нетворкинг), клиентские сертификаты(позволяют слать неограниченные запросы на api/launcher в обход CF!!!), декриптор хвида(hwid в нурике шифруется AES ключами, которые я достал успешно из лоадера, это позволяет теоретически создать спуфер хвида под нур/целку), все файлы всех доступных на сервере версий(1.16.5, alpha 1.16.5, test 1.16.5, 1.21.8 старый сурс), webview лоадера.

Внимание!!! Данный проект - не является готовым решением!!! Вам необходимо продолжить работу над кряком самому!!!

Я бы хотел начать с описания нетворкинга Нурсултана, т.к именно из за уязвимостей в нем данный проект возымел право на жизнь. Анализ будет представлен в виде таблицы.

Эндпоинт
Значение
Пояснение
/api/launcher/check-updateПроверка на обновление лаунчера.Вызывается при каждом запуске.

При ошибке(любой статус != 200) не пропускает далее в лаунчер, просит установить обновление. При успехе(200) продолжает работу.
/api/launcher/userПолучает информацию о пользователе.Вызывается при каждом запуске.

При успешном запросе авторизует сразу в лаунчер пропуская ввод логина и пароля(т.к авторизация происходит по JWT-токену). При ошибке просто перебрасывает на ввод логина и пароля.
/api/launcher/loginАвторизует пользователя.Вызывается при вводе логина, пароля и нажатия кнопки "Войти" в главном меню.

Передает в открытом виде логин и пароль, так-же в закрытом виде передает HWID.
/api/launcher/versionsПолучает все версии(клиенты) доступные пользователю.Вызывается при каждой авторизации(через /login или через /user)

Передает json объект со всеми версиями и их объектами.
/api/launcher/startПолучает необходимые аргументы, иногда готовые команды(не было проанализировано полностью) для запуска клиента.Вызывается при запуске клиента из меню(нажатия кнопки "Запустить" в карточке версии)
/api/launcher/initДанный эндпоинт не был полностью проанализирован. Предположительно дает добро или отказ на запуск клиента(распространяется только на платные версии предположительно)Вызывается из под кастомных лаунчеров для клиентов(файлы в папке версий с названиями версий т.е alpha 1.16.5.exe, test 1.16.5.exe, etc.)

Стоит отметить, что данный запрос идет в обход прокси винды, т.е его нельзя словить обычными средствами(только через proxifier для перенаправления, либо через wireshark для анализа)

Это наиболее важные эндпоинты, по которым обращается сервер. Но вы не сможете по ним прямо обратиться - сервер валидирует все запросы на эндпоинты апишки лаунчера посредством проверки клиентского сертификата, если вы отправите запрос без него, сервер выдаст мнимое File not found.

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

Я начну с как раз общения между webview и native. Как передается порт для соединения по вебсокету? Очень просто - нативка передает в вебвью базовые константы(порт, хвид и настройки типо мемори) т.е настраивает окружение.

Посмотреть вложение 334777

Версия лаунчера захардкожена.
Посмотреть вложение 334778

Все это происходит в одной единственной функции по адресу 0x0000000140166850(в i64 названа SetupEnv)

Здесь происходит и получение хвида и его крипт и передача всех данных в вебвью

Здесь мы видим - получение memory методом(GlobalMemoryStatusEx), получение хвида посредством GetHwid(к сожалению данная функция была виртуализирована)
Посмотреть вложение 334779

Причем стоит подметить, что это не стандартная функция из SDK VMPROTECT, сдк собирает гораздо меньше данных о системе.

При ошибке получения HWID нативка убивает свой процесс(Хотя в вебвью есть заданный fallback при отсутствии HWID)
Посмотреть вложение 334780


При получении HWID он шифруется AES, ключи и IV не защищены в целом
Посмотреть вложение 334781

При ошибке шифрования хвида такое-же поведение, как при ошибке получения его(килл процесса)

Далее перейдем к анализу нетворкинга. Хотелось бы подметить, что я не заметил виртуализированных функций кроме получения хвида, энтрипоинта и tls_callback0

Сначала разберем загрузку файлов webview - она происходит в функции sub_14048E0A0(0x0000000140158730) в i64 подписана как DownloadWebFiles

Посмотреть вложение 334782
Происходит все этим запросом - он отправляет запрос на URL_WEB_FILES(или же /storage/launcher/cache.json) и парсит данный json, и далее по нему качает все файлы(идет далее по коду)

Так-же отправляет запросы функция sub_140150260(0x0000000140150260) или же DownloadVersionFiles
Посмотреть вложение 334783
В большинстве своем у данной функции такой-же принцип - парсит json объект и по данным в нем качает все необходимые файлы.

Так-же советую посмотреть, какие функции вызывают их(DownloadWebFIles и DownloadVersionFiles).

В большинстве своем более разбирать нечего, только подмечу, что заревершены curl функции, которые вы можете хукать при желании.

Разбирать кастомную jvm(те самые лаунчеры версий) я не буду т.к там в большинстве своем нечего анализировать, код слишком запутан для статического анализа. Скажу лишь только то, что сигнатуры функций curl частично обратно совместимы из лоадера(где они заревершены) и из лаунчеров, это понадобится вам для реверса. Так-же в лаунчерах в большинстве важных функций сломаны xrefs.

Теперь давайте перейдем к сетевым уязвимостям, посредством которых были выкачаны без сабки все версии, доступные на сервере. Спуфая запросы я заметил, что сервер нурсултана дает мне скачивать файлы альфы без авторизации в аккаунт(т.е без сабки без ничего), но я это заметил - поглядел, подумал и забил. Но вдруг в чате некотором кто-то заговорил о версии 1.21.8 для нурика. И у меня родилась идея забрутфорсить версии - ну и не долго думая я принялся за брутфорс. И через несколько версий я получил 1.21.8. Это был практически сурс - основная структура была полностью видна, но в итоге она была под криптой. Сам менеджер нурсултана подтвердил, что это реальный билд, но старый.
Посмотреть вложение 334784
(Дай бог я не на ратке)

Основная уязвимость(критическая) - отсутствие авторизации на загрузке файлов версий.

Подведем итоги: была проделана большая работа, но в итоге она отдается энтузиастам с данного форума. Основной крякер: FREUDE, в кряке принимали участие так-же PasterEnd, но они более освещали его, чем работали над его разработкой. Анализ спуфера и декодера хвида оставляю на вас. Данный проект более не будет поддерживаться мной. Всем спасибо за внимание.

P.S На момент написания статьи был обновлен лаунчер(все равно дампится на раз-два/приложу позже) + пофикшена дыра в нетворкинге(загрузка файлов с сервера), похоже после такого было грех не подсуетиться аргентозу(осталось только отказаться от vmprotect и перейти на адекватную защиту)))).
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Скрытое содержимое
фух чуть не полезно
 
Здравствуйте, сегодня я хотел бы слить проект кряка нурсултан клиента - была проделана такая работа, как анализ нетворкинга, реверс лоадер(-ов) и иные манипуляции.

В архиве приложены: i64db(дб иды), спуфер запросов под нурик(абсолютно спокойно адаптируется под Celestial Client т.к один протект = один нетворкинг), клиентские сертификаты(позволяют слать неограниченные запросы на api/launcher в обход CF!!!), декриптор хвида(hwid в нурике шифруется AES ключами, которые я достал успешно из лоадера, это позволяет теоретически создать спуфер хвида под нур/целку), все файлы всех доступных на сервере версий(1.16.5, alpha 1.16.5, test 1.16.5, 1.21.8 старый сурс), webview лоадера.

Внимание!!! Данный проект - не является готовым решением!!! Вам необходимо продолжить работу над кряком самому!!!

Я бы хотел начать с описания нетворкинга Нурсултана, т.к именно из за уязвимостей в нем данный проект возымел право на жизнь. Анализ будет представлен в виде таблицы.

Эндпоинт
Значение
Пояснение
/api/launcher/check-updateПроверка на обновление лаунчера.Вызывается при каждом запуске.

При ошибке(любой статус != 200) не пропускает далее в лаунчер, просит установить обновление. При успехе(200) продолжает работу.
/api/launcher/userПолучает информацию о пользователе.Вызывается при каждом запуске.

При успешном запросе авторизует сразу в лаунчер пропуская ввод логина и пароля(т.к авторизация происходит по JWT-токену). При ошибке просто перебрасывает на ввод логина и пароля.
/api/launcher/loginАвторизует пользователя.Вызывается при вводе логина, пароля и нажатия кнопки "Войти" в главном меню.

Передает в открытом виде логин и пароль, так-же в закрытом виде передает HWID.
/api/launcher/versionsПолучает все версии(клиенты) доступные пользователю.Вызывается при каждой авторизации(через /login или через /user)

Передает json объект со всеми версиями и их объектами.
/api/launcher/startПолучает необходимые аргументы, иногда готовые команды(не было проанализировано полностью) для запуска клиента.Вызывается при запуске клиента из меню(нажатия кнопки "Запустить" в карточке версии)
/api/launcher/initДанный эндпоинт не был полностью проанализирован. Предположительно дает добро или отказ на запуск клиента(распространяется только на платные версии предположительно)Вызывается из под кастомных лаунчеров для клиентов(файлы в папке версий с названиями версий т.е alpha 1.16.5.exe, test 1.16.5.exe, etc.)

Стоит отметить, что данный запрос идет в обход прокси винды, т.е его нельзя словить обычными средствами(только через proxifier для перенаправления, либо через wireshark для анализа)

Это наиболее важные эндпоинты, по которым обращается сервер. Но вы не сможете по ним прямо обратиться - сервер валидирует все запросы на эндпоинты апишки лаунчера посредством проверки клиентского сертификата, если вы отправите запрос без него, сервер выдаст мнимое File not found.

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

Я начну с как раз общения между webview и native. Как передается порт для соединения по вебсокету? Очень просто - нативка передает в вебвью базовые константы(порт, хвид и настройки типо мемори) т.е настраивает окружение.

Посмотреть вложение 334777

Версия лаунчера захардкожена.
Посмотреть вложение 334778

Все это происходит в одной единственной функции по адресу 0x0000000140166850(в i64 названа SetupEnv)

Здесь происходит и получение хвида и его крипт и передача всех данных в вебвью

Здесь мы видим - получение memory методом(GlobalMemoryStatusEx), получение хвида посредством GetHwid(к сожалению данная функция была виртуализирована)
Посмотреть вложение 334779

Причем стоит подметить, что это не стандартная функция из SDK VMPROTECT, сдк собирает гораздо меньше данных о системе.

При ошибке получения HWID нативка убивает свой процесс(Хотя в вебвью есть заданный fallback при отсутствии HWID)
Посмотреть вложение 334780


При получении HWID он шифруется AES, ключи и IV не защищены в целом
Посмотреть вложение 334781

При ошибке шифрования хвида такое-же поведение, как при ошибке получения его(килл процесса)

Далее перейдем к анализу нетворкинга. Хотелось бы подметить, что я не заметил виртуализированных функций кроме получения хвида, энтрипоинта и tls_callback0

Сначала разберем загрузку файлов webview - она происходит в функции sub_14048E0A0(0x0000000140158730) в i64 подписана как DownloadWebFiles

Посмотреть вложение 334782
Происходит все этим запросом - он отправляет запрос на URL_WEB_FILES(или же /storage/launcher/cache.json) и парсит данный json, и далее по нему качает все файлы(идет далее по коду)

Так-же отправляет запросы функция sub_140150260(0x0000000140150260) или же DownloadVersionFiles
Посмотреть вложение 334783
В большинстве своем у данной функции такой-же принцип - парсит json объект и по данным в нем качает все необходимые файлы.

Так-же советую посмотреть, какие функции вызывают их(DownloadWebFIles и DownloadVersionFiles).

В большинстве своем более разбирать нечего, только подмечу, что заревершены curl функции, которые вы можете хукать при желании.

Разбирать кастомную jvm(те самые лаунчеры версий) я не буду т.к там в большинстве своем нечего анализировать, код слишком запутан для статического анализа. Скажу лишь только то, что сигнатуры функций curl частично обратно совместимы из лоадера(где они заревершены) и из лаунчеров, это понадобится вам для реверса. Так-же в лаунчерах в большинстве важных функций сломаны xrefs.

Теперь давайте перейдем к сетевым уязвимостям, посредством которых были выкачаны без сабки все версии, доступные на сервере. Спуфая запросы я заметил, что сервер нурсултана дает мне скачивать файлы альфы без авторизации в аккаунт(т.е без сабки без ничего), но я это заметил - поглядел, подумал и забил. Но вдруг в чате некотором кто-то заговорил о версии 1.21.8 для нурика. И у меня родилась идея забрутфорсить версии - ну и не долго думая я принялся за брутфорс. И через несколько версий я получил 1.21.8. Это был практически сурс - основная структура была полностью видна, но в итоге она была под криптой. Сам менеджер нурсултана подтвердил, что это реальный билд, но старый.
Посмотреть вложение 334784
(Дай бог я не на ратке)

Основная уязвимость(критическая) - отсутствие авторизации на загрузке файлов версий.

Подведем итоги: была проделана большая работа, но в итоге она отдается энтузиастам с данного форума. Основной крякер: FREUDE, в кряке принимали участие так-же PasterEnd, но они более освещали его, чем работали над его разработкой. Анализ спуфера и декодера хвида оставляю на вас. Данный проект более не будет поддерживаться мной. Всем спасибо за внимание.

P.S На момент написания статьи был обновлен лаунчер(все равно дампится на раз-два/приложу позже) + пофикшена дыра в нетворкинге(загрузка файлов с сервера), похоже после такого было грех не подсуетиться аргентозу(осталось только отказаться от vmprotect и перейти на адекватную защиту)))).
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Скрытое содержимое
фух чуть не крякнул
 
"похоже после такого было грех не подсуетиться аргентозу(осталось только отказаться от vmprotect и перейти на адекватную защиту))))." Ты понимаешь то, что ты обсираешь VMProtect, хотя сам не смог разобрать код под ним? Браво.
 
Назад
Сверху Снизу