Крис Касперски
Новое, как говорится, – это хорошо забытое старое. Антиотладочные приемы
времен MS-DOS и debug.com возвращаются, чтобы снова работать в Windows 2000/XP/2003.
Статья не только вызовет у вас ритуально-ностальгический интерес, но и послужит
практическим пособием по борьбе с хакерами и отладчиками.
Отладчики (а отладчик, как известно, – основной инструмент хакера) прошли
долгий эволюционный путь – от debug.com до soft-ice. За это время было
найдено множество способов борьбы с ними, однако не все они оказались
удачны. В последнее время наблюдается острый дефицит хороших антиотладочных
приемов. Так не пора ли вернуться к истокам – древним приемам, проверенным
годами? Технический прогресс развивается по спирали, и методы защиты,
разработанные для MS-DOS и утратившие актуальность к концу ее существования,
оказывают убийственное воздействие на Windows-отладчики, которые просто не
предусматривали такого поворота событий и капитулируют сразу, даже не пытаясь
бороться.
Разумеется, непосредственный перенос антиотладочных
методик из MSDOS в Windows невозможен хотя бы уже потому, что в Windows
нет «прерываний» в том смысле, который в них вкладывает MS-DOS. В ней нет
портов ввода/вывода, физической памяти и множества других привычных для
MS-DOS-программистов концепций и вещей. То есть они, разумеется, есть
(куда же без прерываний?!), но техника работы с ними радикально
отличается. Так что определенная адаптация все-таки необходима.
Основной упор мы сделаем на прикладной уровень
и программистов средней квалификации, которые, возможно, имеют
представление о драйверах, но разрабатывать их самостоятельно не
собираются. Некоторые из описанных методик практически полностью системно
независимы и работают под любой 32-разрядной операционной системой семейства Windows,
частично поддерживая Windows 3.x и Windows XP 64-bit edition.
Некоторые требуют только NT или производную от нее систему, причем никаких
гарантий сохранения работоспособности в последующих версиях Windows у нас нет.
Даже если использовать только документированные функции, Microsoft в любой
момент может их изменить, как это она уже делала неоднократно, причем, в
последнее время все чаще и чаще. Лучше вообще не использовать никаких
системно зависимых функций и писать все на ANSI Си/С++ или DELPHI
(фактически DELPHI представляет собой самостоятельную «операционную систему»,
натянутую поверх Windows и абстрагирующую программиста от прихотей Microsoft
– вы просто перекомпилируете код и все! Разумеется, речь идет только о
прикладных задачах и на антиотладочные приемы указанное преимущество DELHPI не
распространяется). Тем не менее, бояться антиотладочных приемов не нужно. Их
использование вполне допустимо, если не сказать – желательно.