Гайд Разбор защиты чита - Akrien Premium [MINECRAFT] [JAVA]

Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
0. ОГЛАВЛЕНИЕ.
Это больше не гайд, а статья.

Сие чудо оснащено протектором - VMProtect 3.5-3.6.
1673211503072.png

1. АВТОРИЗАЦИЯ
Приступим к разбору авторизации.
При авторизации отправляется запрос по сыллке -

akrien.wtf/akrienmc/api/v2/brain.php? a=Sg8pc8d374QX7k0V42WV<|>auth<|>логин<|>пароль<|>E3182ADDBD540B761D1220A995A7323F<|>V1BIUFYyUW9WfEdBUTU0VVJSVkJRbUZOUG9JcU1CVlJWbUZMVVE1TlBvZ2NVblE1SUc1VVBCUlBNQE1zSVBNN0tAZzVKUG9zSn5FNUp9RldeXF1jU0cwc2FMc3VPanxGZlNSfWVTSmxmbUZKXlNgbGBMTmhmaVZ-TUFocV19MTxPbXQ8UTdofmBDUnBNQkZ9ZjZWNV03VWNQaUJwXlxzdU9qfFxWQUljTUJgQVF-TTVJQWd9VW5GRkhQRXNRNDQ1SUdGPE1ATXxJUEFzSTRBc0lRTTRJanN1T2p8RlBRVWNRamgyXlMwY0pXRX5KbkVzTUBdcFU2PX1eV0ZVZ2k9bl5cSn5mN01jTUdFY01HRWNNR0VjTUdFY01Mc3VPanxDZkM9fWdpbyo.&b=JDJhJDEyJEFqUFd0dXJMNkEvZDNGYmRHOW56bnVLOG9MbGk3Y0VIWFFoOVU1MkwvSG9ncS5DWEl4MnY

имеющие себе ваш логин, пароль, дату и информацию о вашем компьютере в зашифрованном виде.
При успешной авторизации, мы получаем такие данные:
Gay|><|юид|><|дата-окончания-подписки|><|версия-чита|><|дата<|>$2y$12$YW3KSoVQ1w3fWYtko6IWZ.1cUemBHphZOcuRCyrV8W777PUxime6C
2. ПРОВЕРКА ВЕРСИИ
При открытие лоадера, до момента авторизации, лоадер проверяет свою версию, отправляя запрос по сыллке -

akrien.wtf/akrienmc/api/v2/brain.php?a=h0A6Lb6X2VF4euN1o01p<|>loader<|>7&b=JDJhJDEyJGdPLklmUE5PcnRUbHpXbDhtLmJQWi5QL0ZYMVRURUlVRmMvWXAyZUo3TS43dDhVUGxGYmsy

При успешно пройденной проверке мы получаем следующие данные:
Uptodate<|>$2y$12$2alSbYJu/d8wWdTJKI4Qjev0.aGjaEJH2kC.LoWSN8klnhpjFXYui

3. JVM
Расскажу всего пару слов, потому что я не сильно ее размусоливал, jvm.dll оснащена VMProtect 3.2-3.5.
В ней присутствует измененный экспорт - Java_java_lang_ClassLoader_defineClass0.

4. ДЫРЫ ЗАЩИТЫ [JVM]
Джава акриена позволяет нам загружать свои классы, первое что я сделал, сделал статический анализ launcher.jar, он валяется в зашифрованном виде на пк, но подгружая свой класс используя рефлексию мы можем получить ее классы, методы классов, филды классов, и многое другое, в конце мы получаем такой результат:


