Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574

Crackme: реверс-инжиниринг

18.06.2026, 13:19. Показов 23266. Ответов 278
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В архиве 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.

***
Короче, если вам скучно и не знаете, чем заняться, то можете поиграться с этими файлами и ознакомиться с основами реверс-инжиниринга.
Вложения
Тип файла: zip crackme.zip (82.1 Кб, 12 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2026, 13:19
Ответы с готовыми решениями:

Как написать keygen для crackme?
Здравствуйте форумчане.Решил написать keygen сразу предупреждаю добросовестного Модератора ,что...

Ошибка приложения в простом коде, реверс строки
Здравствуйте. Подскажите почему виндновс выдает сообшение об ошибке ? Тоесть компилятор...

Функция и реверс строки
1. Составить программу, которая реверсирует каждое слово строки str. 2. Написать и протестировать...

278
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,243
19.06.2026, 14:52
Студворк — интернет-сервис помощи студентам

Сие чудо перетащить на рабочий стол нельзя.
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 14:56
Цитата Сообщение от Наталья8 Посмотреть сообщение
Сие чудо перетащить на рабочий стол нельзя.
Обычный false positive детект. Поэтому crack-me задачки лучше решать на виртуалке, отключив там бесполезный Microsoft Defender
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 15:01  [ТС]
Наталья8, это false positive.

https://www.virustotal.com/gui... ?nocache=1

кстати, защита винды находит Trojan:Win32/Wacatac.B!ml в любом хелловорлде, если его выложить в сеть и потом оттуда обратно скачать

8.46 MB
здоровенный, однако))
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 15:39
Цитата Сообщение от Royal_X Посмотреть сообщение
здоровенный, однако))
Да, из-за шаблонного кода его раздуло немного
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 17:21  [ТС]
Цитата Сообщение от Custos Посмотреть сообщение
Да, из-за шаблонного кода
Я так и понял. Ты, наверное, какую-то библу для обфускации использовал, которая в один клик генерит столько мусора, а нам тратить время, чтобы разбираться в этом мусоре)))

Добавлено через 26 минут
Цитата Сообщение от Custos Посмотреть сообщение
найти и объяснить каким именно образом приложение показывает обычный MessageBox
особо не вникал, но по названиям функций во вкладке Imports IDA Pro, мне кажется, что используется exception-driven трюк. Читал когда-то про это.

Вместо прямого вызова MessageBoxW из user32.dll, программа искусственно генерирует исключение с помощью RaiseException. На винде через исключения возможны межмодульные вызовы.

Обработчик исключения ловит это событие, и внутри его кода (который уже скомпилирован в секции .text самого приложения) происходит динамическая загрузка user32.dll через LoadLibraryExW и вызов MessageBoxW через GetProcAddress

По этой причине в Imports не видно ни user32.dll, ни MessageBoxW.

В Imports прям кишат функции для динамической загрузки либ.

+ SetUnhandledExceptionFilter и UnhandledExceptionFilter указывают, что скорее всего используется именно этот трюк.

Ну а IsDebuggerPresent + наверняка еще VirtualProtect используются для антиотладочных проверок и подмены кода на лету.

Я прав?
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,243
19.06.2026, 17:37
Цитата Сообщение от Royal_X Посмотреть сообщение
защита винды находит Trojan:Win32/Wacatac.B!ml
А настоящих троянов не бывает? Только false positive детект?
Там в восьми гб и чёрта прописать можно.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 17:40  [ТС]
Наталья8, хз. Приложение запускал на виртуалке, но там не удобно работать. А на реальном девайсе делал только статический анализ, отладчик не запускал по соображениям безопасности.
К тому же, там его просто и не запустишь, в коде полно int 3 . Для x64dbg нужно спец. плагин ставить, который убирает антиотладочную защиту
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 17:50
Цитата Сообщение от Royal_X Посмотреть сообщение
Вместо прямого вызова MessageBoxW из user32.dll, программа искусственно генерирует исключение с помощью RaiseException. На винде через исключения возможны межмодульные вызовы.
Обработчик исключения ловит это событие, и внутри его кода (который уже скомпилирован в секции .text самого приложения) происходит динамическая загрузка user32.dll через LoadLibraryExW и вызов MessageBoxW через GetProcAddress
Неа, в этом легко убедиться, загрузив принудительно user32.dll при запуске CrackMe и поставив хуки на все возможные функции для отображения MessageBox, ни одна из них не будет вызвана

Цитата Сообщение от Royal_X Посмотреть сообщение
Ну а IsDebuggerPresent + наверняка еще VirtualProtect используются для антиотладочных проверок и подмены кода на лету.
Тоже нет, стандартный примитивный IsDebuggerPresent (который просто является оберткой над чтением флага из PEB) давно никто не использует для обнаружения отладчиков.

Добавлено через 2 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
Для x64dbg нужно спец. плагин ставить, который убирает антиотладочную защиту
Популярные решения типа ScyllaHide или TitanHide не помогут)
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 17:56  [ТС]
Custos, приложение весит в разы больше, чем user.dll. Наталья8 правильно говорит, что там и чёрта прописать можно)
Имхо, разбирать такой файл не интересно.
Тем более, хз какие там наработки используются. Возможно, там вообще использовалась профессиональная мощная либа для обфускации.
Не похож это на тренировочный крякми, который весит несколько килобайт.
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 18:23
Цитата Сообщение от Royal_X Посмотреть сообщение
Custos, приложение весит в разы больше, чем user.dll. Наталья8 правильно говорит, что там и чёрта прописать можно)
Имхо, разбирать такой файл не интересно.
Сделал новый вариант, уменьшил количество junk-кода и убрал защиту от отладки
Вложения
Тип файла: 7z CrackMe_MessageBox.7z (77.0 Кб, 12 просмотров)
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 18:33  [ТС]
Цитата Сообщение от Custos Посмотреть сообщение
Сделал новый вариант
защита винды уже не жалуется)
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 18:43  [ТС]
Custos, говоришь, что MessageBox не использовал, но, как по мне, это вылитый MessageBox из WinAPI. Кажется, ты врешь)



