Всем привет! Запустил небольшой курс, как можно ревёрсить программы, в конце курса дойдём до самых сложных примеров, которые накрыты VMP и множеством других протекторов. Весь курс предназначен на нативные приложения, курс будет для "чайников" в плане ревёрс-инженерии, без знаний C/C++ будет очень тяжело для понимания Ну что же, начнём! Все программы взяты с crackmes.one (Не реклама) Очень необычный крякми! Анализ программы Адрес точки входа: 000014A0 Разрядность: x32 Компилятор: GCC Очень интересная вещь, программа просит 2 ввода пароль и какой то комментарий Если вводить пароль до 5 символов, то сразу выдаёт ошибку о невалиде: Если до 5 символов, то просит комментарий: Логика Открыв иду мы попадаем на точку входа, но там не то, что нам надо: Ищем сегмент, связанный с вводом/выводом текста в консоль(оттуда можно будет найти алгоритм программы) жмём View -> Open Subviews -> Strings Ида выдаст нам все строки, которая нашла: 2 раза жмём на "Enter the password:",у нас открывается сегмент .text, где идут все объявления операндов на следующий участок Нажав на название операнда жмём X, чтобы посмотреть где он используется: 2 раза кликаем на предоставленный идой сегмент и попадаем туда, куда нам надо: Немного мат.части, не замечаете ничего странного? (обвёл 2 участка, где вывод и ввод просит) Нажав f5 получаем псевдокод, я его немного привёл в порядок: Логика, логика и мат.часть После первого ввода у нас идёт сверка нашего пароля с текстом "stars" через strcmp, выше у нас обозначено, что ввод прочитает только 4 символа Ввод второго комментария вообще ни на что не влияет, просто junk код, получается, что у нас сверяется 2 текста(вернее кол-во символов) пароль и stars, Но консоль не увидит ввод в 4+ символов, поэтому 4 == 5 никогда не случится. Нам надо просто пропатчить strcmp на scanf, так как он съесть всю строку Можно было бы ещё просто изменить логику ветвления, но мы это разбирали это в прошлом уроке Всем удачи в начинаниях! Всем пока! Предыдущий урок: https://zelenka.guru/threads/2550799/
Чуть-чуть добавлю от себя совсем новичкам которым нужна чуточки помощи. strcmp -> это функция сравнивания двух строк. Например(не целый код), char ia[] ="reverser"; //загаданное слово char answer[80]; // строка-ответ do { std::cout <<"Угадайте мое любимое слово! >> "; std::cin >> answer; // строка-ответ }while (strcmp(fruit, answer) != 0); // пока слвоо не отгадано, цикл будет работать std::cout <<"Правильный ответ!n"; return 0; scanf -> вывод, в коде выше указано %[] Просматривает набор символов так вот почему программа и считала цифры!