Java:
ru.fals3r.AkrienGuard - super class: java.lang.Object
ru.fals3r.AkrienGuard - method: private static void a([byte[] arg0)
ru.fals3r.AkrienGuard - method: private static [byte[] a(URL arg0)
ru.fals3r.AkrienGuard - method: public static ClassLoader launch(String arg0)
ru.fals3r.b.a - super class: java.lang.Object
ru.fals3r.b.a - method: public static int b(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static int b(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static int b(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static int b(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static [byte[] a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a(int arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a(int arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg2)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg2)
ru.fals3r.b.a - method: public static long a(int arg2)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a([byte[] arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a([byte[] arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg2)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg2)
ru.fals3r.b.a - method: public static long a([byte[] arg2)
ru.fals3r.a.a - super class: java.net.URLClassLoader
ru.fals3r.a.a - Constructor([LURL; arg0)
ru.fals3r.a.a - Constructor(ClassLoader arg0)
ru.fals3r.a.a - Constructor([[byte[] arg0)
ru.fals3r.a.a - Constructor([LURL; arg1)
ru.fals3r.a.a - Constructor(ClassLoader arg1)
ru.fals3r.a.a - Constructor([[byte[] arg1)
ru.fals3r.a.a - Constructor([LURL; arg2)
ru.fals3r.a.a - Constructor(ClassLoader arg2)
ru.fals3r.a.a - Constructor([[byte[] arg2)
ru.fals3r.a.a - method: public Class loadClass(String arg0)
ru.fals3r.a.a - method: public URL findResource(String arg0)
ru.fals3r.a.a - field: private final HashMap a
ru.fals3r.a.b - super class: java.net.URLConnection
ru.fals3r.a.b - Constructor(URL arg0)
ru.fals3r.a.b - Constructor(java.util.HashMap arg0)
ru.fals3r.a.b - Constructor(URL arg1)
ru.fals3r.a.b - Constructor(java.util.HashMap arg1)
ru.fals3r.a.b - field: private final HashMap a
ru.fals3r.a.c - super class: java.net.URLStreamHandler
ru.fals3r.a.c - Constructor(java.util.HashMap arg0)
ru.fals3r.a.c - method: protected URLConnection openConnection(URL arg0)
ru.fals3r.a.c - field: private final HashMap a
И тут я решил сравнить две launcher.jar, фри версии, и премиум, и оказалось, что во фришной версии, были не изменённые названия методов, филдов.
Вкратце я сравнивая получил два нужных метода для получения дешифрованной джар файла чита.
Метод decrypt, download, и филд в класслоадере jarEntries, используя это есть два метода получения джарфайла:
1. Хуканием классов джавы, я получил сыллку, которая получает джар файл зашифрованный AES, получая сыллку можно сделать просто:

Java:
byte[] data = AkrienGuard.a(new URL("https://akrien.wtf/akrienmc/data/premium_1.12.2/get.php")); (т.е метод download)
AkrienGuard.a(data);

try(FileOutputStream fos = new FileOutputStream("Shitty client.jar"))
{
    fos.write(data);
}

// done
2. Используя то что метод AkrienGuard.launch(String str) возвращает класслоадер, не сложно было догадаться получить инстантс класслоадера лаунчера, и имея эти данные просто получить private final HashMap a (jarEntries), и в цикле сохранить файлы по порядку.

5. КОНЕЦ СТАТЬИ.
Но не все так просто, как казалось, на самих классах есть условное шифрование похожее на xor, из за не хватки времени, на полный разбор, и дешифрование классов, это статья заканчивается, но возможно будет вторая часть, где я буду рассказывать про это.

1673211487441.png
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Забаненный
Статус
Оффлайн
Регистрация
4 Янв 2023
Сообщения
12
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
это типа означает что его сложно крякнуть?
 
Начинающий
Статус
Оффлайн
Регистрация
12 Янв 2021
Сообщения
82
Реакции[?]
11
Поинты[?]
1K
> из за не хватки времени
я думаю тебе стоит посмотреть как вообще структура класса выглядит и как работает джвм в целом
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
> из за не хватки времени
я думаю тебе стоит посмотреть как вообще структура класса выглядит и как работает джвм в целом
Да я у колби отмаз спиздил, т.к мне лень было немного в конце
 
окряен.цц
Уникальная группа
Статус
Оффлайн
Регистрация
12 Окт 2017
Сообщения
406
Реакции[?]
176
Поинты[?]
1K
т.к мне лень было немного в конце
Статья почти бесполезна, имхо. Описано всё очень поверхностно.
Предоставленные запросы лоадера можно достать любым хттп дебагером, предоставленные защищенные классы - через тот же хук дефайн класса.
Ты смог пройти самый первый этап на дурачка, который создавался для иллюзии несуществования джарника физически на диске с иллюзией накрытия от банального перехвата ссылки, без кеширования, да простят меня юзеры с ограниченным трафиком и медленным интернетом :NotLikeThis: .
В бете, кстати, кеш присутствует, сам себя не похвалишь, никто не похвалит :kappa:.

Если подытожить: почти того же результата можно было бы добиться за две минуты более простыми путями. К тому же, некоторая информация в этой статье вообще ложная, непроверенная, основанная лишь на твоих догадках.
Но всё же, спасибо за твоё потраченное на это время, было интересно почитать.
 
Барыга на минималках
Пользователь
Статус
Оффлайн
Регистрация
10 Фев 2019
Сообщения
182
Реакции[?]
57
Поинты[?]
2K
Статья почти бесполезна, имхо. Описано всё очень поверхностно.
Предоставленные запросы лоадера можно достать любым хттп дебагером, предоставленные защищенные классы - через тот же хук дефайн класса.
Ты смог пройти самый первый этап на дурачка, который создавался для иллюзии несуществования джарника физически на диске с иллюзией накрытия от банального перехвата ссылки, без кеширования, да простят меня юзеры с ограниченным трафиком и медленным интернетом :NotLikeThis: .
В бете, кстати, кеш присутствует, сам себя не похвалишь, никто не похвалит :kappa:.

Если подытожить: почти того же результата можно было бы добиться за две минуты более простыми путями. К тому же, некоторая информация в этой статье вообще ложная, непроверенная, основанная лишь на твоих догадках.
Но всё же, спасибо за твоё потраченное на это время, было интересно почитать.
ждём авторское решение
 
Забаненный
Статус
Оффлайн
Регистрация
9 Янв 2023
Сообщения
2
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не нужная хуйня, вообще не расписал сути, максимально залупа
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Статья почти бесполезна, имхо. Описано всё очень поверхностно.
Предоставленные запросы лоадера можно достать любым хттп дебагером, предоставленные защищенные классы - через тот же хук дефайн класса.
Ты смог пройти самый первый этап на дурачка, который создавался для иллюзии несуществования джарника физически на диске с иллюзией накрытия от банального перехвата ссылки, без кеширования, да простят меня юзеры с ограниченным трафиком и медленным интернетом :NotLikeThis: .
В бете, кстати, кеш присутствует, сам себя не похвалишь, никто не похвалит :kappa:.

Если подытожить: почти того же результата можно было бы добиться за две минуты более простыми путями. К тому же, некоторая информация в этой статье вообще ложная, непроверенная, основанная лишь на твоих догадках.
Но всё же, спасибо за твоё потраченное на это время, было интересно почитать.
Ну спасибо за твое мнение. Буду вторую часть писать сегодня
Статья почти бесполезна, имхо. Описано всё очень поверхностно.
Предоставленные запросы лоадера можно достать любым хттп дебагером, предоставленные защищенные классы - через тот же хук дефайн класса.
Ты смог пройти самый первый этап на дурачка, который создавался для иллюзии несуществования джарника физически на диске с иллюзией накрытия от банального перехвата ссылки, без кеширования, да простят меня юзеры с ограниченным трафиком и медленным интернетом :NotLikeThis: .
В бете, кстати, кеш присутствует, сам себя не похвалишь, никто не похвалит :kappa:.

Если подытожить: почти того же результата можно было бы добиться за две минуты более простыми путями. К тому же, некоторая информация в этой статье вообще ложная, непроверенная, основанная лишь на твоих догадках.
Но всё же, спасибо за твоё потраченное на это время, было интересно почитать.
И я лишь рассказал половину, проведя анализ launcher.jar, он занимает половину статьи, и какая информация ложная, без негатива, просто интересно
 
Последнее редактирование:
али рождение киберспортсмена ( стандоф 2 )
Эксперт
Статус
Оффлайн
Регистрация
21 Окт 2020
Сообщения
1,478
Реакции[?]
564
Поинты[?]
53K
Начинающий
Статус
Оффлайн
Регистрация
12 Янв 2021
Сообщения
82
Реакции[?]
11
Поинты[?]
1K
> хочешь защиту tenacity посмотреть
там же паста радона от интента
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сфанатил у колби подачу и сделал разбор величайшей супериор-защиты проекта на кубы :FeelsBadMan:
Ну надо же как то из кубов уходить и что нибудь сварганить:roflanEbalo:
а можно поподробнее что это?
Рефлексия (от позднелат. reflexio — обращение назад) — это механизм исследования данных о программе во время её выполнения. Рефлексия позволяет исследовать информацию о полях, методах и конструкторах классов.
 
Murasaki
Разработчик
Статус
Оффлайн
Регистрация
18 Мар 2020
Сообщения
431
Реакции[?]
870
Поинты[?]
206K
Статья относительно неплохая для новичка в реверс-инжиниринге, я будучи неопытным тоже делал довольно мелкие статьи в 21 году, получалось конечно так себе, чего только стоит та же статья про Neverlose.cc xD, где объяснения работы лоадера были на уровне твоей статьи, всё приходит с опытом.

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

Успехов тебе!:seemsgood:
 
Начинающий
Статус
Оффлайн
Регистрация
3 Янв 2023
Сообщения
27
Реакции[?]
1
Поинты[?]
0
0. ОГЛАВЛЕНИЕ.
Это больше не гайд, а статья.

Сие чудо оснащено протектором - VMProtect 3.5-3.6.
Посмотреть вложение 234667

1. АВТОРИЗАЦИЯ
Приступим к разбору авторизации.
При авторизации отправляется запрос по сыллке -

akrien.wtf/akrienmc/api/v2/brain.php? a=Sg8pc8d374QX7k0V42WV<|>auth<|>логин<|>пароль<|>E3182ADDBD540B761D1220A995A7323F<|>V1BIUFYyUW9WfEdBUTU0VVJSVkJRbUZOUG9JcU1CVlJWbUZMVVE1TlBvZ2NVblE1SUc1VVBCUlBNQE1zSVBNN0tAZzVKUG9zSn5FNUp9RldeXF1jU0cwc2FMc3VPanxGZlNSfWVTSmxmbUZKXlNgbGBMTmhmaVZ-TUFocV19MTxPbXQ8UTdofmBDUnBNQkZ9ZjZWNV03VWNQaUJwXlxzdU9qfFxWQUljTUJgQVF-TTVJQWd9VW5GRkhQRXNRNDQ1SUdGPE1ATXxJUEFzSTRBc0lRTTRJanN1T2p8RlBRVWNRamgyXlMwY0pXRX5KbkVzTUBdcFU2PX1eV0ZVZ2k9bl5cSn5mN01jTUdFY01HRWNNR0VjTUdFY01Mc3VPanxDZkM9fWdpbyo.&b=JDJhJDEyJEFqUFd0dXJMNkEvZDNGYmRHOW56bnVLOG9MbGk3Y0VIWFFoOVU1MkwvSG9ncS5DWEl4MnY

имеющие себе ваш логин, пароль, дату и информацию о вашем компьютере в зашифрованном виде.
При успешной авторизации, мы получаем такие данные:
Gay|><|юид|><|дата-окончания-подписки|><|версия-чита|><|дата<|>$2y$12$YW3KSoVQ1w3fWYtko6IWZ.1cUemBHphZOcuRCyrV8W777PUxime6C
2. ПРОВЕРКА ВЕРСИИ
При открытие лоадера, до момента авторизации, лоадер проверяет свою версию, отправляя запрос по сыллке -

akrien.wtf/akrienmc/api/v2/brain.php?a=h0A6Lb6X2VF4euN1o01p<|>loader<|>7&b=JDJhJDEyJGdPLklmUE5PcnRUbHpXbDhtLmJQWi5QL0ZYMVRURUlVRmMvWXAyZUo3TS43dDhVUGxGYmsy

При успешно пройденной проверке мы получаем следующие данные:
Uptodate<|>$2y$12$2alSbYJu/d8wWdTJKI4Qjev0.aGjaEJH2kC.LoWSN8klnhpjFXYui

3. JVM
Расскажу всего пару слов, потому что я не сильно ее размусоливал, jvm.dll оснащена VMProtect 3.2-3.5.
В ней присутствует измененный экспорт - Java_java_lang_ClassLoader_defineClass0.

4. ДЫРЫ ЗАЩИТЫ [JVM]
Джава акриена позволяет нам загружать свои классы, первое что я сделал, сделал статический анализ launcher.jar, он валяется в зашифрованном виде на пк, но подгружая свой класс используя рефлексию мы можем получить ее классы, методы классов, филды классов, и многое другое, в конце мы получаем такой результат:


Java:
ru.fals3r.AkrienGuard - super class: java.lang.Object
ru.fals3r.AkrienGuard - method: private static void a([byte[] arg0)
ru.fals3r.AkrienGuard - method: private static [byte[] a(URL arg0)
ru.fals3r.AkrienGuard - method: public static ClassLoader launch(String arg0)
ru.fals3r.b.a - super class: java.lang.Object
ru.fals3r.b.a - method: public static int b(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static int b(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static int b(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static int b(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static [byte[] a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a(int arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a(int arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg2)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg2)
ru.fals3r.b.a - method: public static long a(int arg2)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a([byte[] arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a([byte[] arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg2)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg2)
ru.fals3r.b.a - method: public static long a([byte[] arg2)
ru.fals3r.a.a - super class: java.net.URLClassLoader
ru.fals3r.a.a - Constructor([LURL; arg0)
ru.fals3r.a.a - Constructor(ClassLoader arg0)
ru.fals3r.a.a - Constructor([[byte[] arg0)
ru.fals3r.a.a - Constructor([LURL; arg1)
ru.fals3r.a.a - Constructor(ClassLoader arg1)
ru.fals3r.a.a - Constructor([[byte[] arg1)
ru.fals3r.a.a - Constructor([LURL; arg2)
ru.fals3r.a.a - Constructor(ClassLoader arg2)
ru.fals3r.a.a - Constructor([[byte[] arg2)
ru.fals3r.a.a - method: public Class loadClass(String arg0)
ru.fals3r.a.a - method: public URL findResource(String arg0)
ru.fals3r.a.a - field: private final HashMap a
ru.fals3r.a.b - super class: java.net.URLConnection
ru.fals3r.a.b - Constructor(URL arg0)
ru.fals3r.a.b - Constructor(java.util.HashMap arg0)
ru.fals3r.a.b - Constructor(URL arg1)
ru.fals3r.a.b - Constructor(java.util.HashMap arg1)
ru.fals3r.a.b - field: private final HashMap a
ru.fals3r.a.c - super class: java.net.URLStreamHandler
ru.fals3r.a.c - Constructor(java.util.HashMap arg0)
ru.fals3r.a.c - method: protected URLConnection openConnection(URL arg0)
ru.fals3r.a.c - field: private final HashMap a
И тут я решил сравнить две launcher.jar, фри версии, и премиум, и оказалось, что во фришной версии, были не изменённые названия методов, филдов.
Вкратце я сравнивая получил два нужных метода для получения дешифрованной джар файла чита.
Метод decrypt, download, и филд в класслоадере jarEntries, используя это есть два метода получения джарфайла:
1. Хуканием классов джавы, я получил сыллку, которая получает джар файл зашифрованный AES, получая сыллку можно сделать просто:

Java:
byte[] data = AkrienGuard.a(new URL("https://akrien.wtf/akrienmc/data/premium_1.12.2/get.php")); (т.е метод download)
AkrienGuard.a(data);

try(FileOutputStream fos = new FileOutputStream("Shitty client.jar"))
{
    fos.write(data);
}

// done
2. Используя то что метод AkrienGuard.launch(String str) возвращает класслоадер, не сложно было догадаться получить инстантс класслоадера лаунчера, и имея эти данные просто получить private final HashMap a (jarEntries), и в цикле сохранить файлы по порядку.

5. КОНЕЦ СТАТЬИ.
Но не все так просто, как казалось, на самих классах есть условное шифрование похожее на xor, из за не хватки времени, на полный разбор, и дешифрование классов, это статья заканчивается, но возможно будет вторая часть, где я буду рассказывать про это.

Посмотреть вложение 234666
Пожалуйста, авторизуйтесь для просмотра ссылки.
Интересная статья
 
Начинающий
Статус
Оффлайн
Регистрация
10 Авг 2019
Сообщения
45
Реакции[?]
1
Поинты[?]
0
0. ОГЛАВЛЕНИЕ.
Это больше не гайд, а статья.

Сие чудо оснащено протектором - VMProtect 3.5-3.6.
Посмотреть вложение 234667

1. АВТОРИЗАЦИЯ
Приступим к разбору авторизации.
При авторизации отправляется запрос по сыллке -

akrien.wtf/akrienmc/api/v2/brain.php? a=Sg8pc8d374QX7k0V42WV<|>auth<|>логин<|>пароль<|>E3182ADDBD540B761D1220A995A7323F<|>V1BIUFYyUW9WfEdBUTU0VVJSVkJRbUZOUG9JcU1CVlJWbUZMVVE1TlBvZ2NVblE1SUc1VVBCUlBNQE1zSVBNN0tAZzVKUG9zSn5FNUp9RldeXF1jU0cwc2FMc3VPanxGZlNSfWVTSmxmbUZKXlNgbGBMTmhmaVZ-TUFocV19MTxPbXQ8UTdofmBDUnBNQkZ9ZjZWNV03VWNQaUJwXlxzdU9qfFxWQUljTUJgQVF-TTVJQWd9VW5GRkhQRXNRNDQ1SUdGPE1ATXxJUEFzSTRBc0lRTTRJanN1T2p8RlBRVWNRamgyXlMwY0pXRX5KbkVzTUBdcFU2PX1eV0ZVZ2k9bl5cSn5mN01jTUdFY01HRWNNR0VjTUdFY01Mc3VPanxDZkM9fWdpbyo.&b=JDJhJDEyJEFqUFd0dXJMNkEvZDNGYmRHOW56bnVLOG9MbGk3Y0VIWFFoOVU1MkwvSG9ncS5DWEl4MnY

имеющие себе ваш логин, пароль, дату и информацию о вашем компьютере в зашифрованном виде.
При успешной авторизации, мы получаем такие данные:
Gay|><|юид|><|дата-окончания-подписки|><|версия-чита|><|дата<|>$2y$12$YW3KSoVQ1w3fWYtko6IWZ.1cUemBHphZOcuRCyrV8W777PUxime6C
2. ПРОВЕРКА ВЕРСИИ
При открытие лоадера, до момента авторизации, лоадер проверяет свою версию, отправляя запрос по сыллке -

akrien.wtf/akrienmc/api/v2/brain.php?a=h0A6Lb6X2VF4euN1o01p<|>loader<|>7&b=JDJhJDEyJGdPLklmUE5PcnRUbHpXbDhtLmJQWi5QL0ZYMVRURUlVRmMvWXAyZUo3TS43dDhVUGxGYmsy

При успешно пройденной проверке мы получаем следующие данные:
Uptodate<|>$2y$12$2alSbYJu/d8wWdTJKI4Qjev0.aGjaEJH2kC.LoWSN8klnhpjFXYui

3. JVM
Расскажу всего пару слов, потому что я не сильно ее размусоливал, jvm.dll оснащена VMProtect 3.2-3.5.
В ней присутствует измененный экспорт - Java_java_lang_ClassLoader_defineClass0.

4. ДЫРЫ ЗАЩИТЫ [JVM]
Джава акриена позволяет нам загружать свои классы, первое что я сделал, сделал статический анализ launcher.jar, он валяется в зашифрованном виде на пк, но подгружая свой класс используя рефлексию мы можем получить ее классы, методы классов, филды классов, и многое другое, в конце мы получаем такой результат:


Java:
ru.fals3r.AkrienGuard - super class: java.lang.Object
ru.fals3r.AkrienGuard - method: private static void a([byte[] arg0)
ru.fals3r.AkrienGuard - method: private static [byte[] a(URL arg0)
ru.fals3r.AkrienGuard - method: public static ClassLoader launch(String arg0)
ru.fals3r.b.a - super class: java.lang.Object
ru.fals3r.b.a - method: public static int b(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static int b(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static int b(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static int b(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static [byte[] a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a(int arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a(int arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg2)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg2)
ru.fals3r.b.a - method: public static long a(int arg2)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg0)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg0)
ru.fals3r.b.a - method: public static long a([byte[] arg0)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg1)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg1)
ru.fals3r.b.a - method: public static long a([byte[] arg1)
ru.fals3r.b.a - method: public static long a(java.io.InputStream arg2)
ru.fals3r.b.a - method: public static long a(java.io.OutputStream arg2)
ru.fals3r.b.a - method: public static long a([byte[] arg2)
ru.fals3r.a.a - super class: java.net.URLClassLoader
ru.fals3r.a.a - Constructor([LURL; arg0)
ru.fals3r.a.a - Constructor(ClassLoader arg0)
ru.fals3r.a.a - Constructor([[byte[] arg0)
ru.fals3r.a.a - Constructor([LURL; arg1)
ru.fals3r.a.a - Constructor(ClassLoader arg1)
ru.fals3r.a.a - Constructor([[byte[] arg1)
ru.fals3r.a.a - Constructor([LURL; arg2)
ru.fals3r.a.a - Constructor(ClassLoader arg2)
ru.fals3r.a.a - Constructor([[byte[] arg2)
ru.fals3r.a.a - method: public Class loadClass(String arg0)
ru.fals3r.a.a - method: public URL findResource(String arg0)
ru.fals3r.a.a - field: private final HashMap a
ru.fals3r.a.b - super class: java.net.URLConnection
ru.fals3r.a.b - Constructor(URL arg0)
ru.fals3r.a.b - Constructor(java.util.HashMap arg0)
ru.fals3r.a.b - Constructor(URL arg1)
ru.fals3r.a.b - Constructor(java.util.HashMap arg1)
ru.fals3r.a.b - field: private final HashMap a
ru.fals3r.a.c - super class: java.net.URLStreamHandler
ru.fals3r.a.c - Constructor(java.util.HashMap arg0)
ru.fals3r.a.c - method: protected URLConnection openConnection(URL arg0)
ru.fals3r.a.c - field: private final HashMap a
И тут я решил сравнить две launcher.jar, фри версии, и премиум, и оказалось, что во фришной версии, были не изменённые названия методов, филдов.
Вкратце я сравнивая получил два нужных метода для получения дешифрованной джар файла чита.
Метод decrypt, download, и филд в класслоадере jarEntries, используя это есть два метода получения джарфайла:
1. Хуканием классов джавы, я получил сыллку, которая получает джар файл зашифрованный AES, получая сыллку можно сделать просто:

Java:
byte[] data = AkrienGuard.a(new URL("https://akrien.wtf/akrienmc/data/premium_1.12.2/get.php")); (т.е метод download)
AkrienGuard.a(data);

try(FileOutputStream fos = new FileOutputStream("Shitty client.jar"))
{
    fos.write(data);
}

// done
2. Используя то что метод AkrienGuard.launch(String str) возвращает класслоадер, не сложно было догадаться получить инстантс класслоадера лаунчера, и имея эти данные просто получить private final HashMap a (jarEntries), и в цикле сохранить файлы по порядку.

5. КОНЕЦ СТАТЬИ.
Но не все так просто, как казалось, на самих классах есть условное шифрование похожее на xor, из за не хватки времени, на полный разбор, и дешифрование классов, это статья заканчивается, но возможно будет вторая часть, где я буду рассказывать про это.

Посмотреть вложение 234666
Пожалуйста, авторизуйтесь для просмотра ссылки.
Хуйня, я такие проекты ревершу за минуту
 
Сверху Снизу