• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

CrackMe Мой первый CrackMe Lvl -1/10

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
245
Реакции
30
Простой и веселый CrackMe Lvl -1/10
Уровень -1, не мне решать уровень сложности.
Решающий этот CrackMe и задаст свой уровень сложности.

Что нужно:
1. Найти пароль. Для ввода требуется логин.
2. Патчинг самой проверки не приветствуется.

С++
Пожалуйста, авторизуйтесь для просмотра ссылки.
@colby57
 

Вложения

Последнее редактирование:
Ну так всетаки, желающих нету?
[ISPOILER]
C++:
Expand Collapse Copy
#include <iostream>
#include <chrono>
#include <thread>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <future>

#include "Obfuscation.h"

using namespace std;
using namespace std::chrono;

static const string base64_chars =
xor_s("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefihgjklmnopqrstuvwxyz0123456789+/");

// Функция для Base64-кодирования строки с измененными символами
string base64_encode(const string& in) {


    string out;
    int val = 0, valb = -6;
    for (unsigned char c : in) {
        val = (val << 8) + c;
        valb += 8;
        while (valb >= 0) {
            out.push_back(base64_chars[(val >> valb) & 0x3F]);
            valb -= 6;
        }
    }
    if (valb > -6) out.push_back(base64_chars[((val << 8) >> (valb + 8)) & 0x3F]);
    while (out.size() % 4) out.push_back('=');
    return out;
}

// Функция для побайтового сравнения строк с XOR
bool complexPasswordCheck(const string& inputPassword, const string& generatedPassword) {
    if (inputPassword.size() != generatedPassword.size()) {
        return false;
    }

    bool result = true;
    for (size_t i = 0; i < inputPassword.size(); ++i) {
        char xored = inputPassword[i] ^ generatedPassword[i];
        result &= (xored == 0);
    }

    if (result) {
        int fakeCheck = (inputPassword[0] ^ 0x5A) & (generatedPassword[1] ^ 0xA5);
        if (fakeCheck == 0) {
            return false;
        }
    }
    else {
        int fakeCheck = (inputPassword[1] ^ 0x33) & (generatedPassword[0] ^ 0xCC);
        if (fakeCheck != 0) {
            return true;
        }
    }

    return result;
}

// Генерация случайного слова на основе времени
string generateRandomWord(time_point<high_resolution_clock> timePoint) {
    auto duration = duration_cast<microseconds>(timePoint.time_since_epoch()).count();
    stringstream ss;
    ss << xor_s("Rnd") << (duration % 10000);
    return ss.str();
}

// Генерация пароля на основе времени, логина и случайного слова
string generatePassword(time_point<high_resolution_clock> startTime, time_point<high_resolution_clock> loginTime, const string& login) {
    auto duration = duration_cast<microseconds>(loginTime - startTime).count();
    int complexity = (duration * 31 + 7) % 100003;
    string randomWord = generateRandomWord(startTime);
    stringstream ss;
    ss << login << complexity << randomWord;
    return base64_encode(ss.str());
}

// Функция для проверки пароля в отдельном потоке
void checkPassword(const string& inputPassword, const string& generatedPassword, promise<bool>& resultPromise) {
    if (inputPassword.empty() || generatedPassword.empty()) {
        resultPromise.set_value(false);
        return;
    }

    bool isPasswordCorrect = complexPasswordCheck(inputPassword, generatedPassword);
    resultPromise.set_value(isPasswordCorrect);
}

// Функция для сложной проверки результата
bool finalCheck(bool accessGranted) {
    int randomValue = rand() % 100;
    int complexCheck = (randomValue * 2 + 7) % 10;
    return (accessGranted && (complexCheck % 2 == 0));
}

// Функция для скрытой проверки
void hiddenResultCheck(future<bool> resultFuture) {
    bool accessGranted = resultFuture.get();

    // Дополнительные уровни абстракции
    bool finalResult = finalCheck(accessGranted);

    // Логика проверки
    if (finalResult) {
        cout << xor_s("Access granted!") << endl;
    }
    else {
        cout << xor_s("Access denied!") << endl;
    }
}

int main() {
    srand(static_cast<unsigned int>(time(nullptr)));

    auto startTime = high_resolution_clock::now();
    this_thread::sleep_for(milliseconds(100));

    auto loginTime = high_resolution_clock::now();
    

    string generatedPassword = generatePassword(startTime, loginTime, xor_s("CrackMe"));
   // cout << "generatedPassword: " << generatedPassword.c_str() << endl;


    string inputPassword;
    cout << xor_s("Enter password: ");
    cin >> inputPassword;

    promise<bool> resultPromise;
    future<bool> resultFuture = resultPromise.get_future();

    thread passwordThread(checkPassword, inputPassword, generatedPassword, ref(resultPromise));

    thread hiddenCheckThread(hiddenResultCheck, move(resultFuture));

    passwordThread.join();
    hiddenCheckThread.join();

    system(xor_s("pause"));

    return 0;
}
[/ISPOILER]
 
