Лекция
Привет, Вы узнаете о том , что такое обратная разработка, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое обратная разработка, reverse engineering, реверсинжиниринг , настоятельно рекомендую прочитать все из категории Криптоанализ, Виды уязвимости и защита Информации .
обратная разработка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering, реверсинжиниринг ) — исследование некоторого готового устройства или программы, а также документации на него с целью понять принцип его работы; например, чтобы обнаружить недокументированные возможности (в том числе программные закладки), сделать изменение или воспроизвести устройство, программу или иной объект с аналогичными функциями, но без прямого копирования.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Правообладатели таких объектов могут заявить, что проведение обратной разработки или использование ее результатов нарушает их исключительное право по закону об авторском праве и патентному законодательству .
Alen nobi, nostra ales
фраза из одного совкового фильма
если один человек построил, другой завсегда разобрать может!
Россия
США
Евросоюз
В Евросоюзе отношения в области охраны интеллектуальной собственности регулируются некоторыми директивами. В области авторского права процессы унификации и гармонизации связаны, прежде всего, с правовой охраной авторских и смежных прав, компьютерных программ и баз данных.
В 2016 году на заседании Правительственной комиссии по импортозамещению министр промышленности торговли РФ Д.В.Мантуров заявил о планах создать на базе Фонда развития промышленности центр обратного инжиниринга .
Копирование различных механизмов и машин без фактической разработки. Позволяет минимальными затратами воспроизвести удачную конструкцию, но есть случаи копирования и неудачных машин.
Примеры:
Обратная разработка электронных устройств появилась еще на заре радиотехники. В 1920-1930 годах различные фирмы копировали друг у друга радиолампы и схемотехнические решения их применения. Именно с обратной разработкой, а не с лицензионным производством, связано то, что радиолампы одного назначения почти всех производителей оказались унифицированными и взаимозаменяемыми. Например европейская лампа EL95 клон более ранней американской лампы 6KA5. Есть и обратные примеры: американские 6CA5 и KT88 - клоны европейской лампы EL34. То же самое относится и к советским радиолампам, многие из которых являются клонами американских ламп, получаемых по ленд-лизу (например 6Ж4, 6П9) или немецких из трофейной аппаратуры (6Г2, ГУ50).
Исследование и обратная разработка программ обычно осуществляются с целью дальнейшей модификации, копирования, или, например, написания генераторов ключей, алгоритм работы которых получен на основе анализа алгоритма их проверки. Также исследование программ применяется с целью получения некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты или о взаимодействии с другой программой. Еще одна область применения — получение информации о способах экспортирования данных из многочисленных проприетарных форматов файлов .
С развитием Интернета популярные операционные системы и программы все интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. «дыр». В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удаленному компьютеру или компьютерной сети. C другой стороны, обратная разработка применяется при исследовании антивирусными компаниями вредоносного ПО c целью добавления его сигнатур в базы своих продуктов.
Одним из широко известных примеров обратной разработки является исследование BIOS персонального компьютера IBM, ставшее серьезным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера Samba (входящего в состав ОС GNU/Linux и работающего с серверами на базе ОС Windows) также потребовало обратной разработки используемого Microsoft протокола SMB. Создание многих ICQ-клиентов также потребовало обратной разработки протокола ICQ.
Обратная разработка программного обеспечения производится с помощью следующих методик.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. clean room reverse engineering, то есть процесс, при котором одна группа разработчиков анализирует машинный код программы, составляет алгоритм данной программы на псевдокоде либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Об этом говорит сайт https://intellect.icu . Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом, особенно при условии контроля отсутствия этой идентичности первой группой разработчиков и отсутствия нарушений торговых марок и патентов.
Базы данных
Может использоваться при создании реляционной модели базы данных.
Обратная разработка продукта конкурента с целью узнать его устройство, принцип работы и оценить возможности создания аналога.
Так например, ряд производителей фототехники, таких как Sigma, Tamron, Tokina и Carl Zeiss, выпускают объективы с байонетом типа Canon EF. Они созданы методом обратной разработки, а их производители не имеют доступа к спецификациям Canon
Jerry cans
Самыми известными фактами обратной разработки во время Второй мировой войны являлись:
Реверсинг ПО — восстановление принципов/идей/алгоритмов работы программы для исследования и/или создания аналогичного ПО. Часто применяется для:
Не следует путать взлом ПО с его реверсингом: для взлома достаточно разобрать принцип работы лицензионной проверки, а реверсинг — это полный разбор программы по кирпичикам и раскладывание своего мозга по уровню кошерности.
Для успешного кодоворовства требуется знать ассемблер, иметь общее представление о криптографии, знать мунспик и теорию вероятностей — не быдлокодер ли твой предшественник? Ну и матан — например, теорию графов для анализа ветвлений. Но можно и не знать, главное — уметь быстро найти, что почитать, и резво разобраться.
Реверс инжиниринг дивайса
Реверсинг железа — всяких блоков управления стиральными машинами, субару импрезами, контрольно-кассовыми машинами. Обычно применяется для:
Любой разработчик и производитель имеет свою лабораторию анализа отказов для настоящего чип-реверсинга. Вот, например, фотоотчет о лаборатории Atmel.
В той стране от безысходности вообще было принято решение об отказе от разработки собственных чипов.[ЩИТО?] Копиворовство топологии ИМС был поставлен на широкую ногу.
Дизассемблер — это утилита, преобразующая бинарный код в ассемблерный листинг. В простейших случаях этого вполне достаточно, и остается немного покурить и найти то, что нужно. В худших — это каша, и без скриптов и/или отладчика не обойтись.
Hiew (Hacker’s viewer). Небольшая утилита, для нормальных людей бесполезная, юзают лишь надрочившиеся спецы, иногда — продвинутые пользователи (как шестнадцатеричный редактор). Давно существует куча GUI-шных тулзов для тех же целей, но по славной традиции тулзу продолжают использовать…
Sourcer от компании V Communications. Стародавний мощный дизассемблер времен DOS и ранних версий Windows. Позволял из .COM или .EXE файлов получать непосредственно .ASM файл, причем для различных компиляторов ассемблера, таких как TASM или MASM. Если было задано достаточное количество проходов при дизасемблировании, то с высокой степенью вероятности можно было при компилировании только что созданного .ASM файла получить исходную исполнимую программу байт-в-байт. Доставлял хорошими комментариями в листинге, скоростью работы, поддержкой разных типов процессора и, конечно, олдскульным сценовским интерфейсом. Сейчас не актуален, хотя некоторые анонимусы продолжают держать его в своем инструментарии, например, для дизассемблирования MBR жесткого диска, Boot-сектора, специальных утилит, загружаемых с дискеты без какой-либо ОС (например утилиты перепрошивки BIOS или утилиты от производителей HDD), и прочего. То есть для низкосистемных нужд. Последней явилась на свет версия v8.01 от 2001 года. Sourcer — помним, любим, скорбим!
Без этих вещей вы никогда не узнаете, что процессор Nippon-Denso NP648976 на самом деле жалкий клон Motorola 6803 с 16К ROM на борту. А когда узнаете, поймете, что япошки никогда ничего сами не придумывали, а только умело крали.
Отладчик — программа для контролируемого исполнения программы или в общем случае любого произвольного куска кода, вплоть до инжектированной в другой процесс DLL. Продвинутый отладчик умеет использовать аппаратные средства отладки, ну и, конечно, дизассемблировать.
Матрица поимела тебя. Анализ кода в IDA.
IDA в линуксе или линукс в IDA?
IDA
Основной дизассемблер на сегодняшний день. Обладает множеством функций типа поддержки скриптов, графического режима или встроенных плагинов вплоть до эмулятора x86. Не тупой интерфейс — множество интуитивно понятных «горячих» клавиш и т. п. Проекту уже лет 15, и он единственный из дизассемблеров живет активной жизнью и поныне: у других в новых версиях фичи почти не родятся. До сих пор таскает с собой DOS-GUI версию для олдфагов. Также известен нефиговой ценовой политикой.
Пишет его татарский расовый мудак по имени Ильфак Гуильфанов. Детали истории создания дизассемблера покрыты мраком, но известно, что Ильфаку, как и Биллу Гейтсу с DOS, добрые люди помогли написать первые версии. И задумывался он как инструмент для восстановления прошивок HDD. Дальше, непонятно как и почему, люди разошлись, и остался он один. Потом Ильфак всплывает с версией 3.x уже от лица фирмы Datarescue, которая купила проект. Начиная с версии 4.0, у него появляется GUI, написанный на BCB! С этого времени продукт начинает приобретать массовую известность в узких кругах по двум причинам:
Остановимся на втором пункте подробнее.
Ильфак, будучи на данном рынке монополистом, давно забил на пользователей член. Потому что берут и так. Любой юзер IDA, которому приходилось иметь дело с поддержкой, получал кучу отрицательных эмоций: получив продукт с кучей багов, вы предоставлены себе в их исправлении. Ошибки исправлять никто не спешит — можно легко прождать полгода, даже если баг вопиющий. Продукт практически не тестировался перед релизами и не тестится до сих пор. Юзеры IDA вынуждены хранить несколько версий, потому что в одной хорошо работает одна фича, в другой — другая, в третьей — третья.
А среди «неофициальных» юзеров Ильфак нелюбим за то, что без спроса берет идеи. За счет того, что IDA поставляется с SDK, юзеры могут делать свои плагины к IDA, и таки делают немало. Плагины пишутся как для того, чтобы исправить баги оригинальной функциональности, так и ради добавления своих фич для решения конкретных задач. Уровень альтруизма среди «неофициальных» юзеров высок, и исходники плагинов выкладываются на всеобщее обозрение. Так вот, примерно через полгода после появления полезных исходников это становится фичей IDA. У Ильфака на этот счет железное алиби: «То, что тут придумали — это не новая идея, это меня пользователи попросили еще год назад».
Вначале народная ненависть выливалась в троллинг на форуме официального русского сайта. Но потом все быстро утихло, ибо Ильфак анально отгородил форум официальных юзеров, а с неофициальными общаться перестал. Посему примерно раз в год то китайцы, то албанцы, то русские (был интересный случай, когда народ скидывался на руборде, чтобы купить одну копию и поделиться), то немцы тырят с тренингов, кардят, хачат сервера с IDA и коммуниздят очередную версию. Чем каждый раз нереально доставляют целевой аудитории IDA. А официальные юзеры потом смотрят в закрытые форумы поддержки и скидывают цитаты баттхерта Ильфака в публику, повышая градус веселья.
Потом Ильфак свалил с Datarescue и стал делать IDA от лица своей конторы Hex-Rays. Ходят слухи, что он нанял наконец программеров с прямыми руками, которые наконец начали чистить его говнокод. Поэтому версия 5.5 была воспринята с одобрением, и некоторые неофициальные пользователи даже начали помышлять о приобретении. Но эйфория продлилась недолго, баги снова были найдены, и все вернулось на круги своя.
Ознакомиться с историей спионеривания можно тут. В июле 2011 года у антивирусной компании была уперта полная версия декомпилятора версии 6.1. TEH DRAMA!
SoftIce
Прошлый desktop-тред в бамплимите, начинаем новый…
Дебаггер, работающий на нулевом уровне, на котором можно все. Появляется по нажатию CTRL+D, и все остальное — программы, драйвера и даже некоторые прерывания перестают работать. Переставало идти даже «время», и задебажившийся индивид мог потом реально фалломорфировать, осознав сколько прошло времени в «реальном мире». Заодно обрубалась модемная связь, вызывая лютый багет от забытого брейкпоинта при ночном дозвоне по дайлапу. Можно трассировать что угодно: драйвер HDD, USB-антенны и т. п. А еще там работает мышь и можно делать скрины.
SoftIce вышел на рынок как отладчик уровня ядра совершенно неожиданно для самих создателей этого ядра — MS. Позиционировался как тулза «для нахождения багов в софте», но последние весьма разнообразны: сюда можно отнести MS Office, требующий ключ активации. Немаловажное преимущество: он умеет считывать при загрузке инфу о библиотеке, в процессе отладки показывая имена, например, Kernel.FindClose+105h.
Нынче похож на свежий навоз: его уже n лет никто не обновляет. И не будет — в связи с выпилом конторы разработчиков: Numega невозбранно была проебана за 30 сребреников мудацкой Compuware. В итоге все закончилось тотальным выпилом как нумеговских проектов, так и собственно офиса бывшей Нумеги. А остатки Девпартнера отдали какому-то ебучему реселлеру Microfocus, потому что Compuware после тотального экстерминатуса Нумеги забил на все эти ваши девпартнеры-девшмартеры болт.
Radare2
Целый фреймворк для реверс-инжиниринга. Изначально hex-редактор включает в себя дизассемблер, декомпилилятор... Лучше сами смотрите. Кроссплатформенный, с несколькими интерфейсами на выбор, а исходный код его открыт. Ня!
Остальные
WinDbg — как бы быдлокодерам, испытывающим от слова «Майкрософт» жжение в области ануса, ни было обидно, это самый популярный kernel-mode отладчик со времен смерти SoftIce. Да и в user-mode Винбэг обеспечивает лютый вин, кладя болт на эти ваши Debugging API и позволяя, например, заглянуть в native code для процесса, в который уже впилен отладчик для managed code.
Syser — китайский дебагер уровня ядра с GUI. Пришел на смену SoftIce, загнулся в 2011, проиграв войну новым 64-битным ядрам.
OllyDbg — отладчик третьего уровня, гуишный, симпатяффный, функционала выше крыши, применим для 95 % программ, а пропатчен ручками и для всех 98%. Но из-за того, что r3 среди профессионалов считатся не труъ-тулзой, подходящей скорее для скрипткидисов, чем для разбора чего-то реально сложного, автор положил на него член, и теперь отладчик разрабатывают новые умельцы, пафосно назвав OllyDbg 2.0. [Отечественная разработка http://www.ollydbg.de ], хоть и менее известна, чем SoftIce, вполне кошерна и к тому же бесплатна. Релизы выглядят хреново, но парни явно набираются опыта и идут в правильном русле.
Современные быдлоязыки программирования типа Java, C# и прочего .NET'a вовсе и не требуют для своего взлома применения дизассемблеров и отладчиков. Весь исходный код легко можно получить в считанные секунды, а если кодер — лох и не применил даже обфускацию, то полученные исходники от авторских будут отличаться разве что отсутствием комментариев в первых. Впрочем, и для обычных сишных бинарников есть декомпиляторы, правда, полудохлые и малоюзабельные. Кому интересно, смотреть здесь и вот тут.
.NET Reflector — хороший инструмент для декомпиляции программ на C# и некоторых других языках. Авторы постоянно дорабатывают свое детище, вскорости обещают декомпилировать и другие основные языки. Изначально был бесплатен, но после появления широкой аудитории стал платным, впрочем, Reflector использовали для взлома платной версии.
dotPeek — детище небезызвестной JetBrains, к моменту выхода из альфы ставшее вполне себе годным инструментом, способным конкурировать с лидерами отрасли. Декомпилирует обфусцированную лапщичку, перед которой пасует даже знаменитый и всеми любимый .NET Reflector. Ах да, программа поставляется абсолютно бесплатно.
ILSpy — свободный аналог рефлектора от разработчиков SharpDevelop. Вполне юзабелен, но остановился в развитии — все люди кинуты на новую версию SharpDevelop.
JD, JavaDec, JavaByte, Cavaj, тысячи их… — декомпиляторы для Жабы. Инструментарий тут гораздо побогаче, чем для С#, но реально хитовых тулзов не наблюдается. Впрочем, есть смысл полуркать (открытые библиотеки: так, бесплатная idea9 community edition плюс это и вот это вполне могут помочь в декомпиляции коммерческого быдлокода.
DeDe Full: Декомпилятор для Delphi программ любых версий.
dex2jar Для приложений APK, при помощи dex2jar конвертируем в jdk и чтение в JD. Java Decompiler
«Проект Java Decompiler» направлен на разработку инструментов для декомпиляции и анализа «байтового кода» Java 5 и более поздних версий.
JD-GUI - это автономная графическая утилита, которая отображает исходные коды Java файлов «.class». Вы можете просматривать восстановленный исходный код с помощью JD-GUI для мгновенного доступа к методам и полям.
JD-Eclipse - это надстройка для платформы Eclipse. Он позволяет отображать все источники Java во время процесса отладки, даже если у вас их нет.
JD-Core - это библиотека, которая восстанавливает исходный код Java из одного или нескольких файлов «.class». JD-Core можно использовать для восстановления утерянного исходного кода и изучения источника библиотек времени выполнения Java. Поддерживаются новые функции Java 5, такие как аннотации, обобщения или тип «enum». JD-GUI и JD-Eclipse включают библиотеку JD-Core.
Нередко код бывает обфусцирован. Зачастую помогают деобфускаторы. Для интерпретируемых языков (за исключением perl) обычно не требуются или легко самопишутся.
Для JavaScript — JSBeautifier.
Для шарпа один из лучших — de4dot.
PETools — тулза некоего NeoX (йодмен — человек, выливший йод на член). Пригодна для работы с PE-форматом. Конкурент — LordPE (умеет фиксить SizeOfImage в пебе), остальное из этой серии — УГ.
RSATool — GUI-программа для прокачивания скила по RSA. Автор — эгоист из ТМГ (илита сцены, ни одного нюка). Для факторизации не годна, лучше юзать msieve.
Wireshark — программа-анализатор трафика для компьютерных сетей Ethernet и некоторых других. Имеет графический пользовательский интерфейс. Изначально проект назывался Ethereal, но, из-за проблем с торговой маркой, в июне 2006 года проект был переименован в Wireshark.
Для борьбы с реверсингом авторы используют всяческие трюки, чтобы их творения не были доступны анализу. Чем выше жадность и хреновее функционал, тем обычно более параноидальна защита, которая в клинических случаях может даже начать мстить (удалять файлы и т. п.), если почувствует, что к ее попке приближается некто с отладчиком. Интересно, что глючащая защита может сработать там, где кряком и не пахло, и тогда простому пользователю будет плохо.
Продвинутые программы редко содержат паранойю, например, WinRar.
Быдлокодинг. Как это ни удивительно, но быдлопроги зачастую обладают естественной защитой от анализа. Cкажем, проект на Visual Basic, скомпилированный в P-code, читать гораздо труднее, чем продукт полноценного C-программера. Также сложность представляет индусский стиль программирования — быдлокодер неумело пытается защитить свое творение путем искусственного раздутия кода, хотя тот и без всякой доработки может представлять собой такую НЕХ, что даже имея оригинальные исходники, хрен поймешь, как оно работает - чтение такого листинга может вызывать рвоту.
Дзен-кодинг — использование хитросплетений паттернов проектирования и вообще кодогенерации шибко «умным» программистом приводит к созданию не менее отвратительного кода, который что в сорцах член проссышь, что в асме.
Пакеры сжимают программы, чтобы они занимали меньше места на диске и распаковывались в памяти. Per se защитой не являются, однако в нераспакованном виде анализировать сжатую программу невозможно. Для известных пакеров лучше всего найти анпакер, который вернет программу в более-менее исходное состояние. Известные — UPX, ASPack, MEW, PECompact, NSPack.
Обфускация — превращение исходного/промежуточного/конечного (нужное подчеркнуть) исполняемого кода в кашу, которую невозможно читать. Из исходной инструкции обфускатор делает пять (а то и сотню, в случае паранойи пермутации), делающих то же, что и одна, плюс еще 200, которые вообще ничего не делают, и 28 препятствующих эмулированию или отладке. Применяется как в «хороших» программах, чтобы перенести появление кряка, так и в «плохих», типа полиморфных вирусов, стремящихся оттянуть момент своей детекции — каждая следующая копия будет непохожа на предыдущую. Олсо пытается юзаться в илитной малваре типа рустока и прочей, в расчете на то, что антивирусные вендоры будут с*сать члены. Кстати, есть такой сайтик http://www.ioccc.org, где проводится конкурсы на самую запутанную программу для UNIX. Победители конкурса — истинные шедевры кодописательства и кодозапутывания. Настоятельно рекомендуются к ознакомлению.
Антиотладка — приемы для борьбы с отладкой. Для мелкософтовского виндувса достаточно IsDebuggerPresent(). Например, уныло посмотреть поле BeingDebugged в пебе, или посмотреть значение NtGlobalFlag. Это 2 самых говнометода, илита же предпочитает еблю с rdtsc (многопроцессорные системы сосут члены), ядерные сплойты и парсинг физической памяти. На каждый такой прием существует антиприем, ну и так далее. И обычно это люто, бешено глючит, бсодит, и вообще, нормальные люди не отлаживают всякую фигню на своих компах, а заставляют давиться этим калом эмуляторы: Virtual Box, VMWare, VirtualPC и т. д.
Краденые куски — часть кода программы выпиливается, а выполнение оригинального куска выносится вовне: в протектор, на удаленный сервер, донгл и прочая. Когда хацкер делает дамп, он получает не всю программу, а лишь ее часть. Кошерным примером реализации этого метода являются токены RSA SecurID.
Виртуальные машины — часть кода программы транслируется в байткоды другого (не обязательно реального) процессора, и добавляется транслятор, который эти байткоды хавает и выполняет. Некоторые протекторы, такие как «Темида», превращают один грамм исходного быдлокода в 1-3 десятка кило нового говна.
Протекторы — проги, которые защитят ваше творение, особо не заставляя думать — знай сиди и бросай формочки в дебилдере. Thinstaller, RCrypt, ASProtect, EXECryptor (привет Relayer), WL/Themida… много их. Могут содержать все вышеперечисленные пункты в невозбранном количестве и в самых невероятных сочетаниях, но обычно содержат баги в реализациях PRNG/метаморфов и прочей фигни. Кстати, большая часть самых известных протов уже отошла в мир иной-не выдержали конкуренции с пиратами!
Обращения к взломщикам внутри исполняемого файла в виде ASCII-строк - и такое встречается часто! Начиная от «злобные дяди хакиры, ни ламайте пожалуйста маю программку, нет денег на пиво»® до всяких «yates stilL Here kinda Ooooh» и целых анекдотов про улитку в серьезных защитах. Действуют на хакеров-ломакеров сильнее, чем все вышеперечисленные приемы, заставляя последних давиться от хохота, тем самым оттягивая дату неминуемого взлома.
Вечер. Автобус. Едет. На первом сиденье сидят двое. У них коэф. интеллекта IQ=180: - Я вчера Гамлета в оригинале читал... Такое эстетическое наслаждение... На другом сиденье сидят еще двое. У них IQ=140: - Я вчера посмотрел "Андалузского пса" и нашел коррелят с ранними картинами Пикассо... На другом сиденье сидят двое. У них IQ=100: - Мы с другом час назад посмотрели "От заката до рассвета". Как там телка говорит телке, что... На другом сиденье сидят двое других. У них IQ=80: - Слышь, брат! Помнишь, какое пойло мы в мерсе пили, когда ноги какой-то б..яди торчали в окне... А на задней площадке стоят двое с IQ=40: - Ну вот, вскрываю прогу твоим дебаггером...
Анализ данных, представленных в статье про обратная разработка, подтверждает эффективность применения современных технологий для обеспечения инновационного развития и улучшения качества жизни в различных сферах. Надеюсь, что теперь ты понял что такое обратная разработка, reverse engineering, реверсинжиниринг и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Криптоанализ, Виды уязвимости и защита Информации
Комментарии
Оставить комментарий
Криптоанализ, Виды уязвимости и защита Информации
Термины: Криптоанализ, Виды уязвимости и защита Информации