Главная > Документ


отладка без исходных текстов
(hacker source-missed debuging uncoverd)

аннотация

Взлом – это естественная потребность всякого разумного существа. Тернистый путь познания истинной сути вещей проходит через их разрушение. Оглянитесь вокруг: физики-атомщики расщепляют ядра так, что брызги материи летят, химики-аналитики разбивают длинные молекулы на множество мелких, математики активно используют метод декомпозиции. И никто из них не заслуживает порицания!

Хакерство – это не вандализм. Это проявление природного любопытства к познанию окружающего нас мира. Дизассемблерные листинги, машинные команды, черные экраны soft-ice, напоминающие о первой молодости MS-DOS, – все это безумно интересно и увлекательно. Посреди них раскинулся целый мир скрывающих механизмов и защитных кодов. Не ищите его на картах – он существует лишь в обрывках беспорядочно разбросанных по полу распечаток, технических руководствах, автоматически открывающихся на самых интересных местах, и, конечно же, многочисленных бессонных ночах, проведенных за монитором.

Это не учебник по взлому и не руководство по защите от хакеров. Таких книг уже написано предостаточно. Баста! Надоело! Перед вами лежат путевые заметки кодокопателя, своеобразный сборник любопытных историй, произведших с мыщъ'ем в киберпространстве. Вы побываете и внутри компиляторов фирмы Intel, и внутри защитных механизмов коммерческих программ, узнаете как работает отладчик и как правильно держать его в руках. В общем, если не струсите и не отбросите эту книгу прочь, вас ожидает много интересного.

об авторе

Небрежно одетый мыщъх 28 лет, не обращающий внимание ни на мир, ни на тело в котором живет и обитающий исключительно в дебрях машинных кодов и зарослях технических спецификаций. Не общителен, ведет замкнутый образ жизни хищного грызуна, практически никогда не покидающего свою норку – разве что на звезды посмотреть или на луну (повыть). Высшего образования нет, а теперь уже и не будет; личная жизнь не сложилась, да и вряд ли сложится, так что единственный способ убить время from dusk till dusker – это полностью отдаться работе.

Одержим компьютерами еще со старших классов средней школы (или еще раньше – уже, увы, не помню). Основная специализация – реинженеринг (т.е. дизассемблирование), поиск уязвимостей (попросту говоря «дыр») в существующих защитных механизмах и разработка собственных систем защит. Впрочем, компьютеры – не единственное и, вероятно, не самое главное увлечение в моей жизни. Помимо возни с железом и блужданий в непроходимых джунглях защитного кода, я не расстаюсь с миром звезд и моих телескопов, много читаю, да и пишу тоже (в последнее время как-то больше пишу, чем читаю). Хакерские мотивы моего творчества не случайны и объясняются по-детски естественным желанием заглянуть "под капот" компьютера и малость потыкать его "ломом" и "молоточком", разумеется, фигурально – а как же иначе понять как эта штука работает?

Если считать хакерами – людей, одержимых познанием окружающего мира, то я – хакер.

Рисунок 1 рисунок Олега Морозова

условные обозначения

Все исходные тексты, приводимые в настоящей книге, нумеруются уникальными восьмизначными числами, что позволяет избежать их перенумерации при добавлении в книгу новых примеров, а так же дает возможность "прозрачно" ссылаться на листинги, приведенные в остальных моих книгах.

Знак "$" в ссылках на листинги интерпретируются как "следующий листинг". Соответственно, "$ – 1" обозначает предыдущий листинг.

Строка, выделенная инверсным цветом, обычно (т. е. если не оговорено обратное) символизирует текущую позицию курсора в отладчике.

Нумерация частей — двоичная (начиная с нуля), глав— шестнадцатеричная, подглавы не нумерованы. Номер главы представляет собой 16-разрядное число, старший байт равен номеру части, младший — сквозному номеру главы. Очень удобно! Стоит сказать, "см. главу 030Bh" и уже знаете где ее искать!

о чем и для кого эта книга

If you do accept the society where we are compelled to live, its awfully egoistic way of life and its dirty "profit" values, you may eventually learn how to disable some simple protections, but you'll never be able to crack in the "right" way. You must learn to despise money, governments, televisions, trends, opinion-makers, public opinion, newspapers and all this preposterous, asinine shit if you want to grasp the noble art, coz in order to be emphatic with the code you must be free from all trivial and petty conventions, strange as it may sound. So you better take a good look around you... you'll find plenty of reasons to hate society and act against it, plenty of sparks to crackle programs in the right way... Hope all this did not sound too cretin

+ORC an526164@anon.penet.fi

Изначально эта книга позиционировалась как хрестоматия для профессионалов, однако, пробная публикация отдельных глав в Сети профессионалам пришлась не по вкусу. Им не понравилось большое количество "воды" и слишком "разжеванные" с их точки зрения объяснения. Начинающие кодокопатели резонно возражали – что для одного "вода", для другого – хлеб, пиво и каша в придачу. Понятное дело, что каждый читатель хотел видеть книгу такой, какая была бы наиболее удобна ему одному, но удовлетворить интересы всех категорий читателей в одной-единственной книге (к тому же не претендующей на полноту и новизну излагаемой информации) – невозможно.

Основную ставку автор делает на начинающих – как на наиболее многочисленную и благодарную аудиторию. Профессионалы же вообще не нуждаются в подобных книгах. "Есть" – говорили они мне – "у тебя с десяток интересных страниц, но они размазаны по всему тексту и потому читать такую книгу можно только по диагонали в порядке общего ознакомления". Нет, не подумайте, что такие заявления меня обидели! Напротив, помогли лучше понять свое место и предназначение.

Чего греха таить – до звания "профессионала" автору еще очень далеко и потому позиционировать свои книги для той аудитории, к которой он не принадлежит, мягко говоря не тактично. Правда, понятие "профессионала" и "начинающего" очень условны и многие начинающие легко уделывают иных профессионалов. Племя подлинных профессионалов очень малочисленно и невелико – в прямом смысле слова считанные единицы. Так что невозможно сказать заранее: найдете ли вы что-то новое в данной книге или нет. Единственный способ выяснить это – купить ее и прочитать.

Эта книга не для кракеров! Несмотря на то что в ней рассматриваются и даются в виде законченных технологий механизмы атак на широко распространенные системы, это просто _информация_, а не руководство к действию. В любом случае правовую ответственность за компьютерный вандализм еще никто не отменял и прежде чем использовать полученные знания на практике, неплохо бы ознакомиться с уголовным кодексом и запастись адвокатом. В идеальном демократическом обществе, принимаемые законы лишь закрепляют уже сложившуюся систему отношений, защищая при этом интересы большинства. А чего хочет большинство? Правильно! Хлеба и зрелищ! Ну, с хлебом все более или менее понятно. Даже в странах третьего мира от голода практически никто не умирает. Со зрелищами же ситуация значительно сложнее. На фоне катастрофической деградации аудио/видео индустрии борьба с пиратством приобретает воистину угрожающий размах, ущемляя интересы как отдельно взятых пользователей, так и всего мирового сообщества в целом. Власть захватили медиамагнаты и демократия умерла. "Сильные мира сего" лоббируют законы, служащие пару десятков миллиардеров, и противоречащие интересам остальных. Ряд научных и инженерных исследований в области информационной безопасности частично или полностью запрещен. Потребитель даже не имеет права заглянуть дизассемблером в тот продукт, который ему впаривают. Look, but don't touch! Touch, but don't taste! Taste, but don't swallow! Ситуация дошла до своего логического абсурда и воздухе запахло бунтом. Бунтом простив тоталитаризма "демократического режима", бунтом против авторского и патентного права, когда один пронырливый коммерсант отнимает у человечества то, что ему принадлежит по праву. Информация — общедоступный ресурс, такой же как вода и воздух. Мы дети свой культуры. Наши мысли и суждения, которые мы искренне считает "своими" на самом деле представляют комбинацию уже давно придуманного и высказанного. Удачные находки, яркие идеи… все это результат осмысления и переосмысления когда-то услышанного или прочитанного. Вспомните свои разговоры в курилках — даже располагая диктофонной записью невозможно установить кто первым высказал идею, а кто ее подхватил. Знание — продукт коллективного разума. Никто не должен единолично им владеть.

