IT-Блог о программировании и операционных системах

Защита Delphi-программ от взлома. Часть I – Инструментальная

Немного истории или cracked by Bill Gilbert

Во времена титанов, древних богов, мифов и легенд... Ах, нет, простите, на самом деле это случилось гораздо позднее, годах эдак в 80х. Во времена небезызвестных Спекки существовали программы. Были они всякими, маленькими и большими, нужными и не очень, всякие, в общем, они были. Создавались и игрушки разных мастей. Ну это и естественно, куда же без них, без игр? Кто-то до сих пор не прочь запустить на эмуляторе старый добрый Саботейр и порулить крутым ниндзя, надавать врагам по голове, спасти мир и улететь на вертолёте во вторую часть игры, в которой как ни странно фигурирует уже не ниндзя, а ниндзюха (или ниндзяха?), короче ниндзя - женщина (эдакая женониндзя). На самом же деле это была сестра того ниндзя, который из первой части. Ну вот, опять отвлекаюсь на свою любимую игрушку для Speccy...

Кому-то очень захотелось чтобы и жизнь бесконечная и патроны как говорится не кончались, ну знаете, как в американском кино, где главный герой (хороший парень или попросту - "наш") выстреливает в главного злодея все 30 патронов из своей Береты 92, в которой по определению больше 15ти не помещается. Но и это не всё! У него остаётся один патрон для последнего фаталити, коим он воспользуется и застрелит таки злодея. Супер-герой чувствует себя умеренно нормально, при этом у него как минимум 3 ранения и кровь хлещет как со свиньи! Но он должен выжить, ведь он - наш, хороший парень.

Bill_Gilbert_Logo Exolon_Screen_Stawicki

Так почему бы и своим компьютерным хорошим парням не дать тот бесконечный боезапас, не подарить "немного" дополнительной жизни? Так, скорее всего думал паренёк с именем (или скорее всего ником) Bill Gilbert. Этого парня, похоже, знают все, кто знает что такое ZX-Spectrum. Он взломал огромное колличество программ под Speccy, особенно игрушек. Так, этот Билл Гиллберт стал одним из первых реверс инженеров играющих свои роли как говорится Just for fun (на самом деле они все делают это JFF. Об этом я ещё расскажу). Cracked by Bill Gilbert - так теговал свои релизы один из первых крэкеров на одноимённой сцене... В ряде отломанных игрушек использовал нестандартные загрузочные картинки, автором которых выступал художник M. Stawicki.

 

Но что происходило позже? А позже появился платный софт. Появилась защита. А вот люди, которые знали, как поменять пару байт в программе так, чтобы она вела себя так, как хотят они, уже были. И продолжают быть до сих пор... И вот уже наш Билл отламывает защиты на фирмовых игрушках, которые в большинстве своём мы и видели на наших Спектрумах.

Современная реверс-сцена

Громадное количество материалов, статей, утилит по теме крэкинга - всё это пишут, создают люди. Сколько их, откуда они и в конце концов кто они - это вопросы, на которые никто и никогда не сможет ответить точно (среди них например, есть юристы, каратеки, инженеры, писатели, архитекторы и даже флористы (да, есть) ). Но мы можем точно сказать, что они - прежде всего достойные программисты. Беру на себя определённую долю смелости и говорю, что они, указывают нам на наши же ошибки (Панацея от говно-кода?). Да и правда, кто как ни они стимулируют на создание всё новых и новых методов защиты? Некоторые скажут: - "Ага, ну как же! Ломать - не строить!", и будут совершенно не правы. В большинстве случаев, взлом даже самой маломальской защиты требует не дюжинных знаний, сосредоточенности и усидчивости.

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

Посмотрите на профессиональные инструменты, которые создают эти люди. Многие из них достойны высшей похвалы. Взгляните например на Kerberos (который не протокол).

На самом деле реверс-инженеров намного больше, чем кажется. Любой человек, который увлекается программированием на ассемблере (или хотя бы немного разбирается в нём) способен взломать ваш софт (более того, можно вообще не иметь представления об ассемблере и программировании вообще и тем не менее взламывать. Я расскажу об этом позже.)  Дело в том, что разработка на ассемблере - это больше половины времени проведённого в отладчике (имеется ввиду от времени разработки), а отладчик для реверсера - это первый и самый важный профессиональный инструмент. Об инструментах далее и пойдёт речь.

Профессиональный инструментарий реверс-инженеров

Во время исследования программного обеспечения взломщик прибегает к помощи некоторых профессиональных инструментов, а именно:

