[c] Chaos Computer Russian eMagazine. WRiTER:  D()CT()r [c] D.i.P.G. Hack Lab's  2:4641/222.0@FiD0 Защита исполняемого кода от исследования Да непугайтесь Вы так =) Небуду я тут рассказывать о том как нужно защищаться от дебагеров и соршеров =) Просто зани- маясь креком я раздолбал достаточное колличество таких механиз- мов и хочу поделиться с менее опытными крекерами своими наход- ками. Все они конечно не влезли в одну статью и поэтому в буду- щем я буду писать еще об этом. В этом номере я привожу вступи- тельную статью. 1. Защита от стандартных дизасемблеров и отладчиков. Наличие защитных механизмов от дизассемблеров и отладчиков в исполняемом модуле программы является первым и, пожалуй, наибо- лее сложным препятствием перед хакером. Целью данных механизмов является недопущение или, по крайней мере, максимально возмож- ное затруднение анализа исполняемого кода программы. Таким об- разом, защита от стандартных дизассемблеров и отладчиков должна быть неотъемлемой частью любого профессионального пакета защиты от несанкционированных действий по отношению к вашему програм- мному продукту. Вполне объяснимо желание подавляющего большинства хакеров рабо- тать с твердой копией исследуемой программы. Вследствии этого первоочередной проблемой, с которой сталкивается хакер при взломе практически любой защиты является дизассеблирование ис- полняемого кода программы и получение листинга с мнемоническим изображением ассемблерных команд. Сложность решения данной проблемы обусловлена использованием таких методов скрытия исходного текста программы от стандартных средств дизассемблирования, как шифрование. Применение простейших их разновидностей уже достаточно для дос- тижения цели в случае если хакер не обладает определенным уров- нем знаний. В этом случае непосредственное дизассемблирование, как правило, не дает верных результатов, если вообще что-либо дает. Очевидно, что в данной ситуации хакеру необходимо прибег- нуть к каким-либо отладочным средствам для снятия шифра. Обычно это сделать несложно, так как зашифрованная программа, как пра- вило, производит обратную операцию в первых же своих операто- рах, на которые передается управление сразу же после запуска программы. Определив момент дешифрации можно программными сред- ствами "снять" в файл дамп памяти, занимаемой преобразованной программой и, прогнав его под каким-либо дизассеблером, получи- ть желаемый результат. Дело значительно усложняется, если защитный механизм использует поэтапную дешифрацию программы. Это означает, что программа де- шифрируется не сразу в полном объеме, а отдельными участками и в несколько этапов, разнесенных по времени работы программы. Таким образом, защита от дизассемблера оказывается распределен- ной по времени. В этом случае может быть использован следующий алгоритм устра- нения защиты. Необходимо попытаться выяснить с помощью отладоч- ных средств существует ли какая-либо подпрограмма или общий участок программы, осуществляющие дешифрацию. Если существует, то, запуская под отладчиком подпрограмму дешифрации требуемое количество раз с необходимыми входными параметрами, можно полу- чить полностью дешифрированную программу. Если же дешифрацию осуществляют несколько различных подпрограмм или участков прог- раммы, то вам предстоит очень нудная и кропотливая работа по их выявлению, а затем их поочередный и аккуратный запуск под отла- дчиком. Не забудте заблокировать каким-либо образом повторный вход в подпрограмму дешифрации при зпуске дешифрированной прог- раммы. Например, это можно сделать путем ее изменения таким об- разом, чтобы после входа в нее сразу осуществлялся выход с тре- буемым кодом возврата. Если размер исследуемой задачи невелик или ваши усилия по диза- ссемблированию программы с помощью стандартных средств оказали- сь тщетны, то анализ исполняемого кода защиты очень удобно про- водить с помощью хорошего отладчика, так как он позволяет диза- ссемблировать модуль программы с любого адреса. В качестве уни- версального дизассемблера хакеру можно порекомендовать отладчик Soft-ICE, имеющий очень широкий сервис и удобный интерфейс с пользователем. Литература : 1. PlayBoy, октябрь 1997. =) 2. Расторгуев С.П., Дмитриевский Н.Н. Искуство защиты и "разде- вания" программ. SPA*.FRM*.MAC8Б