Взлом защиты — это выражение протеста против насилия и несправедливости. Сажать за него можно, но бесполезно. Говорят, что в СССР одного человека посадили за то, что он сказал "у нас нет демократии". Америка, похоже движется тем же путем. А ведь взломщики и защитники информации не только враги, но еще и коллеги. Хакерство и программирование действительно очень тесно переплетены. Создание качественных и надежных защитных механизмов требует навыков низкоуровневой работы с операционной системой, драйверами и оборудованием; знаний архитектуры современных процессоров и учета особенностей кодогенерации конкретных компиляторов, помноженных на "биологию" используемых библиотек. На этом уровне программирования грань между собственно самим программированием и хакерством становится настолько зыбкой и неустойчивой, что я не рисковал бы ее провести.

Начнем с того, что всякая защита, равно как и любой другой компонент программного обеспечения, требует тщательного и всестороннего тестирования на предмет выяснения ее работоспособности. Под "работоспособностью" в данном контексте понимается способность защиты противостоять квалифицированным пользователям, вооруженным хакерским арсеналом (копировщиками защищенных дисков, эмуляторами виртуальных приводов, оконными шпионами и шпионами сообщений, файловыми мониторами и мониторами реестра). Качество защиты определяется отнюдь не ее стойкостью, но соотношением трудоемкости реализации защиты к трудоемкости ее взлома. В конечном счете, взломать можно любую защиту – это только вопрос времени, денег, квалификации взломщика и усилий, но грамотно реализованная защита не должна оставлять легких путей для своего взлома. Конкретный пример. Защита, привязывающаяся к сбойным секторам (которые действительно уникальны для каждого носителя) бесполезна, если не способна распознать их грубую эмуляцию некорректно заполненными полями EDC/ECC. Еще более конкретный пример. Привязка к геометрии спиральной дорожки лазерного диска даже будучи реализованной без ошибок, обходится путем создания виртуального CD-ROM привода, имитирующего все особенности структуры оригинального диска. Для этого даже не нужно быть хакером, – достаточно запустить Alcohol 120%, ломающий такие защиты автоматически.

Ошибки проектирования защитных механизмов очень дорого обходятся их разработчикам, но гарантированно застраховаться от подобных просчетов – невозможно. Попытка применения "научных" подходов к защите программного обеспечения – чистейшей воды фарс и бессмыслица. Хакеры смеются над академическими разработками в стиле "расчет траектории сферического коня в вакууме", и практически любая такая защита снимается за 15 минут без напряжения извилин. Вот грубый, но наглядный пример. Проектирование оборонной системы военной крепости без учета существования летательных средств позволяет захватить эту самую крепость чуть ли не на простом "кукурузнике" (MS WDB – кукурузник), не говоря уже об истребителях (soft-ice – истребитель, а IDA Pro – еще и бомбардировщик).

Для разработки защитных механизмов следует иметь хотя бы общее представление о методах работы и техническом арсенале противника, а еще лучше – владеть этим арсеналом не хуже противника (то есть владеть им в совершенстве). Наличие боевого опыта (реально взломанных программ) очень и очень желательно, – пребывание в шкуре взломщика позволяет досконально изучить тактику и стратегию наступательной стороны, давая тем самым возможность оптимальным образом сбалансировать оборону. Попросту говоря, определить и усилить направления наиболее вероятного вторжения хакеров, сосредоточив здесь максимум своих интеллектуальных сил. А это значит, что разработчик защиты должен глубоко проникнуться психологией хакеров, настолько глубоко, чтобы начать мыслить как хакер…

