Загрузка...

Crackme with a key generator based on the entered data

Thread in CrackME / UnpackME created by bigpablo Jun 8, 2023. 726 views

  1. bigpablo
    bigpablo Topic starter Jun 8, 2023 Get busy livin' or get busy dyin' 3 May 13, 2019
    Кто решит и напишет развёрнутое объяснение до 08.06 20:00 по МСК, закину сотыгу на балик зелёнки
    Первый крякми, не судите строго :lefthand: :righthand:
    Линк на .exe
    VT
     
  2. Warnet
    Warnet Oct 24, 2023 нет, я не ради цифр, просто я очень люблю деньги 1,262 Feb 1, 2019
    [IMG]
    Пропатчено за 5 минут
     
    1. МэйбиБэйби
      avatarWarnet, че он тебе оплатил или пошел ты нахуй?
    2. МэйбиБэйби
      avatarWarnet, не увидел кекв
  3. GOKOL
    GOKOL Apr 20, 2024 230 Aug 18, 2021
    Слишком легко. Пароль здесь динамический. Допустим Name:f Password:3 Name:g Password:2 [IMG]
     
  4. Chaeou
    Chaeou May 15, 2024 :dance: 83 Feb 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();
     
Loading...