Гайд [Reverse-Engineering] Решение CrackMe и обход анти-реверс техник

Murasaki
Разработчик
Статус
Онлайн
Регистрация
18 Мар 2020
Сообщения
431
Реакции[?]
870
Поинты[?]
206K
=========================================================

Ахтунг! Пожалуйста, перед тем как оставлять комментарий по поводу темы, прочитайте текст в рамке.

Скажу сразу, это перезалив моей статьи с другого форума, поэтому очень высока вероятность того, что информацию которую вы для себя откроете в этой статье более чем не актуальна. (Исключение: CrackMe)

Это больше памятка для себя, т.к. есть основания полагать, что форум для которого я выпускал статьи может скоро загнуться, дабы не потерять весь свой материал я решил его перезалить сюда.

=========================================================

Шалом.

Давно наткнулся на один крякми с crackmes.one, это был довольно примитивный крякми со сравнением пароля и двумя техниками против реверса которая помешала бы новичкам при отладке. Запомните момент про примитивность сравнения пароля, как никак автор этого крякми дал оценку 3 из 6 (Medium).

Начнём с разбора защиты, ибо как я уже и сказал выше она бы доставила много хлопот новичкам. Для начала расскажу какие функции против отладки она использует

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.



Как вы уже могли понять, программа проверяет на наличие запущенных процессов в вечном цикле.
Ищет она эти процессы:
1.png

Лоадер интериума также проверяет через эти функции запущенные процессы =)

Начинаем обходить эти трюки.
Так как IsDebuggerPresent тупо проверяет через CMP на 0x1 (true), то можно поменять проверку на любое другое число (кроме 1 и 0) как к примеру 0x55
(upd: ничо не мешает пронопать все это дело, или поставить mov eax, 0x1; ret в начало функции, но на момент написания статьи я посчитал это смешной хуйней и сделал так :D)
2.png

Первый трюк обошли. Идем дальше.

Тут уже идёт та самая проверка имени процессов. Кажется на первый взгляд, что патчить джампы тут будет очень геморрно, ибо тут слишком много джампов =)
На самом деле тут достаточно в начало функции перезаписать PUSH EBP на RET, тем самым мы обрезали все проверки на имена процессов одной инструкцией.

Теперь функция выглядит так:
C++:
void CheckProcessName()
{
   return;
 
   // Original code
}
3.png



И вот мы обошли два трюка против отладчика. Дальше у нас идёт пароль, тут всё ещё проще чем веник. Для крякми третьего уровня это довольно серьёзный косяк, из-за которого очень легко узнать пароль.



Нужно поставить бряк на инструкцию где сравнивается значение из регистра и некая переменная, после перехода на бряк уже будет высвечен сам пароль.



Пароль: 011101110111100001100011011100000111011101110010011001010111100001001100010110000110100001101011011101010111100001001100



Подписывайтесь на блог моей команды :)
Пожалуйста, авторизуйтесь для просмотра ссылки.


На этом всё. Всем добра и позитива. (upd: оценка крякми как по мне 1/6)​
 
Новичок
Статус
Оффлайн
Регистрация
30 Май 2023
Сообщения
1
Реакции[?]
0
Поинты[?]
0
=========================================================

Ахтунг! Пожалуйста, перед тем как оставлять комментарий по поводу темы, прочитайте текст в рамке.

Скажу сразу, это перезалив моей статьи с другого форума, поэтому очень высока вероятность того, что информацию которую вы для себя откроете в этой статье более чем не актуальна. (Исключение: CrackMe)

Это больше памятка для себя, т.к. есть основания полагать, что форум для которого я выпускал статьи может скоро загнуться, дабы не потерять весь свой материал я решил его перезалить сюда.

=========================================================

Шалом.

Давно наткнулся на один крякми с crackmes.one, это был довольно примитивный крякми со сравнением пароля и двумя техниками против реверса которая помешала бы новичкам при отладке. Запомните момент про примитивность сравнения пароля, как никак автор этого крякми дал оценку 3 из 6 (Medium).

Начнём с разбора защиты, ибо как я уже и сказал выше она бы доставила много хлопот новичкам. Для начала расскажу какие функции против отладки она использует

Скрытое содержимое

Как вы уже могли понять, программа проверяет на наличие запущенных процессов в вечном цикле.
Ищет она эти процессы:
Посмотреть вложение 185573

Лоадер интериума также проверяет через эти функции запущенные процессы =)

Начинаем обходить эти трюки.
Так как IsDebuggerPresent тупо проверяет через CMP на 0x1 (true), то можно поменять проверку на любое другое число (кроме 1 и 0) как к примеру 0x55
(upd: ничо не мешает пронопать все это дело, или поставить mov eax, 0x1; ret в начало функции, но на момент написания статьи я посчитал это смешной хуйней и сделал так :D)
Посмотреть вложение 185574

Первый трюк обошли. Идем дальше.

Тут уже идёт та самая проверка имени процессов. Кажется на первый взгляд, что патчить джампы тут будет очень геморрно, ибо тут слишком много джампов =)
На самом деле тут достаточно в начало функции перезаписать PUSH EBP на RET, тем самым мы обрезали все проверки на имена процессов одной инструкцией.

Теперь функция выглядит так:
C++:
void CheckProcessName()
{
   return;

   // Original code
}
Посмотреть вложение 185577



И вот мы обошли два трюка против отладчика. Дальше у нас идёт пароль, тут всё ещё проще чем веник. Для крякми третьего уровня это довольно серьёзный косяк, из-за которого очень легко узнать пароль.



Нужно поставить бряк на инструкцию где сравнивается значение из регистра и некая переменная, после перехода на бряк уже будет высвечен сам пароль.



Пароль: 011101110111100001100011011100000111011101110010011001010111100001001100010110000110100001101011011101010111100001001100



Подписывайтесь на блог моей команды :)
Пожалуйста, авторизуйтесь для просмотра ссылки.


На этом всё. Всем добра и позитива. (upd: оценка крякми как по мне 1/6)​
Какая прога для редактирования ассемблера использовалась?
 
Начинающий
Статус
Оффлайн
Регистрация
24 Июл 2021
Сообщения
5
Реакции[?]
1
Поинты[?]
0
Не понял, как вы подключились к этой программе если она защищена от отладчика? Как мне найти эти функции проверки, если программа сразу же закрывает x64dbg
 
Murasaki
Разработчик
Статус
Онлайн
Регистрация
18 Мар 2020
Сообщения
431
Реакции[?]
870
Поинты[?]
206K
Не понял, как вы подключились к этой программе если она защищена от отладчика? Как мне найти эти функции проверки, если программа сразу же закрывает x64dbg
ну странный вопрос конечно, зачем аттачишься так в наглую к программе, которая в отдельном потоке сканирует постоянно дебаггер? ты можешь находиться на точке входа программы и оттуда находить все места с проверками, проверяя импорты

я уже ничего не помню относительно этого крякми, но если там только IsDebuggerPresent + Process32Next, то меняешь имя отладчику и включаешь это1709189858850.png
 
Сверху Снизу