Загрузка...

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

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

Загрузка...
  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 Изменено
  3. GOKOL
    Слишком легко. Пароль здесь динамический. Допустим Name:f Password:3 Name:g Password:2 [IMG]
     
    20 апр 2024 Изменено
  4. Chaeou
    Chaeou 15 май 2024 :dance: 83 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