Таким образом, владение технологией защиты информации предполагает владение технологией взлома. Не зная того, как ломаются защиты, не зная их слабых сторон, не зная арсенала хакеров – невозможно создать стойкую, дешевую и главное простую в реализации защиту. Поэтому, описывая технику защиты, было бы по меньшей мере нечестно замалчивать технику ее взлома.

Существует мнение, что открытые публикации о дырах в системах безопасности приносят больше вреда, чем пользы и их следует в обязательном порядке запретить. Другими словами, достойную защиту от копирования мы создать не можем, признавать свои ошибки – не хотим и, чтобы цивилизацию не разрушил первый же залетный дятел, мы должны перестрелять всех дятлов до единого. Вовсе не собираясь апеллировать к заезженной пословице "кто предупрежден – тот вооружен", обратимся за советом к фармацевтической индустрии. Как бы она отнеслась к появлению рекламы, пропагандирующей некий никем не проверенный, но зато невероятно эффективный препарат, исцеляющий немыслимое количество заболеваний и при этом обязательный к применению? Проводить химический анализ препарата вы не имеете права, равно как не имеете права открыто публиковать результаты своих исследований, выявивших, что за личиной "панацеи" скрывается обыкновенный и довольно низкокачественный аспирин с кучей посторонних примесей и целым "букетом" побочных эффектов. Еще бы! Ведь публикации подобного рода заметно охлаждают потребительский пыл, и предпочтение отдается другим препаратам.

Кто виноват: фирма, обманывающая своих покупателей или исследователи, открывшие покупателям глаза? Если аналогия между фармацевтикой и программным обеспечением кому-то покажется некорректной, пусть он ответит на вопрос: какие задачи решают защитные механизмы и каким требованиям они должны отвечать? Всякая технология имеет свои ограничения и свои побочные эффекты. Рекламные лозунги, позиционирующие защиту как стойкую и абсолютно непрошибаемую, всегда неверны. Коль скоро носитель можно воспроизвести, можно его и скопировать. Весь вопрос в том – как. Запрет на хакерскую деятельность ничего не меняет. Тех, кто занимается несанкционированным клонированным дисков в промышленных масштабах, подобные запреты вряд ли остановят, а вот легальные исследователи будут страдать: профессиональный зуд видите ли дает о себе знать. Ну что поделаешь, есть на земле такая категория людей, что не может удержаться от соблазна заглянуть под крышку черного ящика и, дотрагиваясь до вращающихся шестеренок, пытается разобраться: как же все это, блин, работает? Специфика защитных механизмов состоит в том, что дерьмо визуально ничем не отличается от шедевра. Вам остается уповать лишь на авторитет поставщика или же методично приобретать все продукты один за другим, при этом не будучи уверенным в том, что на рынке вообще присутствуют достойные защитные механизмы. И это действительно так! Качество коммерческих защит настолько низко, что они оказываются не в стоянии справиться с автоматическими копировщиками программ, запущенными обыкновенными пользователями, коих миллионы. Стоит ли говорить, что некопируемость автоматически копировщиками – это минимально разумное требование, предъявляемое ко всякой защите? В идеале же, защита должна противостоять квалифицированным хакерам, вооруженных всем необходимым арсеналом программно-аппартаных средств взлома? Качественные защитные алгоритмы есть, но они не представлены на рынке. Почему? Да все потому, что отсутствие достоверной информации о стойкости тех или иных защитных пакетов, не позволяет потребителю осуществлять сознательный выбор. А раз так – зачем производителям напрягаться?

