Шалом.
Давно наткнулся на один крякми с crackmes.one, это был довольно примитивный крякми со сравнением пароля и двумя техниками против реверса которая помешала бы новичкам при отладке. Запомните момент про примитивность сравнения пароля, как никак автор этого крякми дал оценку 3 из 6 (Medium).
Начнём с разбора защиты, ибо как я уже и сказал выше она бы доставила много хлопот новичкам. Для начала расскажу какие функции против отладки она использует
Как вы уже могли понять, программа проверяет на наличие запущенных процессов в вечном цикле.
Ищет она эти процессы:
Начинаем обходить эти трюки.
Так как IsDebuggerPresent тупо проверяет через CMP на 0x1 (true), то можно поменять проверку на любое другое число (кроме 1 и 0) как к примеру 0x55
Первый трюк обошли. Идем дальше.
Тут уже идёт та самая проверка имени процессов. Кажется на первый взгляд, что патчить джампы тут будет очень геморрно, ибо тут слишком много джампов =)
На самом деле тут достаточно в начало функции перезаписать PUSH EBP на RET, тем самым мы обрезали все проверки на имена процессов одной инструкцией.
Теперь функция выглядит так:
И вот мы обошли два трюка против отладчика. Дальше у нас идёт пароль, тут всё ещё проще чем веник. Для крякми третьего уровня это довольно серьёзный косяк, из-за которого очень легко узнать пароль.
Нужно поставить бряк на инструкцию где сравнивается значение из регистра и некая переменная, после перехода на бряк уже будет высвечен сам пароль.
Пароль: 011101110111100001100011011100000111011101110010011001010111100001001100010110000110100001101011011101010111100001001100
На этом всё. Всем добра и позитива.
Давно наткнулся на один крякми с crackmes.one, это был довольно примитивный крякми со сравнением пароля и двумя техниками против реверса которая помешала бы новичкам при отладке. Запомните момент про примитивность сравнения пароля, как никак автор этого крякми дал оценку 3 из 6 (Medium).
Начнём с разбора защиты, ибо как я уже и сказал выше она бы доставила много хлопот новичкам. Для начала расскажу какие функции против отладки она использует
Скрытое содержимое доступно для зарегистрированных пользователей!
Как вы уже могли понять, программа проверяет на наличие запущенных процессов в вечном цикле.
Ищет она эти процессы:
Лоадер интериума также проверяет через эти функции запущенные процессы =)
Начинаем обходить эти трюки.
Так как IsDebuggerPresent тупо проверяет через CMP на 0x1 (true), то можно поменять проверку на любое другое число (кроме 1 и 0) как к примеру 0x55
Первый трюк обошли. Идем дальше.
Тут уже идёт та самая проверка имени процессов. Кажется на первый взгляд, что патчить джампы тут будет очень геморрно, ибо тут слишком много джампов =)
На самом деле тут достаточно в начало функции перезаписать PUSH EBP на RET, тем самым мы обрезали все проверки на имена процессов одной инструкцией.
Теперь функция выглядит так:
C++:
void CheckProcessName()
{
return;
// Original code
}
И вот мы обошли два трюка против отладчика. Дальше у нас идёт пароль, тут всё ещё проще чем веник. Для крякми третьего уровня это довольно серьёзный косяк, из-за которого очень легко узнать пароль.
Нужно поставить бряк на инструкцию где сравнивается значение из регистра и некая переменная, после перехода на бряк уже будет высвечен сам пароль.
Пароль: 011101110111100001100011011100000111011101110010011001010111100001001100010110000110100001101011011101010111100001001100
На этом всё. Всем добра и позитива.