Загрузка...

Пишем bypass обход standoff2

Тема в разделе Статьи создана пользователем ArmenShop 9 ноя 2022. (поднята 1 апр 2023) 12 820 просмотров

  1. ArmenShop
    ArmenShop Автор темы 9 ноя 2022 :3 153 20 май 2022
    Всем привет.:animewave:

    Сегодня будем учиться писать свой обход Bypass для standoff 2.

    Приступим. ⭐

    Давайте начнем.

    Во первых я научу вас логать античит. Для начало вам нужно:
    - Оффсет
    - Код

    Для того,что-бы найти оффсет для лога,вам нужен дамп. Заходим в "dump.cs" и пишем в поиск: "= 10)" и вам выдается один оффсет!

    Дальше вам нужен код. Это обычный код войда который просто хукнут на LOGI.
    Вот он код:

    void* (*old_Log)(void* inst, monoString* sub_704, uint sub_347);
    void* Log(void* inst, monoString* sub_704, uint sub_347) {
    if (inst != NULL) {
    LOGI("%s", sub_704->toChars());
    }
    return old_Log(inst, sub_704, sub_347)
    }

    Этот код нужно поместить в место где у вас находятся хуки. Если вы это не понимаете,то в вашем сурсе должна быть внизу надпись "---- Hooking ----" или что-то похожее,нужно вставить этот код после этого текста,если этого текста нет то просто вставьте этот код после кейсов. Пример:

    Case 123:
    feature1 = !feature1;
    break;

    void* (*old_Log)(void* inst, monoString* sub_704, uint sub_347);
    void* Log(void* inst, monoString* sub_704, uint sub_347) {
    if (inst != NULL) {
    LOGI("%s", sub_704->toChars());
    }
    return old_Log(inst, sub_704, sub_347)
    }

    Должно быть понятно.

    Если у вас ошибки,то нужно найти файл logger.h, он может быть в любом сурсе в папке includes, по путю : /app/src/main/jni/Includes
    и потом нужно файл logger.h перенести в ваш сурс,по такому же путю и указать в файле main.cpp на первой строке: #include <Includes/Logger.h>

    Все, мы вставили код,что теперь? Теперь нужно прявязать наш код к оффсету.

    MSHookFunction((void *) getAbsoluteAddress("libil2cpp.so", 0x123456), (void *) Log, (void **)&old_Log);

    Вместо 0x123456 мы должны вставить оффсет который мы получили из "dump.cs".

    Готово, компилим наш сурс. Кстати, чуть не забыл, вам обязательно нужны рут права чтобы получить ****.

    Вот мы скомпилили наш сурс и теперь переходим в "play market". Вводим в поиск "logcat reader". Скачиваем это приложение,даем ему все разрешения и выбираем корневой метод, разрешаем рут и все.

    Теперь то меню которые мы скомпилили нужно вшить в игру, и добавить туда .smali обход, к примеру mUnityPlayer.smali, его можно найти везде в группах телеграмма. Просто переносим этот обход по путю smali/com/unity3d/player и потом возвращаемся обратно и заходим в файл:
    "Androidmanifest.xml" и переходим к :

    < aplication
    android:label="string_inactive408037/app_name"
    android:icon="Mipmap/app_icon"
    android:allowBackup="false"
    android:supportsRtl="true"
    android:banner="@drawable/app_banner"
    android:isGame="true"
    android:roundIcon="Mipmap/app_icon_round"
    android:appComponentFactory="androidx.core.app.CoreComponentFactory"
    android:requestLegacyExternalStorage="true"

    и после строки android:icon="Mipmap/app_icon" мы пишем:
    - android:name=".mUnityPlayer"

    Потом нам нужно будет перенести оригинальный апк стандоффа в папку assets и указать название:
    - base.apk

    Потом нам нужно будет перейти в приложение "Logcat Reader" и потом зайти в нашу игру, и зайти через фейсбук аккаунт, и подождать пока пройдет проверка данных пользователя до конца. И захадить в приложение "Logcat reader" и в приложение в поиск ввести "Mod_Menu". Все, я вас поздравляю,вы логнули античит!



    Для начала,я расскажу вам основы.

    Чтобы научиться писать обход, сначало нужно логнуть античит это есть в спойлере - "логаем античит".

    После того как вы логнули античит полетели писать свой обход.

    --------------------------------------------

    Для начала,существуют два способа написать обход. Через "monoString" и через "void". Я бы советовал писать через "monoString", так как код получается меньше.

    Начнем с начала, нам нужно знать типы данных с++.

    В обход нужно ретурнуть текст, поэтому тип данных - "string". В тип данных "string" входит "void" и "monoString", так как "monoString" - монострока, а void — тип, спецификатор типа и ключевое слово в языках программирования С, C++, Java, C#, Objective-C, D, ActionScript и PHP. Среди современных языков программирования ключевое слово void впервые появилось в C++ для поддержки концепции обобщенных указателей.

    --------------------------------------------

    Теперь пишем начало обхода. Я покажу как писать начало.

    Начало каждого хука:

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    }

    Далее нам нужно писать внутренности обхода.

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    std::string valtostd(old_safestring(inst)->toChars());
    }

    Теперь, когда мы пишем поиск чего-либо, нам нужно указать переменую valtostd.

    Теперь пишем поиск.

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    std::string valtostd(old_safestring(inst)->toChars());
    if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){

    }
    }

    Так,вот я написал поиск base.apk и |main. , чтобы вернуть оригиальные кэши игры. Которые мы получили в ****, вот пример:

    base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473


    Я написал в поиск - "base.apk" и "|main.", потому-что в начале нашех хэшей указаны эти названия.
    Теперь мы пишем ретурн.

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    std::string valtostd(old_safestring(inst)->toChars());
    if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
    }
    }

    Все готово. Мы ретурнули оригинальные кэши игры. Дальше нужно ретурнуть сигнатуру,сигнатура всегда одна и она не меняется. И мы тоже получаем ее в логах, вот она:

    lcG7acvUIg0k4FQSQmAbyw1tN0o=

    Пишем поиск сигнатуры и ретурнаем её.

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    std::string valtostd(old_safestring(inst)->toChars());
    if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
    } else if (contains(valtostd, "=") && contains(valtostd, "data")){
    return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
    }
    }

    Готово, мы ретурнули сигнатуру. Теперь нужно ретурнуть проверку кэша,чтобы мы смогли в нашем апк заменить кэш без всяких проблем и играть с другим кэшем.

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    std::string valtostd(old_safestring(inst)->toChars());
    if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
    } else if (contains(valtostd, "=") && contains(valtostd, "data")){
    return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
    } else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
    }
    }

    А теперь объязательно нужно ретурнуть анти-бан девайс,чтобы бан по девайсу снимался автоматически.

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    std::string valtostd(old_safestring(inst)->toChars());
    if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
    } else if (contains(valtostd, "=") && contains(valtostd, "data")){
    return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
    } else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
    } else if (contains(valtostd, "3") && contains(valtostd, "|") && contains(valtostd, " ") && contains(valtostd.length() == 16){
    return CreateMonoString(gen_random(16).c_str());
    }
    }

    Готово. Теперь нужно сделать так чтобы ваша либка не детектилась, но этому вы научитесь в следующем этапе.

    А теперь нужно закончить наш код обхода!

    monoString* (*old_safestring)(void* inst);
    monoString* safestring(*void inst){
    std::string valtostd(old_safestring(inst)->toChars());
    if (contains(valtostd, "base.apk:") && contains(valtostd, "|main.")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818|main.2010.com.axlebolt.standoff2.obb:933bf54569583031ecfe5ff367c76958:1401339473");
    } else if (contains(valtostd, "=") && contains(valtostd, "data")){
    return CreateMonoString("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
    } else if (contains(valtostd, "base.apk") && contains(valtostd, "/data") && contains(valtostd, "|") && contains(valtostd, ".com.axlebolt.standoff2.obb:")){
    return CreateMonoString("base.apk:495616b01919ae6fb793dbd30df08015:94530818");
    } else if (contains(valtostd, "3") && contains(valtostd, "|") && contains(valtostd, " ") && contains(valtostd.length() == 16){
    return CreateMonoString(gen_random(16).c_str());
    } else if (contains(valtostd, "/data/") && contains(valtostd, ".so") && contains(valtostd, "|")){
    }
    return old_safestring(inst);
    }
    }


    --------------------------------------------


    Метод: "Как получить хэши".

    1) Заходим в приложение "mt manager". У вас должен быть скачан оригинальный хэш и игра.

    2) Переходим к директории кэша и зажимаем. Когда появляется окно, жмем "свойства". Позже, жмем "проверить". Копируем самое первое "MD5". И жмем "закрыть".

    3) Снова зажимаем, выбираем "свойства" и ищем там "размер". Жмем на него 2-3 секунды, он копируется в буфер обмена.

    4) Проделываем тоже самое только с игрой, а не кэшем. Получаем:

    base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588 main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100

    5) Мы их совмещаем с помощью знака: "|". Итог:

    base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588|main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100

    _______________________________________

    Метод: "Возврат обратно в игру"

    1) Для этого, нам понадобится оффсет. Их 2:

    "get_value" и ".ctor".

    Чем они отличаются?

    "get_value" - используется для обхода на "monoString*" ( private string )
    ".ctor" - используется для обхода на "void" ( public void )

    Чтобы их найти, нужно:

    ".ctor" = в поиск:
    = 10) он там один, выглядит так:

    // RVA: 0x9E9A0C Offset: 0x9E9A0C VA: 0x9E9A0C
    public void .ctor(string GLHMNACCDLO, uint HBAECMMLGPK = 10) { }

    get_value = в поиск:
    = 10) и ищем среди него, там их 3, они выглядят так:

    // RVA: 0x9E9824 Offset: 0x9E9824 VA: 0x9E9824
    public string GPFKAGJCNCD() { }

    _______________________________________

    Для начала, пишем обход на ".ctor":

    Обычное начало каждого хука:

    void (*название_хука)(...);
    void название_хука_другое(...){

    }


    Я буду использовать такие названия:

    anti_ban_system_general
    anti_ban_system

    void (*anti_ban_system_general)(...);
    void anti_ban_system(...){

    }

    Теперь нужно вместо (...) вставить наши переменные,они уже прописаны в оффсете, вот:

    public void .ctor(string GLHMNACCDLO, uint HBAECMMLGPK = 10) { }

    Так и делаем.

    void (*anti_ban_system_general)(void* inst, monoString* value, uint KeyLength);
    void anti_ban_system(void* inst, monoString* value, uint KeyLength){

    }

    Спросите вы,почему я взял именно такие значения? Ответ простой - так было написано в дампе 0.17.1 ( без шифра ).

    Теперь нужно написать переменную, которая будет отвечать за возврат и поиск!

    Это делается так:

    void (*anti_ban_system_general)(void* inst, monoString* value, uint KeyLength);
    void anti_ban_system(void* inst, monoString* value, uint KeyLength){
    if (inst != NULL) {
    std::string valtostd = value->get_sting(); // valtostd (поиск) | value (возврат)
    }

    }

    Мы задали переменной "valtostd" значение поиск, а "value" - возврат.

    Теперь нужно вернуть оригинальные хэши. Приступаем. Из прошлого урока мы нашли хэши:

    base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588|main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100

    Теперь нужно их вернуть обратно в игру.

    void (*anti_ban_system_general)(void* inst, monoString* value, uint KeyLength);
    void anti_ban_system(void* inst, monoString* value, uint KeyLength){
    if (inst != NULL) {
    std::string valtostd = value->get_sting(); // valtostd (поиск) | value (возврат)
    if (valtostd.find("base.apk:") && (valtostd.find("|main.")) && (valtostd.find("2020.com.axlebolt.standoff2.obb:")) != std::string::npos){
    value = CreateMonoString("base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588|main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100");
    }
    }

    }

    Итак, мы вернули оригинальшые хэши обратно в игру. Обошли проверку хэшей игры и кэша. Теперь нужно обойти проверку сигнатуры.

    _____________________________________________________________________________________________

    Метод: "Как получить сигнатуру"

    Давайте начнем.

    Во первых я научу вас логать античит. Для начало вам нужно:
    - Оффсет
    - Код

    Для того,что-бы найти оффсет для лога,вам нужен дамп. Заходим в "dump.cs" и пишем в поиск: "= 10)" и вам выдается один оффсет!

    Дальше вам нужен код. Это обычный код войда который просто хукнут на LOGI.
    Вот код:

    void* (*old_Log)(void* inst, monoString* sub_704, uint sub_347);
    void* Log(void* inst, monoString* sub_704, uint sub_347) {
    if (inst != NULL) {
    LOGI("%s", sub_704->toChars());
    }
    return old_Log(inst, sub_704, sub_347)
    }

    Этот код нужно поместить в место где у вас находятся хуки. Если вы это не понимаете,то в вашем сурсе должна быть внизу надпись "---- Hooking ----" или что-то похожее.

    void* (*old_Log)(void* inst, monoString* sub_704, uint sub_347);
    void* Log(void* inst, monoString* sub_704, uint sub_347) {
    if (inst != NULL) {
    LOGI("%s", sub_704->toChars());
    }
    return old_Log(inst, sub_704, sub_347)
    }

    Должно быть понятно.

    Если у вас ошибки,то нужно найти файл logger.h, он может быть в любом сурсе в папке includes, по путю : /app/src/main/jni/Includes
    и потом нужно файл logger.h перенести в ваш сурс,по такому же путю и указать в файле main.cpp на первой строке: #include <Includes/Logger.h>

    Все, мы вставили код, что теперь? Теперь нужно прявязать наш код к оффсету.

    MSHookFunction((void *) getAbsoluteAddress("libil2cpp.so", 0x123456), (void *) Log, (void **)&old_Log);

    Вместо 0x123456 мы должны вставить оффсет который мы получили из "dump.cs".

    Готово, компилим наш сурс. Кстати, чуть не забыл, вам обязательно нужны рут права чтобы получить ****.

    Вот мы скомпилили наш сурс и теперь переходим в "play market". Вводим в поиск "logcat reader". Скачиваем это приложение,даем ему все разрешения и выбираем корневой метод,разрешаем рут и все.

    Теперь то меню которые мы скомпилили нужно вшить в игру, и добавить туда .smali обход, к примеру mUnityPlayer.smali, его можно найти везде в группах телеграмма. Просто переносим этот обход по путю smali/com/unity3d/player и потом возвращаемся обратно и заходим в файл:
    "Androidmanifest.xml" и переходим к :

    < aplication
    android:label="string_inactive408037/app_name"
    android:icon="Mipmap/app_icon"
    android:allowBackup="false"
    android:supportsRtl="true"
    android:banner="@drawable/app_banner"
    android:isGame="true"
    android:roundIcon="Mipmap/app_icon_round"
    android:appComponentFactory="androidx.core.app.CoreComponentFactory"
    android:requestLegacyExternalStorage="true"
    и после строки android:icon="Mipmap/app_icon" мы пишем:
    - android:name=".mUnityPlayer"

    Потом нам нужно будет перенести оригинальный апк стандоффа в папку assets и указать название:
    - base.apk

    Потом нам нужно будет перейти в приложение "Logcat Reader" и потом зайти в нашу игру, и зайти через фейсбук аккаунт, и подождать пока пройдет проверка данных пользователя до конца. И заходить в приложение "Logcat reader" и в приложение в поиск ввести "Mod_Menu". Все,я вас поздравляю,вы логнули античит!

    _______________________________________

    Итак, мы логнули античит и получили много новых значений,они понадобятся нам все.

    Мы получили сигнатуру! Она выглядит так:

    lcG7acvUIg0k4FQSQmAbyw1tN0o=

    Добавим ее так-же в обход как и хэши:

    void (*anti_ban_system_general)(void* inst, monoString* value, uint KeyLength);
    void anti_ban_system(void* inst, monoString* value, uint KeyLength){
    if (inst != NULL) {
    std::string valtostd = value->get_sting(); // valtostd (поиск) | value (возврат)
    if (valtostd.find("base.apk:") && (valtostd.find("|main.")) && (valtostd.find("2020.com.axlebolt.standoff2.obb:")) && (valtostd.find("|")) != std::string::npos){
    value = CreateMonoString("base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588|main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100");
    } else if (valtostd.find("=") && (valtostd.find("|")) != std::string::npos){
    value = CreateMonostring("lcG7acvUIg0k4FQSQmAbyw1tN0o=");
    }
    }

    }

    Готово, мы добавили сигнатуру и хэши в наш обход. Но случилась проблема, axlebolt детектит ваш девайс айди и банит его. Нужно это исправить, в логах мы нашли наш девайс айди:

    12h456asd123fd67 (пример)

    Что же нам делать, чтобы софт автоматом снимал бан девайс?

    Точно! Нужно сгенерировать новый девайс айди. Пишем код который генерирует 16 рандомных значений:

    std::string gen_random(const int len) {
    static const char alphanum[] =
    "0123456789"
    "abcdefghijklmnopqrstuvwxyz";
    std::string tmp_s;
    tmp_s.reserve(len);
    for (int i = 0; i < len; ++i) {
    tmp_s += alphanum[rand() % (sizeof(alphanum) - 1)];
    }
    return tmp_s;
    }

    И теперь нужно вернуть наше значение в обход,чтобы вернуть ровно 16 символов зададим этому значение 16

    Сделаем это так:

    void (*anti_ban_system_general)(void* inst, monoString* value, uint KeyLength);
    void anti_ban_system(void* inst, monoString* value, uint KeyLength){
    if (inst != NULL) {
    std::string valtostd = value->get_sting(); // valtostd (поиск) | value (возврат)
    if (valtostd.find("base.apk:") && (valtostd.find("|main.")) && (valtostd.find("2020.com.axlebolt.standoff2.obb:")) && (valtostd.find("|")) != std::string::npos){ // поиск хэшей base.apk | .main | 2020.com.axlebolt.standoff2.obb: |
    value = CreateMonoString("base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588|main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100"); // возврат хэшей base.apk | .main | 2020.com.axlebolt.standoff2.obb: |
    } else if (valtostd.find("=") && (valtostd.find("|")) != std::string::npos){ // поиск сигнатуры
    value = CreateMonostring("lcG7acvUIg0k4FQSQmAbyw1tN0o="); // возврат сигнатуры
    } else if (valtostd.find("3") && (valtostd.find("|")) && (valtostd.find(" ")) && (valtostd.length() == 16) != std::string::npos){ // поиск вашего девайс айди и задача чтобы символов было == 16
    value = CreateMonoString(gen_random(16).c_str()); // генерация 16 символов
    }
    }

    }

    Так, мы написали анти-бан девайс и столкнулись с проблемой,наша либ детектится. Нужно подумать, что можно с этим сделать? Путь детекта:

    /data/data/com.axlebolt.standoff2/cache/libgvraudio.so

    Это я нашел в логах!

    Так, а что если загружать нашу либ бесконечно, и детекта - не будет!

    Для этого нам понадобится код replaceAll:

    void replaceAll(std::string& str, const std::string& from, const std::string& to) {
    if(from.empty())
    return;
    size_t start_pos = 0;
    while((start_pos = str.find(from, start_pos)) != std::string::npos) {
    str.replace(start_pos, from.length(), to);
    start_pos += to.length();
    }
    }

    немного об нем:

    replaceAll - поможет загрузить твою либ в игру бесконечно и античит не будет замечать ее.

    так,сделаем это так.

    наш путь детекта:

    std::string path_to_detect = "/data/data/com.axlebolt.standoff2/cache/libgraudio.so";

    void (*anti_ban_system_general)(void* inst, monoString* value, uint KeyLength);
    void anti_ban_system(void* inst, monoString* value, uint KeyLength){
    if (inst != NULL) {
    std::string valtostd = value->get_sting(); // valtostd (поиск) | value (возврат)
    if (valtostd.find("base.apk:") && (valtostd.find("|main.")) && (valtostd.find("2020.com.axlebolt.standoff2.obb:")) && (valtostd.find("|")) != std::string::npos){ // поиск хэшей base.apk | .main | 2020.com.axlebolt.standoff2.obb: |
    value = CreateMonoString("base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588|main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100"); // возврат хэшей base.apk | .main | 2020.com.axlebolt.standoff2.obb: |
    } else if (valtostd.find("=") && (valtostd.find("|")) != std::string::npos){ // поиск сигнатуры
    value = CreateMonostring("lcG7acvUIg0k4FQSQmAbyw1tN0o="); // возврат сигнатуры
    } else if (valtostd.find("3") && (valtostd.find("|")) && (valtostd.find(" ")) && (valtostd.length() == 16) != std::string::npos){ // поиск вашего девайс айди и задача чтобы символов было == 16
    value = CreateMonoString(gen_random(16).c_str()); // генерация 16 символов
    } else if (valtostd.find("/data/") && (valtostd.find("data/")) && (valtostd.find("com.axlebolt.standoff2/")) && (valtostd.find("cache/")) && (valtostd.find(".so")) != std::string::npos){
    std::string path_to_detect = "/data/data/com.axlebolt.standoff2/cache/libgraudio.so";
    if (valtostd.find(path_to_detect)){
    std::string basicString;
    basicString += replaceAll(valtostd, (path_to_detect + "|"));
    value = CreateMonoString(basicString.c_str());
    }
    }
    }

    }

    Осталось закончить код!

    void (*anti_ban_system_general)(void* inst, monoString* value, uint KeyLength);
    void anti_ban_system(void* inst, monoString* value, uint KeyLength){
    if (inst != NULL) {
    std::string valtostd = value->get_sting(); // valtostd (поиск) | value (возврат)
    if (valtostd.find("base.apk:") && (valtostd.find("|main.")) && (valtostd.find("2020.com.axlebolt.standoff2.obb:")) && (valtostd.find("|")) != std::string::npos){ // поиск хэшей base.apk | .main | 2020.com.axlebolt.standoff2.obb: |
    value = CreateMonoString("base.apk:c233fb0fcab72e288092d64f631fd8f7:92552588|main.2020.com.axlebolt.standoff2.obb:e1b42257d641ddf5eae045dd9277547a:1399548100"); // возврат хэшей base.apk | .main | 2020.com.axlebolt.standoff2.obb: |
    } else if (valtostd.find("=") && (valtostd.find("|")) != std::string::npos){ // поиск сигнатуры
    value = CreateMonostring("lcG7acvUIg0k4FQSQmAbyw1tN0o="); // возврат сигнатуры
    } else if (valtostd.find("3") && (valtostd.find("|")) && (valtostd.find(" ")) && (valtostd.length() == 16) != std::string::npos){ // поиск вашего девайс айди и задача чтобы символов было == 16
    value = CreateMonoString(gen_random(16).c_str()); // генерация 16 символов
    } else if (valtostd.find("/data/") && (valtostd.find("data/")) && (valtostd.find("com.axlebolt.standoff2/")) && (valtostd.find("cache/")) && (valtostd.find(".so")) != std::string::npos){
    std::string path_to_detect = "/data/data/com.axlebolt.standoff2/cache/libgraudio.so";
    if (valtostd.find(path_to_detect)){
    std::string basicString;
    basicString += replaceAll(valtostd, (path_to_detect + "|"));
    value = CreateMonoString(basicString.c_str());
    }
    }
    return anti_ban_system_general(inst, value, KeyLength);
    }

    }

    Итак, осталось добавить все **** что есть и бана не будет, если он есть - ищи детекты и думай и фикси. В этой статье рассказно все!


    Как работает анти-бан девайс?

    gen_random - это код который генерирует 16 рандомных букв/цифр. Почему 16? Потому-что axlebolt банит ваш device id, он состоит из 16 рандомных значений (букв/цифр).
    По этому,мы создаем код который генерирует 16 рандомных значений и он будет менять ваш device id и не будет бана по девайсу.
     
    Этот материал оказался полезным?
    Вы можете отблагодарить автора темы путем перевода средств на баланс
    Отблагодарить автора
  2. loozk
    loozk 9 ноя 2022 1 3 ноя 2022
    больше станка
     
    1. ArmenShop Автор темы
      loozk, если авторка будет, оке)
  3. lop3r
    lop3r 9 ноя 2022 Заблокирован(а) 0 2 июл 2022
    привет, го в дс, помощь нужна
     
  4. neiroy
    neiroy 14 ноя 2022 0 10 июн 2021
    долго этому учился ?
     
    1. lop3r
      neiroy, я не совсем жто делаю, я пишу скрипт на стендофф 2 , тут немного не то
  5. nullptr
    отлично спиздил, сделаю вид что monoString это дефолтный класс в плюсах
     
  6. Barcelona
    Barcelona 14 ноя 2022 1463 17 сен 2019
    а для чего он нужен?
     
    1. ArmenShop Автор темы
      Barcelona, чтобы когда читы пишешь бана не было
    2. xoyw92
      ArmenShop, можешь в тг написать @DELAE22S
  7. gwaap
    gwaap 1 дек 2022 158 14 апр 2022
    долго думал?
     
  8. DaeMoon
    DaeMoon 21 дек 2022 0 20 дек 2021
    С античитом посложнее чем с функциями, хотя по разному бывает, я так и не понял как искать ключи для дампа, если знаешь пж напиши не эту тему
     
  9. YamabiShop
    Бро как вшить моностринг обход в сурс стандофф2
     
    1. Sm1pek
      YamabiShop, просто заходи в MT менеджер и там встовля
  10. ya_shedr1n
    ya_shedr1n 13 фев 2023 1 21 сен 2022
    Автор напиши мне паже
     
  11. Trfrx
    Trfrx 20 мар 2023 0 20 мар 2023
    Было бы ахуенно еще бы такое на айос.. но у меня вопрос как выглядит сам «обход» типа именно что там состоит это типа маскируется под чтото или чё..мне просто интересно изучать это я
     
    1. Lond1kkk_inactive6688936
      Trfrx, ты добавляешь обход в сурс, в обходе уже есть маскировка от игры (если правильно написал). Обход этот спиздить не реально, так как твой сурс будет скомпилирован в приложение.
  12. id672210830
    Помогите плз
    --- Сообщение объединено с предыдущим 31 мар 2023
    [IMG][IMG]
     
    1. Lond1kkk_inactive6688936
      id672210830, тебе на английском написали. Ндк не знает что за имя "Моностринг". Чел что то не так сделал, либо не то добавил
  13. jsdflkjlskd
    jsdflkjlskd 13 апр 2023 0 25 дек 2021
    паста,нашел в телеге(его сливали 1000 раз),поменял под лолз,и не объяснил про моностринг.
     
  14. DeatWtf
    DeatWtf 15 апр 2023 1 1 ноя 2021
    ебать спасибо
     
  15. AsErnislkswJ
    AsErnislkswJ 3 май 2023 Заблокирован(а) 2 18 окт 2022
    Ты прокод?
     
    3 май 2023 Изменено
    1. Terik_inactive7390036
      AsErnislkswJ, он даун а не прокод(1. Это не обход а хуки на 0.15.0 (2.обход ты так не напишеш)3. Обход будет с баном есле напишеш):hamster: :sasha:
  16. Geriop
    Geriop 27 дек 2023 0 26 апр 2023
    Ничего не понял бл. КАКОЙ logger.h НАДО ПЕРЕМЕСТИТЬ В ПАПКУ СУРС ИЛИ КУДА НИЧЕГО НЕ ПОНЯЛ ЧТО ТЫ ТАМ НАПИСАЛ
     
  17. lumius_inactive7978135
    это делается через питон?
     
  18. equnow
    equnow 21 фев 2025 0 21 фев 2025
    а на какой проге писали?
     
Загрузка...
Top