Адептам авторского права важно понять: чем интенсивнее ломаются защитные механизмы, тем стремительнее они совершенствуются! Поскольку у разработчиков появляется реальный стимул к созданию действительно качественных и конкурентоспособных защитных пакетов! Начнем с малого: правило Кирхгофа – базовое правило для всех криптографических систем – гласит: стойкость шифра определяется только секретностью ключа, т. е. криптоаналитику известны все детали процесса шифрования и дешифрования, кроме секретного ключа. Отличительный признак качественной защиты – подробное описание ее алгоритма. В самом деле, глупо скрывать то, что каждый хакер может добыть с помощью отладчика, ящика пива и дизассемблера. Собственно говоря, скрупулезное изучение подробностей функционирования защитного механизма можно только приветствовать. В конце концов существует такое понятие как полнота представления сведений о товаре и попытка сокрытия явных конструктивных дефектов строго говоря вообще не законна. Всякой Хорошей Вещи гласность только на руку, а вот Плохие Вещи боятся ее как огня.

Апелляция к "цифровой эпохе" и якобы вытекающая отсюда необходимость пересмотра законов – это грязное словоблудие и ничего более. Большое количество судебных исков, вчиненных вполне легальным исследователям защищенных программ, не может не удивлять. Несмотря на то, что подавляющее большинство подобных исков решаются мирным путем, сама тенденция выглядит довольно угрожающей. Чего доброго завтра и shift как "хакерскую" клавишу запретят, поскольку она позволяет отключить автозапуск лазерного диска в OS Windows, а некоторые защитные механизмы как раз на этом и основаны. То, что еще позавчера казалось фантасмагорическим бредом, вчера вылилось в реальный судебный иск.

Закон DMCA (Digital Millennium Copyright Art) действительно запрещает распространять технологии, устройства, продукты и услуги, созданные с целью обходить существующие системы защиты, что выглядит вполне логично. Правозащитники пытаются уберечь мир от очевидных преступников и вандалов, однако, следует разделять взлом как таковой и исследовательскую деятельность в области информационной безопасности. Взлом, преследующий личную выгоду или совершаемый из хулиганских побуждений, достоин по меньшей мере порицания, а по большей – штрафа или тюремного заключения. Причем тяжесть наказания должна быть сопоставима с величиной причинного ущерба. Приравнивать хакеров к террористам, право же, не стоит! Терроризм, равно как и хакерство, демонстрирует катастрофическую неспособность американского правительства обеспечить должный уровень безопасности, подчеркивая чрезмерную сосредоточенность власть имущих на своих собственных интересах и проблемах. Все! Никаких других точек соприкосновения у террористов и хакеров нет!

Книги, рассматривающие вопросы безопасности исключительно со стороны защиты, грешат тем же, что и конструкторы запоминающих устройств, работающих только на запись, – ни то, ни другое не имеет никакого практического применения. Но эта книга не предназначена для разработчиков защит! Я не хотел делать упор ни на одну из категорий, потому что проблемы защиты информации скорее организационные, чем технические. Разработчики ПО не нуждаются в таких книгах и вообще редко прислушиваются к советам по реализации защитных алгоритмов, а хакеры от всего этого просто балдеют и морально разлагаются теряя стимул к развитию.

Термин "хакер" имеет множественные трактовки, которые было бы бессмысленно перечислять здесь и тем более останавливаться на какой-то из них, игнорируя остальные. Но в лучшем значении хакер – это индивидуал, смотрящий в корень и стремящийся разобраться во всем до конца. Для таких людей и предназначена эта книга. Везде, где это только возможно, я буду стремиться к обобщению и постараюсь не акцентировать внимание на конкретных реализациях. Это не означает, что в книге не встретится законченных схем. Напротив, в них не будет в недостатка. Но я не ставлю перед собой цель снабдить хакера готовым инструментарием.

