RU | 'PE DotNet - Basic Anti-Debug' from root-me.org
Сегодня автор одного из заданий предлагает нам решить задачку двумя способами - статическим и динамическим. Разберем очень простой пример анти-отладки, и такой же простой её обход. Приложение у нас DotNet, поэтому задача становится ещё легче.
Скачиваем, открываем:
Переходим в dnSpy, загружаем наш файл и сразу переходим к исходному коду. У нас есть 2 варианта анализа - динамический и статический. Лично я выберу первый вариант, ибо навык обхода различных техник анти-отладки - это очень полезно.
И так, находим функцию в которой реализована анти-отладка и смотрим что она из себя представляет:
Программа просто проверяет все процессы и ищет по имени “ILSpy” или “dnSpy”. Если процесс с таким именем есть, то программа просто выдает предупреждение и вызывает функцию base.Close(), которая закрывает программу.
Перед нами снова развилка, в первом случае мы можем просто изменить название dnSpy на что угодно, во втором случае - пропатчить функцию в анализируемой программе. Если первый вариант не нуждается в объяснении, то опишу второй.
Выделяем функцию -> ПКМ -> Edit Method (C#).. / Ctrl + Shift + E
Стираем функции base.Close(), и метод теперь выглядит так:
Жмём Compile и далее:
File -> Save All.. / Ctrl + Shift + S -> Соглашаемся со всем по умолчанию и жмём OK.
Теперь если мы откроем exe’шник, достаточно просто закрыть сообщение об отладчике и программа будет работать должным образом.
Теперь просто находим блок кода с проверкой пароля и ставим точку остановки:
ПКМ по строчке кода -> Add Breakpoint / F9
(Левее от номера строчки должен появиться красный кружочек)
Далее,
Открываем ch39.exe -> в dnSpy жмем Attach To Process / Ctrl + Alt + P -> выбираем наш процесс.
Теперь в программе нужно ввести любой пароль, нажать Check! и сразу перейти в отладчик. Смотрим что наш пароль сохраняется в переменной text, смотрим на значения всех локальных переменных в момент отладки и находим то что нам нужно:
Конграчулэйшонс гайс