|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
|
Crackme: реверс-инжиниринг18.06.2026, 13:19. Показов 29816. Ответов 279
Метки нет (Все метки)
В архиве 10 exe-файлов - консольных приложений, каждое из которых запрашивает пароль. Цель в том, чтобы найти и ввести правильный пароль, после чего получить сообщение Password OK!
Приложения созданы не мной, а неким IOLI. Приложения 32-битные, что тоже упрощают работу. Приложения закрываются после выполнения, поэтому запускайте из cmd. Собственно, вы можете использовать любой удобный вам инструмент: IDA Pro, Ghidra, Cutter, x32dbg и т.д. Т.е. можно как статически анализировать, а можно запустить отладчик и анализировать динамически. Поскольку не будет вывода секретного сообщения при правильном вводе пароля и заранее известно, что выведется лишь Password OK!, то не вижу смысла в использовании всяких трюков, чтобы обойти проверку пароля всякими jmp и прочими инструкциями. Лучше тренироваться именно в поиске пароля, а не в его обходе. Топовые декомпиляторы в простых случаях сразу отображают пароль, поэтому в таких случаях, чтобы было интересно, предлагаю все равно попробовать самостоятельно найти пароль, анализировав дизассемблерный код. Что я имею в виду? Например, если открыть crackme0x03.exe в IDA Pro, то после декомпиляции мы сразу увидим пароль: Декомпилятор Ghidra тоже сразу показывает пароль (в hex): Чтобы было интересно, в таких простых случаях можно перейти в дизассемблерный вид и попытаться найти пароль самостоятельно: Например, вот как выглядит это окно в IDA Pro. Я там специально добавил комментарии к некоторым строкам и разъяснил, как вычисляется этот пароль (но есть одна опечатка в одном комменте 528 вместо 582). Для новичков в IDA Pro есть фича Auto Comments, которая включается в настройках. Но честно говоря, она мне не очень нравится. В Cutter автокомментирование инструкций работает, имхо, лучше. Поэтому новичкам будет проще в Cutter самостоятельно разбирать логику вычисления пароля. Как видно на скриншоте, Cutter может автоматически комментировать каждую строчку, что довольно удобно: Еще Cutter хорош тем, что на выбор там два декомпилятора, один из которых это декомпилятор от Ghidra (вполне неплохая альтернатива платного от Hex-Rays в IDA Pro). Собственно, этот же декомпилятор можно использовать и в самой Ghidra, но там нет автокомментирования. *** В crackme0x04.exe пароль сразу не виден после декомпиляции. Но и там нет ничего сложного, просто переходим в функцию check и сразу становится ясно, что на самом деле данное приложение принимает не один правильный пароль, а их может быть несколько. Т.е. любое число, где сумма цифр введенного числа равна 15. crackme0x05.exe очень похож на предыдущее задание, только нужно еще вспомнить, как определяют четность чисел с помощью побитового AND. *** Короче, если вам скучно и не знаете, чем заняться, то можете поиграться с этими файлами и ознакомиться с основами реверс-инжиниринга.
0
|
|
| 18.06.2026, 13:19 | |
|
Ответы с готовыми решениями:
279
Ошибка приложения в простом коде, реверс строки Функция и реверс строки |
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
|||
| 23.06.2026, 15:28 [ТС] | |||
![]() ![]() Хорошо, что быстро понял, что нужно поменять отладчик. WinDbg и отладчик Rizin справились. В любом случае, крякми был полезным, узнал про этот хитрый трюк.
0
|
|||
|
Software Engineer
338 / 343 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
|
||
| 23.06.2026, 15:53 | ||
|
0
|
||
|
216 / 64 / 7
Регистрация: 05.10.2023
Сообщений: 565
|
||
| 23.06.2026, 17:04 | ||
|
0
|
||
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
||
| 23.06.2026, 19:08 [ТС] | ||
|
0
|
||
|
Software Engineer
338 / 343 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
|
|
| 23.06.2026, 19:15 | |
|
0
|
|
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
||||||
| 23.06.2026, 20:00 [ТС] | ||||||
|
Custos, я особо пока не смотрел, но запустил в отладчике и немного глянул на код.
Во-первых, обрадовался, что отладчик работает (ты просто писал, что умеешь ограничивать работу остальных отладчиков тоже). Во-вторых, мне кажется, что мне нужно обратить внимание на кусочек 0x0040156e - 0x00401576.
Но сейчас появились другие дела, поэтому не обещаю, что вернусь к крякми в ближайщие дни. Тем более, ты говоришь, что сравнение теперь не настолько очевидно, а значит мне понадобится время. Полагаю, что в этот раз так просто, чтобы пароль лежал в регистре, не будет.
0
|
||||||
|
Software Engineer
338 / 343 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
|
|||
| 23.06.2026, 20:04 | |||
0
|
|||
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
|
| 23.06.2026, 20:06 [ТС] | |
|
0
|
|
| 23.06.2026, 21:10 | ||
|
Повторяю вопрос: как сделать простую защиту (типа от энтузиастов в этой теме). Писать пример необязательно, достаточно (толкового) объяснения/псевдокода. Больше деталей задачи в моем посте #93 Можно и сформулировать иначе. В стартовом посте упущен важный/принципиальный момент с которым Вы немедленно бы столкнулись при реальном краке софта (полагаю что за истекшие 30 лет ничего не изменилось). Ну если хочется играться в крякми и выглядеть благородно законопослушным - дело Ваше Немного намекну. Найти готовый инструмент реально, напр VMProtect. Но так результат зависит не от Вас, мне лично это не нравится, хотя объективно хз. Неужели надо бросаться изучать всю хрякерскую кухню и.т.п.? И с учетом кроссплатформенности! Нет ни времени, ни, по большому счету, желания, карьера хакера меня не привлекает. Ну да, ну да, "а как ты хотел?" А я вот думаю что скромную защиту за день (с нуля) соорудить можно
0
|
||
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
||||||
| 23.06.2026, 21:41 [ТС] | ||||||
|
Самый простой способ защитить такое приложение, это отправить его в 7z архив с паролем)) Собственно, если не нравится идея использования архива с паролем, то можно самому сделать то же самое: шифрование AES256 + PBKDF2 + какое-то сжатие, например, LZMA2. Но зачем это делать, если можно использовать архив с паролем с помощью 7zip, ведь там, по сути, тоже самое. преимущество этой библы в том, что распаковывает в памяти без создания файлов на диске. Например, unrar так не умеет (Рошал мне лично писал про это). соединить всё вместе можно в wxWidgets (Qt весит много), чтобы формошлепить на wxFormBuilder и справится за час. Идея такая: при запуске приложения появляется окно, которое требует ввести пароль. Если пароль корректный, то расшифровывается и распаковывается настоящее приложение, которое потом запускается.
0
|
||||||
|
Software Engineer
338 / 343 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
|
||
| 23.06.2026, 22:51 | ||
|
Потенциальный взломщик просто купит валидный лицензионный ключ, оплатив угнанной кардерами картой (эту транзакцию банк потом все равно откатит), активирует софт и сдампит исполняемый образ из памяти после его распаковки/расшифровки/etc.
0
|
||
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
|||
| 23.06.2026, 22:59 [ТС] | |||
|
Полагаю, что я вообще не понял, что нужно.
0
|
|||
|
Software Engineer
338 / 343 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
|
|||
| 23.06.2026, 23:06 | |||
|
0
|
|||
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
||
| 23.06.2026, 23:12 [ТС] | ||
|
Custos, т.е. речь идет о том, что приложение в открытом доступе, но оно триальное. Тот, кто покупает, получает пароль для активации? Так типа?
Добавлено через 5 минут
0
|
||
| 23.06.2026, 23:48 | ||
|
Просьба держаться в рамках темы, альтернативами не увлекаться
0
|
||
|
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
|
|
| 24.06.2026, 07:02 | |
|
Igor3D, если не хочется вникать во всё это и софт написан, архитектуру менять и выстраивать инфраструктуру для выноса важной функциональности в онлайн нет желания/возможности/целесообразности etc., то ваш выбор - навесные системы защиты, которые максимально усложнят взлом (themida или VM какой). Если программа уникальна и востребована, то её так или иначе взломают.
Для защиты же от начинающих есть золотые правила: 1. Не хранить строки про авторизацию в открытом виде. Шифруйте. 2. Разнесите проверку и получение данных авторизации во времени. Лучше, чтобы проверка была недетерминированной (то тут проверим, то там). Кусками. 3. Никаких сообщений об удачной или неудачной авторизации. Можно поменять коэффициенты числовые какие при отсутствии авторизации, чтобы программа генерировала правдоподобный бред. Можно использовать введенный ключ для расшифровки данных. Если ключ ерунда, то и на выходе ерунда (но тут надо подбирать алгоритм правильно, ибо это тоже потенциальный вектор атаки). Если есть такая возможность, то собирайте программу под каждого клиента с уникальной цифровой подписью, с уникальным ключом шифрования, который будет расшифровывать и зашифровывать куски функциональности прям в памяти, можно для каждой сборки разные куски. Может даже аппаратный Sentinel/HASP ключ, если целесообразно. Это по крайней мере поможет утечку обнаружить и применить меры (например, онлайн проверки периодические).
0
|
|
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
||
| 24.06.2026, 12:58 [ТС] | ||
|
0
|
||
| 24.06.2026, 14:01 | ||||
|
- вверху была ссылка на GitHub по поводу шифрования. Интересно, а не станет ли само шифрование "объектом атаки" (не найдут ли кусок этого кода) - к сожалению, выдавать месяги прошла авторизация или нет я обязан, эти требования зависят не от меня. Правда это не мешает мне тихо гадить (типа изменить счетчик контейнера) когда выполнение продолжается, а проверка не прошла. Использовать ключ для расшифровки - так и было, получил/огреб немало проблем когда структуры данных изменились.
0
|
||||
|
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
|
|||||
| 24.06.2026, 15:43 | |||||
|
2. Размазать проверки частями. Не прерывать, если обнаружено, что часть не совпадает! Это просто должно на выходе дать невалидный ключ для работы с данными. Например, куски шифруются чем-то, потом между собой, потом какое-нибудь статическое значение к ним добавляется, опять шифруется, потом часть отбрасывается и снова сливается позже. Цель - сбить с толку исследователя, чтобы он устал отслеживать свои точки останова. Можно расшифровывать кусками куски данных, которые будут использоваться ПОЗЖЕ. Тогда приложение упадет где-нибудь потом. От того, что расшифрован мусор. 3. Проверки сами распихать по разным потокам. Часть потоков что-то делает с частями ключа, другие потоки другое. Потом сливаются в разные буферы. 4. Распихивать проверки в обычные шаги работы программы - например, на Qt вызывать проверки в Qt::QueuedConnection, через кастомные QEvent с обработкой на неочевидном объекте, вместо таймера проверок юзать какую-нибудь анимацию QPropertyAnimation и проверять части ключа по событию finished. Используй проверки в обработчиках исключений, которые сам генерируешь (деление на ноль, например). 5. Насчет необходимости выдачи сообщения о валидности - ок, проверять часть ключа, которая сразу даст понять валиден или нет. Можно даже специальную часть, которая больше не нужна. Поводить реверсера за нос, имитируя бурную деятельность проверки этой части и привести его к сообщению о невалидности. НО! Остальной ключ использовать для расшифровки данных. Реверсер увидит, что ключ проверяется, увидит что нужно от ключа, сделает обход... Но далее программа будет падать, так как ключ невалиден. Да кучу всего можно впихнуть. И самомодифицирующийся код, который при статическом анализе выглядит вполне легитимным, но в процессе выполнения делает совсем противоположное. И техники проверки контрольных сумм кусков приложения для защиты от модификации. И проверка времени выполнения, для выявления отладчика. И сканирование на наличие CC (брейкпоинтов) в отдельных потоках... Но везде нужно потратить время на изучение техник. На самом деле защита программы это составление головоломки для реверсера. Чем лучше ты понимаешь как действует взломщик, тем лучшую защиту ты сможешь создать. Простой, но дорогой путь - навесная защита.
0
|
|||||
|
6771 / 3136 / 1065
Регистрация: 01.06.2021
Сообщений: 12,173
|
||||||||||||||||||||||||||||||||
| 24.06.2026, 16:52 [ТС] | ||||||||||||||||||||||||||||||||
|
Конечно, крякми тебе легко было создавать, особенно если ты использовал готовые наработки. Но создавать крякми одно дело, а находить потом пароль - другое. *** В этот раз пароль уже не хранится в открытом виде, а применяются несколько хэш-преобразований, а потом сравнивается результат с константами через sete + and al, blЯ потратил много времени на разбор этой цепочки хеш-преобразований: Шаг 1 (0x4013f1–0x401419): входное число X → H1
Шаг 2 (0x40143e–0x40146f): X → H2
Шаг 3 (0x401474–0x4014AF): X → H3
Шаг 4 (0x4014BE–0x4014EF): X → H4
Шаг 5 (0x4014F5–0x401529): X → H5
Шаг 6 (0x401537–0x40156F): финальный
ВАЖНО Конечно, это всё хорошо, но поскольку выше приведены однонаправленные хеш-операции, то просто алгебраически вывести X не получится. Короче, рассказывай, как находить здесь пароль?. Пока я вижу только то, что введенное число хешируется и хеши проверяются с константами, которые могут быть хешами пароля. Если пароля в программе нет, а там только его хеш, то разумеется я не смогу найти пароль (брутфорсить глупо).
0
|
||||||||||||||||||||||||||||||||
| 24.06.2026, 16:52 | |
|
Реверс слов в строке
Реверс элементов массива реверс строки Реверс масива по строках. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|