Я не буду пытаться научить читателей "ловить рыбу", а рискну пойти немного дальше и привить некоторые навыки самообучения. Из любой самой нестандартной ситуации и при самом скудном инструментарии всегда можно найти выход. Типовые схемы часто оказываются бессильными и бесполезными. Любые навыки слишком привязаны к конкретному окружению. В наше время больших перемен уже поздно хвататься за традиционные схемы обучения. На обучение просто нет времени. Большинству программистов приходится осваивать новые технологии "на ходу", и задолго до конца обучения они уже полностью устаревают.

Системы защиты, заметим, развиваются заметно более медленно и ничего принципиально нового за последние год-два не было придумано или широко внедрено. Это обнадеживает, особенно на фоне деградации качества реализации широко распространенных систем безопасности. С другой стороны, толковых учебников и изданий по данной тематике тоже не выходило. Это привело к тому, что действительно грамотно спроектированных и качественно реализованных защит сегодня на массовом рынке практически не наблюдается. Большинство авторов, с трудом припоминая школьный курс алгебры, разрабатывают собственные алгоритмы, которые при близком рассмотрении криптостойкими не являются. Все математическое богатство валяется бесхозным и нетронутым, хотя на рынке достаточно много качественных и вполне современных изданий. Я не стремлюсь повторить уже проделанную работу, а просто буду отсылать по ходу дела к конкретным источникам.

Цель этой книги — научить читателя самостоятельно добывать необходимые ему знания и навыки, порой не имея соответствующей литературы и информации. Современное информационное изобилие приводит к атрофированию навыков самостоятельного получения необходимых знаний. Парадоксально на первый взгляд, но недостаток литературы развивает и тренирует мозги куда лучше, чем ее избыток. Сам я осваивал ассемблер 8086 с помощью утилиты : кроме нее (и свободного времени) у меня в ту пору не было НИЧЕГО. Логика работы команд изучалась анализом воздействия последних на регистры и память. Эта было утомительное занятие, и свободное владение ассемблером (без учета ряда некритичных команд) ко мне пришло приблизительно через три месяца. Наличие инструкции сократило бы этот срок до двух-трех дней (с учетом знания ассемблера других платформ), но зато не дало бы никаких полезных навыков.

Инструкция исключительно редко бывает исчерпывающей и доступной. Полученные давным-давно навыки актуальны для меня до сих пор, ибо тенденция обратной зависимости качества инструкции от ее объема в последнее время стала угрожающе превращаться из метафоры в реальность. Главный психологический барьер для многих — это ощущение беспомощности перед компьютером. Человек ощущает не хозяином ситуации, а незадачливым экзаменуемым, наобум пытающимся угадать, чего же от него хочет машина. Знакомая ситуация: вызываемая функция упрямо ведет себя не так, как описано в документации, и не работает.

В данном случае не помешает прибегнуть к дизассемблированию и анализу ситуации, но, возможно, оптимальным окажется другое решение. В любом случае возможны свои нетривиальные варианты. Наивно полагать, что схема "нажал на кнопку — получил банан" работает во всех ситуациях. Или что банан непременно удастся достать с помощью палки либо ящика. А если нет? Если задача не имеет известного и опробованного решения? Вот тогда и приходится действовать, как говорят, "по обстоятельствам". Научить этому читателя — вот моя задача.



Скачать документ

Похожие документы:

  1. Русско-английский словарь компьютерной лексики Англо-русский и русско-английский словарь компьютерной лексики Москва «ОЛМА-Пресс Образование» 2004

    Документ
    ... source disk исходный документ source document исходный код source code исходный модуль source module исходный текст source (text); incoming text исходный текст ...
  2. Англо-русский и русско-английский словарь компьютерной лексики

    Документ
    ... source disk исходный документ source document исходный код source code исходный модуль source module исходный текст source (text); incoming text исходный текст ...
  3. Англо-русский и русско-английский словарь компьютерной лексики

    Документ
    ... source disk исходный документ source document исходный код source code исходный модуль source module исходный текст source (text); incoming text исходный текст ...

Другие похожие документы..