Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
push return_address
push 0c
jmp (GetWindowTextA+2)
Данный метод позволяет защититься от точки прерывания в SoftICE такого вида:
bpx GetWindowTextA
Так же можно сделать следующим образом:
push xxxxxxxx
................
push xxxxxxxx
push return_address
push 0c
push 77d6e498
jmp (GetWindowTextA+7)
И таких вариантов существует достаточно много.
В оптимальном варианте применения данной техники нужно написать дизассемблер длин и подключить его к программе таким образом, чтобы он формировал вызовы функций, копируя некоторые инструкции из них в тело программы.
Это позволит ещё более обезопасить программу от перехвата WIN API-функций.
Подсчёт контрольной суммы WIN API-функций
Данный метод мне ещё нигде не встречался, и хочется верить, что его идея принадлежит мне.
Он заключается в том, что перед вызовом необходимой WIN API-функции подсчитывается её контрольная сумма и сверяется с той суммой, которая хранится в программе. Как вы помните, при установленной точке прерывания на место первой инструкции записывается байт «СС» (int 3), который и изменяет контрольную сумму данной функции. При проверке контрольной суммы данной функции и определении отладки можно выйти из программы.
Теперь хочется сказать об эффективном применении данного метода. Я думаю, что если сверять контрольные суммы, то это может быть замечено взломщиком и результат сравнений подменён. Я предлагаю при помощи оригинальных контрольных сумм шифровать какие-нибудь критические данные, так, чтобы программа после декриптования данных неверной контрольной суммой работала некорректно.
Ну естественно, что это ограничит круг операционных систем и их версий, но между двух зол выбирают меньшую.
Обнаружение отладчика и завершение программы
Все отладчики подсистемы семейства Windows делятся по уровням:
n ring 3 (уровень приложения)
n ring 0 (уровень ядра)
В основном все отладчики, кроме SoftICE, относятся к отладчикам уровня приложения и против них существует множество методов, которые мы сейчас и рассмотрим:
Использование WIN API-функции IsDebuggerPresent
Использовать её довольно легко:
if (!IsDebuggerPresent()) goto no_debugger
//........................................