Загрузка...

We write bypass bypass standoff2

Thread in Articles created by ArmenShop Nov 9, 2022. (bumped Apr 1, 2023) 13,094 views

  1. ArmenShop
    ArmenShop Topic starter Nov 9, 2022 :3 153 May 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 и не будет бана по девайсу.
     
    This article was useful for you?
    You can thank the author of the topic by transferring funds to your balance
    Thank the author
  2. loozk
    loozk Nov 9, 2022 1 Nov 3, 2022
    больше станка
     
    1. ArmenShop Topic starter
      loozk, если авторка будет, оке)
  3. lop3r
    lop3r Nov 9, 2022 Banned 0 Jul 2, 2022
    привет, го в дс, помощь нужна
     
  4. neiroy
    neiroy Nov 14, 2022 0 Jun 10, 2021
    долго этому учился ?
     
    1. lop3r
      neiroy, я не совсем жто делаю, я пишу скрипт на стендофф 2 , тут немного не то
    2. ArmenShop Topic starter
  5. nullptr
    отлично спиздил, сделаю вид что monoString это дефолтный класс в плюсах
     
  6. Barcelona
    Barcelona Nov 14, 2022 1449 Sep 17, 2019
    а для чего он нужен?
     
    1. ArmenShop Topic starter
      Barcelona, чтобы когда читы пишешь бана не было
    2. xoyw92
      ArmenShop, можешь в тг написать @DELAE22S
  7. gwaap
    gwaap Dec 1, 2022 159 Apr 14, 2022
    долго думал?
     
    1. ArmenShop Topic starter
  8. DaeMoon
    DaeMoon Dec 21, 2022 0 Dec 20, 2021
    С античитом посложнее чем с функциями, хотя по разному бывает, я так и не понял как искать ключи для дампа, если знаешь пж напиши не эту тему
     
  9. YamabiShop
    Бро как вшить моностринг обход в сурс стандофф2
     
    1. Sm1pek
      YamabiShop, просто заходи в MT менеджер и там встовля
  10. ya_shedr1n
    ya_shedr1n Feb 13, 2023 1 Sep 21, 2022
    Автор напиши мне паже
     
  11. Trfrx
    Trfrx Mar 20, 2023 0 Mar 20, 2023
    Было бы ахуенно еще бы такое на айос.. но у меня вопрос как выглядит сам «обход» типа именно что там состоит это типа маскируется под чтото или чё..мне просто интересно изучать это я
     
    1. Lond1kkk_inactive6688936
      Trfrx, ты добавляешь обход в сурс, в обходе уже есть маскировка от игры (если правильно написал). Обход этот спиздить не реально, так как твой сурс будет скомпилирован в приложение.
  12. id672210830
    Помогите плз
    The post was merged to previous Mar 31, 2023
    [IMG][IMG]
     
    1. Lond1kkk_inactive6688936
      id672210830, тебе на английском написали. Ндк не знает что за имя "Моностринг". Чел что то не так сделал, либо не то добавил
  13. jsdflkjlskd
    паста,нашел в телеге(его сливали 1000 раз),поменял под лолз,и не объяснил про моностринг.
     
  14. DeatWtf
    DeatWtf Apr 15, 2023 3 Nov 1, 2021
    ебать спасибо
     
  15. AsErnislkswJ
    AsErnislkswJ May 3, 2023 Banned 2 Oct 18, 2022
    Ты прокод?
     
    1. Terik_inactive7390036
      AsErnislkswJ, он даун а не прокод(1. Это не обход а хуки на 0.15.0 (2.обход ты так не напишеш)3. Обход будет с баном есле напишеш):hamster: :sasha:
  16. Geriop
    Geriop Dec 27, 2023 0 Apr 26, 2023
    Ничего не понял бл. КАКОЙ logger.h НАДО ПЕРЕМЕСТИТЬ В ПАПКУ СУРС ИЛИ КУДА НИЧЕГО НЕ ПОНЯЛ ЧТО ТЫ ТАМ НАПИСАЛ
     
  17. lumius_inactive7978135
    это делается через питон?
     
  18. equnow
    equnow Feb 21, 2025 0 Feb 21, 2025
    а на какой проге писали?
     
Top
Loading...