Сигнатура совпадает с функцией из WinAPI:

C++
1
2
3
4
5
6
int MessageBox(
  [in, optional] HWND    hWnd,
  [in, optional] LPCTSTR lpText,
  [in, optional] LPCTSTR lpCaption,
  [in]           UINT    uType
);
hWnd вполне может быть 0 (означает, что другое окно не владеет MessageBox), второй аргумент это содержимое MessageBox, третий аргумент - заголовок MessageBox, а четвертый uType это комбинация флагов, например,

MB_OK | MB_ICONINFORMATION это как раз 0x00000000L | 0x00000040L = 0x40 (64)
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 18:46
Цитата Сообщение от Royal_X Посмотреть сообщение
Тем более, хз какие там наработки используются. Возможно, там вообще использовалась профессиональная мощная либа для обфускации.
Весь CrackMe - менее 30 строк кода
Сторонние решения не используются, используется только собственная либка winapi_utils, в которой я собрал в кучу разный инструментарий под Windows приложения и использую в своих разных проектах
Миниатюры
Crackme: реверс-инжиниринг   Crackme: реверс-инжиниринг  
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 18:59
Цитата Сообщение от Royal_X Посмотреть сообщение
Custos, говоришь, что MessageBox не использовал, но, как по мне, это вылитый MessageBox из WinAPI. Кажется, ты врешь)
У тебя теперь есть возможность поставить бряки на всех возможные MessageBox* функции в user32.dll и убедиться, что ни одна из них не вызывается)

Добавлено через 10 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
Сигнатура совпадает с функцией из WinAPI
Так и должно быть, в используемой библиотеке в пространстве имен mvcbox::winapi_utils:: polyfill собрана отдельная группа функций, которые представляют собой аналоги некоторых обычных WinAPI функций, но реализованы в обход стандартного WinAPI.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 19:17  [ТС]
Цитата Сообщение от Custos Посмотреть сообщение
mvcbox::winapi_utils:: polyfill собрана отдельная группа функций, которые представляют собой аналоги некоторых обычных WinAPI функций, но реализованы в обход стандартного WinAPI.
Custos, хочешь сказать, что это твой велосипед по мотивам WinAPI?

Добавлено через 4 минуты
Цитата Сообщение от Custos Посмотреть сообщение
убедиться, что ни одна из них не вызывается
да я уже в Process Explorer от Руссиновича проверил
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 19:26
Цитата Сообщение от Royal_X Посмотреть сообщение
Custos, хочешь сказать, что это твой велосипед по мотивам WinAPI?
Одна из задач, для которой предназначается либа, это предоставить собственную реализацию самых часто используемых WinAPI функций. Это сделано для того, чтобы затруднить попытки их "перехвата" user space инструментами, так как первое, что обычно идут хукать, это системные либки.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 19:27  [ТС]
Цитата Сообщение от Custos Посмотреть сообщение
но реализованы в обход стандартного WinAPI
а в чём был смысл так делать? почему используешь ntdll.dll и kernel32.dll, но не хочешь user32.dll. Ты ведь для чего-то писал свою либу. Почему решил обойти именно user32.dll?

Добавлено через 44 секунды
Цитата Сообщение от Custos Посмотреть сообщение
Это сделано для того, чтобы затруднить попытки их "перехвата" user space инструментами, так как первое, что обычно идут хукать, это системные либки.
ок, увидел твой ответ
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 19:32
Цитата Сообщение от Royal_X Посмотреть сообщение
почему используешь ntdll.dll и kernel32.dll
Тоже не используется) То, что ты видишь в импортах ntdll.dll и kernel32.dll, это зависимости CRT потрохов и не используются для реализации winapi_utils:: polyfill::... функций
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
19.06.2026, 20:12  [ТС]
Custos, IDA Pro 9.4 бета вышла. Xrefs Graph вроде улучшения получил. Подожду выхода стабильной версии. Я даже на 9.3 SP2 не обновлялся, жду сразу 9.4
0
Software Engineer
 Аватар для Custos
338 / 342 / 55
Регистрация: 23.09.2014
Сообщений: 1,050
19.06.2026, 20:44
Цитата Сообщение от Royal_X Посмотреть сообщение
IDA Pro 9.4 бета вышла. Xrefs Graph вроде улучшения получил.
Более свежая версия ничего нового не покажет для текущего CrackMe
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2026, 20:44

Реверс слов в строке
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int...

Реверс строки
Не могу написать программу которая перестанавливает символы в строке(abc->cba)

Реверс элементов массива
Надо поменять значения элементов массива в обратном порядке.Первый->последний,второй->предпоследний...

реверс строки
короче, у меня есть строка.. ее надо перевести наоборот. типа было ЛОХ стало ХОЛ вот как я...

Реверс масива по строках.
Задание: Поменять первую строку с последней, вторую с предпоследней и так далее. Я делаю вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru