Загрузка...

Crackme с генератором ключей на основе введённых данных

Тема в разделе CrackME / UnpackME создана пользователем bigpablo 8 июн 2023. 420 просмотров

  1. bigpablo
    bigpablo Автор темы 8 июн 2023 Get busy livin' or get busy dyin' 3 13 май 2019
    Кто решит и напишет развёрнутое объяснение до 08.06 20:00 по МСК, закину сотыгу на балик зелёнки
    Первый крякми, не судите строго :lefthand: :righthand:
    Линк на .exe
    VT
     
  2. Warnet
    Warnet 24 окт 2023 нет, я не ради цифр, просто я очень люблю деньги 1262 1 фев 2019
    [IMG]
    Пропатчено за 5 минут
     
    1. МэйбиБэйби
      Warnet, че он тебе оплатил или пошел ты нахуй?
      28 окт 2023 Изменено
    2. МэйбиБэйби
      Warnet, не увидел кекв
  3. GOKOL
    Слишком легко. Пароль здесь динамический. Допустим Name:f Password:3 Name:g Password:2 [IMG]
     
    20 апр 2024 Изменено
  4. Chaeou
    Chaeou 15 май 2024 :dance: 85 13 фев 2023
    1. Инициализация и ввод ключа

    C

    sub_140001710(Buf2); // Инициализация Buf2 (эталонное значение)
    sub_1400021A0(std::cout, "Insert your key\n", v29); // Вывод приглашения ввести ключ
    Buf1[0] = 0i64; // Инициализация Buf1 (буфер для ввода)
    Size = 0i64; // Инициализация переменной размера
    v67 = 15i64; // Инициализация переменной
    sub_140002370(std::cin, Buf1); // Чтение ввода пользователя в Buf1


    2. Сравнение введённого ключа с эталонным


    C
    v30 = Buf2;
    if ( v64 >= 0x10 ) // Если размер Buf2 больше или равен 16
    v30 = (void **)Buf2[0]; // Присваиваем v30 адрес первого элемента Buf2
    v31 = Buf1;
    v32 = (char *)Buf1[0];
    v33 = v67;
    if ( v67 >= 0x10 ) // Если v67 больше или равен 16
    v31 = (void **)Buf1[0];


    if ( Size == v63 && !memcmp(v31, v30, Size) ) // Сравнение введённого ключа с эталонным значением
    Если размер введённого ключа (Size) совпадает с эталонным размером (v63), и если содержимое буфера v31 совпадает с содержимым v30, то выполняется блок кода для успешного ввода.

    3. Обработка успешного ввода ключа


    C
    // Подготовка успешного сообщения
    v35 = (__m128i *)sub_140001290(&v57);
    v36 = v35[1].m128i_i64[0];
    v37 = v35[1].m128i_u64[1];
    if ( v37 - v36 < 0x13 ) {
    v35 = (__m128i *)sub_140002B10(v35, v52, 0x13ui64);
    } else {
    v35[1].m128i_i64[0] = v36 + 19;
    v38 = (unsigned __int64)v35;
    if ( v37 >= 0x10 )
    v38 = v35->m128i_i64[0];
    // Конструкция сообщения о флаге
    memmove((void *)(v38 + 19), (const void *)v38, v36 + 1);
    memcpy((void *)v38, "Congrats! Flag is: ", v39);
    memcpy((void *)(v38 + v39), &aCongratsFlagIs[v39 + 19], 19 - v39);
    }

    // Подготовка блока для вывода
    Block[0] = 0i64;
    v54 = 0i64;
    *(__m128i *)Block = *v35;
    v54 = v35[1];
    v35[1].m128i_i64[0] = 0i64;
    v35[1].m128i_i64[1] = 15i64;
    v35->m128i_i8[0] = 0;

    4. Вывод сообщения об успехе

    C
    cpp
    sub_140002950(std::cout, v43, si128.m128i_i64[0]); // Вывод сообщения в консоль
    5. Обработка неверного ключа

    C
    cpp
    else {
    sub_1400021A0(std::cout, "Wrong! Better luck next time \n", v34); // Вывод сообщения об ошибке
    }

    6. Завершение программы

    C
    cpp

    sub_1400021A0(std::cout, "Press any key to exit . . .", v44);

    std::ostream::operator<<(v48, sub_140002560);

    getch();
     
    15 май 2024 Изменено
Загрузка...
Top