Начало было положено в нашем чате telegram:
Пользуясь случаем всех приглашаю, присоединяйтесь
В дальнейшем пользователь мне написал в личные сообщения и отправил билд.
Ну что ж, выполняем чужую лабу.
0x00. Исследование
Первым делом необходимо выяснять разрядность приложения и тип билда: натив или дотнет. В данном случае у нас x86, native, delphi.
Скачать:
После исследование выбор стоит на отладчике. IDA, OllyDbg, x64dbg? Выбираем последнее ввиду его свободного распространения и актуальности, скачиваем:
При первом запуске, данный крякми не отдает никакого сообщения о валидации входящих значений, что немного, но усложняет исследование образца. Выходом из данной ситуации станет использование IDR (Interactive Delphi Reconstructor), скачать можно у нас с ресурсов:
0x01. Реверсинг
Запускаем IDR и закидываем наш билд. Переходим в Forms (F5) и выбираем Form.
В последующем кликаем на Form1.
У нас появляются 2 кнопки с коллами + сама формочка. По логике человек закинул валидацию на вторую кнопку, поэтому прыгаем на нее раскрывая Button2.
Выше изображен ассемблерный код, нам интересен адрес
Забегая вперед переходим:
Выделяем наше динамическое значение:
Изменяем на
В ASCII мы вводим к примеру "00000", значение должно совпадать по размеру с предыдущем, чтобы не выходить за выделенную память. После изменения жмем "OK" и переходим к билду, который выгружен у нас в память.
К слову, как должно быть после изменения:
Сначала введите неверное значение, к примеру "0000", у вас ничего не произойдет, но когда вы введете "00000" - у вас в тайтле формы начнет меняться имя.
Из этого следует, что мы верно нашли область валидации и теперь с ней необходимо поработать.
Исследуем дальше и натыкаемся на
Переходим на условие и нажимаем
Соберем билд и проверим работоспособность.
Выделяем все и нажимаем "Исправить файл". В последующем даем ему имя patch.exe и запускаем для проверки работоспособности кряка.
Запускаем и предугадывая результат - все работает.
0x02. Post scriptum
На первичном этапе исследования меня заинтересовало, что они делают на событии OnCreate (это событие вызывается при открытии программы) и какое мое было удивление, когда я увидел следующее:
Сразу ударил колл вызова кнопки1, которая и генерирует ключ и потом еще в не отрисовавшуюся форму с компонентами кидают данные из процедуры кнопки. Так нельзя делать, так как подобное событие если и должно было быть, оно должно было быть вызвано только на OnShow. Преподавателю обязательно стоит прочесть про жизненный цикл формы: OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint ... В данном случае ошибка не вызывается, но когда данных и кол-ва обращений станет больше - будет ошибка обращения к адресу, так как он не будет еще существовать, а в него уже долбятся на OnCreate.
Мне страшно, какие "специалисты" потом выпускаются в российских вузах, с такими крякми от преподавателей, это пиздец товарищи.
Все материалы будут приложены во вложениях, спасибо за внимание.
Пользуясь случаем всех приглашаю, присоединяйтесь
В дальнейшем пользователь мне написал в личные сообщения и отправил билд.
0x00. Исследование
Первым делом необходимо выяснять разрядность приложения и тип билда: натив или дотнет. В данном случае у нас x86, native, delphi.
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
После исследование выбор стоит на отладчике. IDA, OllyDbg, x64dbg? Выбираем последнее ввиду его свободного распространения и актуальности, скачиваем:
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
При первом запуске, данный крякми не отдает никакого сообщения о валидации входящих значений, что немного, но усложняет исследование образца. Выходом из данной ситуации станет использование IDR (Interactive Delphi Reconstructor), скачать можно у нас с ресурсов:
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
0x01. Реверсинг
Запускаем IDR и закидываем наш билд. Переходим в Forms (F5) и выбираем Form.
В последующем кликаем на Form1.
У нас появляются 2 кнопки с коллами + сама формочка. По логике человек закинул валидацию на вторую кнопку, поэтому прыгаем на нее раскрывая Button2.
Выше изображен ассемблерный код, нам интересен адрес
00455933
, копируем его и бежим в x64dbg. Переходим по адресу в x64dbg через Ctrl+G
Забегая вперед переходим:
00455941 | 8B15 208C4500 | mov edx,dword ptr ds:[458C20] | 00458C20:&"79991"
и переходим к значению дампа. Как мы видим, это динамика, мы можем изменить только в моменте на данном этапе.Выделяем наше динамическое значение:
Изменяем на
Ctrl+E
В ASCII мы вводим к примеру "00000", значение должно совпадать по размеру с предыдущем, чтобы не выходить за выделенную память. После изменения жмем "OK" и переходим к билду, который выгружен у нас в память.
К слову, как должно быть после изменения:
Сначала введите неверное значение, к примеру "0000", у вас ничего не произойдет, но когда вы введете "00000" - у вас в тайтле формы начнет меняться имя.
Из этого следует, что мы верно нашли область валидации и теперь с ней необходимо поработать.
Исследуем дальше и натыкаемся на
jne
. При неверной валидации данных - мы не заходим в данное условие, из-за этого мы пролетаем и программа считает, что мы ничего не сделали и не отдает никакой ответ. Самый простой выход - это удаление и заполнение нопами, что мы и сделаем.Переходим на условие и нажимаем
Ctrl+F9
или Del
, если вы как нормальный человек перебилдили все ранее. В конечном итоге мы удалили условие и теперь выполняем обычный заход без него.Соберем билд и проверим работоспособность.
Ctrl+P
Выделяем все и нажимаем "Исправить файл". В последующем даем ему имя patch.exe и запускаем для проверки работоспособности кряка.
Запускаем и предугадывая результат - все работает.
0x02. Post scriptum
На первичном этапе исследования меня заинтересовало, что они делают на событии OnCreate (это событие вызывается при открытии программы) и какое мое было удивление, когда я увидел следующее:
Сразу ударил колл вызова кнопки1, которая и генерирует ключ и потом еще в не отрисовавшуюся форму с компонентами кидают данные из процедуры кнопки. Так нельзя делать, так как подобное событие если и должно было быть, оно должно было быть вызвано только на OnShow. Преподавателю обязательно стоит прочесть про жизненный цикл формы: OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint ... В данном случае ошибка не вызывается, но когда данных и кол-ва обращений станет больше - будет ошибка обращения к адресу, так как он не будет еще существовать, а в него уже долбятся на OnCreate.
Мне страшно, какие "специалисты" потом выпускаются в российских вузах, с такими крякми от преподавателей, это пиздец товарищи.
Все материалы будут приложены во вложениях, спасибо за внимание.