Последнее редактирование:
Ну так всетаки, желающих нету?
[ISPOILER]
C++:
Expand Collapse Copy
#include <iostream>
#include <chrono>
#include <thread>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <future>

#include "Obfuscation.h"

using namespace std;
using namespace std::chrono;

static const string base64_chars =
xor_s("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefihgjklmnopqrstuvwxyz0123456789+/");

// Функция для Base64-кодирования строки с измененными символами
string base64_encode(const string& in) {


    string out;
    int val = 0, valb = -6;
    for (unsigned char c : in) {
        val = (val << 8) + c;
        valb += 8;
        while (valb >= 0) {
            out.push_back(base64_chars[(val >> valb) & 0x3F]);
            valb -= 6;
        }
    }
    if (valb > -6) out.push_back(base64_chars[((val << 8) >> (valb + 8)) & 0x3F]);
    while (out.size() % 4) out.push_back('=');
    return out;
}

// Функция для побайтового сравнения строк с XOR
bool complexPasswordCheck(const string& inputPassword, const string& generatedPassword) {
    if (inputPassword.size() != generatedPassword.size()) {
        return false;
    }

    bool result = true;
    for (size_t i = 0; i < inputPassword.size(); ++i) {
        char xored = inputPassword[i] ^ generatedPassword[i];
        result &= (xored == 0);
    }

    if (result) {
        int fakeCheck = (inputPassword[0] ^ 0x5A) & (generatedPassword[1] ^ 0xA5);
        if (fakeCheck == 0) {
            return false;
        }
    }
    else {
        int fakeCheck = (inputPassword[1] ^ 0x33) & (generatedPassword[0] ^ 0xCC);
        if (fakeCheck != 0) {
            return true;
        }
    }

    return result;
}

// Генерация случайного слова на основе времени
string generateRandomWord(time_point<high_resolution_clock> timePoint) {
    auto duration = duration_cast<microseconds>(timePoint.time_since_epoch()).count();
    stringstream ss;
    ss << xor_s("Rnd") << (duration % 10000);
    return ss.str();
}

// Генерация пароля на основе времени, логина и случайного слова
string generatePassword(time_point<high_resolution_clock> startTime, time_point<high_resolution_clock> loginTime, const string& login) {
    auto duration = duration_cast<microseconds>(loginTime - startTime).count();
    int complexity = (duration * 31 + 7) % 100003;
    string randomWord = generateRandomWord(startTime);
    stringstream ss;
    ss << login << complexity << randomWord;
    return base64_encode(ss.str());
}

// Функция для проверки пароля в отдельном потоке
void checkPassword(const string& inputPassword, const string& generatedPassword, promise<bool>& resultPromise) {
    if (inputPassword.empty() || generatedPassword.empty()) {
        resultPromise.set_value(false);
        return;
    }

    bool isPasswordCorrect = complexPasswordCheck(inputPassword, generatedPassword);
    resultPromise.set_value(isPasswordCorrect);
}

// Функция для сложной проверки результата
bool finalCheck(bool accessGranted) {
    int randomValue = rand() % 100;
    int complexCheck = (randomValue * 2 + 7) % 10;
    return (accessGranted && (complexCheck % 2 == 0));
}

// Функция для скрытой проверки
void hiddenResultCheck(future<bool> resultFuture) {
    bool accessGranted = resultFuture.get();

    // Дополнительные уровни абстракции
    bool finalResult = finalCheck(accessGranted);

    // Логика проверки
    if (finalResult) {
        cout << xor_s("Access granted!") << endl;
    }
    else {
        cout << xor_s("Access denied!") << endl;
    }
}

int main() {
    srand(static_cast<unsigned int>(time(nullptr)));

    auto startTime = high_resolution_clock::now();
    this_thread::sleep_for(milliseconds(100));

    auto loginTime = high_resolution_clock::now();
   

    string generatedPassword = generatePassword(startTime, loginTime, xor_s("CrackMe"));
   // cout << "generatedPassword: " << generatedPassword.c_str() << endl;


    string inputPassword;
    cout << xor_s("Enter password: ");
    cin >> inputPassword;

    promise<bool> resultPromise;
    future<bool> resultFuture = resultPromise.get_future();

    thread passwordThread(checkPassword, inputPassword, generatedPassword, ref(resultPromise));

    thread hiddenCheckThread(hiddenResultCheck, move(resultFuture));

    passwordThread.join();
    hiddenCheckThread.join();

    system(xor_s("pause"));

    return 0;
}
[/ISPOILER]
а можешь пожалуйста подсказать мне новичку как ты получил чистый код C++ , заранее очень благодарен
 
1755025967249.png


1755025975070.png


лул
 
Я новичок в этом, пытаюсь разобраться уже часа полтора, либо я прям крайне глупый, либо задачка не на 1/10....
 
ты попробуй наложить vmp потом themida и ещё добавить свой антидеббагер топ 1 протект
 
Назад
Сверху Снизу