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