Дизассемблеры. Помогают преобразовать машинные коды программы в удобочитаемый ассемблерный код. Могут быть как автоматические (например, Sourcer), так и интерактивные (например, IDA Pro).

Декомпиляторы. Используются для перевода машинного кода в максимально приближенный к исходному на том же языке, на котором была разработана программа. На деле, как вы уже поняли, всё далеко не так. Хотя есть HexRays для IDA Pro, который по заявлениям генерит код на Си. Но и там не всё радужно. Об этом, когда-то писал Крис Касперски. Для Delphi существует DeDe (сейчас проект ведёт другой разработчик, и название изменилось на Delphi Decompiler). Кстати, не стоит думать, что он генерит чистый дельфовый код, нет. Но безусловно, он очень помогает в исследовании программ написанных на Delphi и Builder.

Отладчики. Первым делом - это инструмент, который помогает найти трудноуловимые ошибки в коде (чаще в логике) программы. Позволяет выполнять программу пошагово, устанавливать в ней точки останова (брейкпоинт), а так же, изменять или контролировать значения переменных. Функции отладчика типа изменения кода являются скорее второстепенными, но всё же очень важными.

Шестнадцатеричные редакторы (Hex-редакторы). Менее распространенное название - редакторы двоичных файлов. Инструмент для редактирования и просмотра бинарных данных в шестнадцатеричном представлении. Хорошие редакторы имеют в своём распоряжении ещё и дизассемблер (плюс много других интересных возможностей). Такие редакторы применяются реверсерами в основном для патча некоторых байт, что позволяет им обходить ограничения незарегистрированной копии.

Анализаторы и редакторы исполняемых файлов. Позволяют получить (или изменить) информацию об исполняемом файле. Например, значения полей его заголовков, название и версию компилятора, или упаковщика (протектора), если оный защищён навесной защитой. Экономит взломщику кучу времени и даёт всю необходимую информацию. Кроме того, может показать взломщику дополнительную важную информацию о секциях и точке входа. Пример анализатора - PEiD, DiE, редактора - PETools или LordPE. В основном все анализаторы работают по принципу распознавания сигнатур.

Программы мониторинга (работы с файлами, реестром, сетью, мониторинг вызова функций WIN API...). Позволяют следить, к какому файлу (файлам) обращается приложение, какие порты открывает, с какими адресами устанавливает соединения, какие функции WinAPI активно использует, какие ключи реестра мониторит, меняет или читает…

Оконные шпионы. Позволяют узнать класс, дескриптор любого windows-окна. Будь то кнопка или мемо. Позволяет изменить его стиль (например, убрать установить WS_VISIBLE), узнать всё о дочерних и родительских окнах, изменить их свойства и даже узнать адрес оконной процедуры. Узнать id процесса. Пример грамотного оконного шпиона - WinSpy++ (от J.Brown).

Редакторы и перекройщики ресурсов. Редакторы ресурсов - незаменимые инструменты. Порой достаточно просто удалить назойливое окно-напоминание (Nag-screen) из ресурсов и программа взломана (как например в WinRAR). Так же можно изменять стили элементов управления, что позволяет, например неактивное сделать активным, или невидимое - видимым. Ещё эти программы часто применяют для создания локализаций для программного обеспечения. Примерами таких утилит могут служить Resource Hacker или Restorator.

Перекройщики ресурсов в свою очередь используются для того, чтобы восстанавливать секцию ресурсов (.rsrc), после распаковки программы, или снятия с неё навесного протектора. Например, инструмент под названием ResFixer (от seeQ) достаточно хорошо справляется с этой задачей.

Автоматические распаковщики. Сами по себе не столь важны, но тоже позволяют сэкономить уйму времени взломщику. А что, очень удобно например не тратить своё драгоценное время на распаковку того же AsPack или UPX (которые кстати реальной защиты дают ровно нуль, так как снимаются буквально за минуты даже вручную), а скормить его распаковщику и дело в шляпе. Для большинства упаковщиков существуют подобные программы, в основном для самых простых и распространенных, но против более сильных особей приходится сражаться вручную. Примерами автоматических распаковщиков могут служить следующие разработки: Quick Unpack, RL!dePacker.

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

Программы для восстановления импорта. Эти программы собирают всю информацию о импортируемых программой функциях, систематизируют, сортируют и анализируют полученную информацию и на ее основе, создают новую таблицу, которая будет совместима с загрузчиком Windows. Затем просто клеят дамп и новую таблицу, получая (если повезло) новый, уже распакованный и работоспособный исполняемый файл.

Следует сказать, что существует ещё масса полезных для взломщика инструментов. Их действительно очень много, но основные и самые нужные, я (как мне кажется) описал.

2 комментария: