Reverse Engineering
Материал из Lurkmore
В эту статью нужно добавить как можно больше не софтваре реверс инжиниринга, ибо ваистенну. Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи. |
« |
I wanna dig inside to find a little bit of me | » |
— Slipknot |
Reverse Engineering (ревёрсинг, обратная разработка) — процесс пизженья восстановления исходников из конечного продукта инженерной и/или научной деятельности, интуитивно конструируя внутреннюю механику по принципу «а какие процессы должны вызвать такое вот внешнее поведение этого продукта?». Ориентируясь на нюх, так сказать.
Содержание |
[править] В общих чертах
Возможно, все мы в детстве сломали немало игрушек пытаясь понять «как оно там устроено». С возрастом это проходит. Но не у всех.
Ученые пытаются дизассемблировать Вселенную чтобы восстановить исходники Б-га, который явно наложил несколько пакеров и обфускаторов. Военные первым делом подбирают оружие на поле боя — чтобы посмотреть как устроена эта штурмовая винтовка Stg-44 и можно ли из нее сделать Калаш, а уже потом закапывают трупы. Китайские дизайнеры успешно реверсируют дольче-габбано чтобы произвести его больше, дешевле и хреновее. Ну а некоторые реверсируют программы, чтобы исправить в них некоторые ошибки (одна из самых распространенных — жадность разработчика) или просто посмотреть как она устроена, что умеет, и сделать свою, с маджонгом и гейшами. Они-то и являются илитой IT.
Алсо, чуть менее чем все советские микросхемы представляли собой аналоги забугорных, скопированные с готовых продуктов. В связи с этим в этой стране даже создан закон о правовой охране топологий интегральных микросхем, чтоб у нас в свою очередь не тырили.
[править] Software Реверсинг
Реверсинг ПО — восстановление принципов/идей/алгоритмов работы программы, для исследования и/или создания аналогичного ПО. Часто применяется для:
- Анализа вирусов/троянов/червей и прочего дерьма, с целью создания средств защиты.
- Поиска дырок в закрытом софте с целью создания вирусов/троянов/червей и прочего дерьма.
- Создания описаний для форматов данных/протоколов, используемых в программах и прочем дерьме. Пример с преподской тестирующей программой относится сюда.
- Анализа работы закрытых драйверов и прочего дерьма для создания открытых линупсовых.
- Изготовление пиратских серверов серверных игр вроде WoW и допилка их рубанком до сходства с официальным, ясное дело, дерьмом.
Не следует путать взлом ПО с его реверсингом: для взлома достаточно разобрать принцип работы лицензионной проверки, а реверсинг — это полный разбор программы по кирпичикам.
Для успешной работы требуется знать ассемблер, иметь общее представление о криптографии и знать мунспик. Алсо матан, например теорию графов для анализа ветвлений. Но можно и не знать, главное — уметь быстро найти что почитать и быстро разобраться.
[править] Hardware Реверсинг
Реверсинг железа — всяких блоков управления стиральными машинами, субару импрезами, контрольно-кассовыми машинами. Обычно применяется для:
- Скручивания одометров на прульном дерьме, патчей блоков управления подушками безопасности (чтобы быдло думало, что его 15-летнее БМВ еще не побывало в аварии).
- Патчей для теплосчетчиков, водосчетчиков, электросчетчиков, контрольно-кассовых машин и прочего дерьма.
- Патчей блоков управления моторами с целью добытия большего количества
дерьмалошадиных сил из двигателя и на порядок раннего экстерминатуса мотора. Алсо для снятия ограничителя скорости. - Снятие каких-либо ограничений, заложенных производителем в девайс (как в модемах US robotics и тому подобном дерьме).
- Восстановление документации, если оная утеряна либо уничтоженная из-за древности, но очень надо получить еще сотню таких же устройств.
Также, хоть ксакепам, писавшим данную статью, это и не приходит в голову, но любой разработчик и производитель имеет свою лабораторию анализа отказов для настоящего чип-реверсинга, а не того дерьма, что расписано выше. Вот, например, фотоотчет о лабе Atmel: http://www.sparkfun.com/commerce/news.php?id=384
Мало кто знает, но факт. В той стране от безысходности было принято решение об отказе от разработки собственных чипов. Копипиздинг топологии ИМС был поставлен на широкую ногу.
[править] Инструменты
[править] Дизассемблеры
Дизассемблер — это утилита, которая преобразует бинарный код в ассемблерный листинг. В простейших случаях этого вполне достаточно и остается немного покурить и найти то, что нужно. В худших — это каша, и без скриптов и/или отладчика не обойтись.
IDA — это основной дизассемблер на сегодняшний день. Обладает множеством функций типа поддержки скриптов, графического режима или встроенных плагинов вплоть до эмулятора x86. Не тупой интерфейс — множество интуитивно понятных «горячих» клавиш и т. п. Проекту уже лет 15 и он единственный из дизассемблеров живущий активной жизнью сейчас, у других в новых версиях фичи почти не родятся. Также до сих пор с собой таскает свою DOS-GUI версию для олдфагов. Также известен нефиговой ценовой политикой.
Тем не менее пишет его татарский расовый мудак по имени Ильфак Гуильфанов. История создания дизассемблера, покрыта тайной, но известно, что начиналась с того, что Ильфаку, так же как и Биллу Гейтсу с DOS, помогли добрые люди написать первые версии дизассемблера. И задумывался он как инструмент для восстановления прошивок HDD. Дальше, непонятно как и почему, люди разошлись и остался он один. Потом Ильфак всплывает с версией 3.x уже от лица фирмы Datarescue, которая купила проект. Начиная с версии 4.0 У него появляется GUI, написанный на BCB! С этого времени продукт начинает приобретать массовую известность в узких кругах по двум причинам:
- MUST HAVE
- «Ильфак — пидорас»
Остановимся на втором пункте подробнее.
Ильфак, понимая, что он является монополистом на данном рынке, давно забил хуй на пользователей. Потому что берут и так[1]. Любой юзер IDA, которому приходилось иметь дело с поддержкой, получал кучу отрицательных эмоций: получив продукт с кучей багов, вы предоставлены себе в их исправлении. Ошибки исправлять никто не спешит, можно легко прождать полгода. Даже если баг вопиющий. Продукт как практически не тестировался перед релизами, так и не тестируется до сих пор. Юзеры IDA вынуждены хранить несколько версий, потому что в одной хорошо работает одна фича, в другой — другая, в третьей — третья.
А среди «неофициальных» юзеров Ильфак нелюбим за то, что без спроса берет идеи. За счет того, что IDA поставляется с SDK, юзеры могут делать свои плагины к IDA. Делаются они в довольном большом количестве. Плагины пишутся как для того, чтобы исправить баги оригинальной функциональности, так и для добавления своих фич, для решения конкретных задач. Естественно альтруизм среди «неофициальных» юзеров высок, и исходники плагинов выкладываются на всеобщее обозрение. Так вот, как заметил анонимус, примерно через полгода после появления полезных исходников это становится фичей IDA. У Ильфака на этот счет железное алиби: «То что тут придумали — это не новая идея, это меня пользователи попросили еще год назад».
Вначале, народная ненависть выливалась в троллинг на форуме официального русского сайта. Но потом это быстро утихло, потому что Ильфак анально отгородил форум официальных юзеров, а с неофициальными общаться перестал.
Посему примерно раз в год то китайцы, то албанцы, то русские (был интересный случай когда народ скидывался на руборде чтобы купить одну копию и поделиться), то немцы тырят с тренингов, кардят, хачат сервера с IDA и комуниздят очередную версию. Чем нереально каждый раз доставляют целевой аудитории IDA. А официальные юзеры, потом смотрят в закрытые форумы поддержки и скидывают цитаты батхёрта Ильфака в публику, усиливая доставляющий эффект события.
В текущий момент Ильфак свалил с Datarescue и делает IDA от лица своей конторы Hex-Rays. Ходят слухи что он перестал ее кодить, а нанял наконец программеров с прямыми руками, которые наконец начали чистить говнокод. Поэтому версия 5.5 была воспринята с одобрением и некоторые неофициальные пользователи даже начали помышлять о том, чтобы ее таки приобрести. Но эйфория продлилась недолго, баги были снова найдены, и все вернулось в привычный цикл.
Ознакомиться с историей спионеривания можно тут
В июле 2011 года у антивирусной компании была уперта полная версия декомпилятора версии 6.1. teh drama
Hiew (Hacker’s viewer). Небольшая утилита, для нормальных людей бесполезна, используется только надрочившимися спецами.
Иногда используется продвинутыми пользователями как шестнадцатиричный редактор. Использование ее скорее дань традиции, чем надобность, давно существует куча GUI-шных тулзов для тех же целей. Тем не менее тулзу продолжают использовать…
Sourcer от компании V Communications. Стародавний мощный дизассемблер времен DOS и ранних версий Windows. Позволял из .COM или .EXE файлов получать непосредственно .ASM файл, причем для различных компиляторов ассемблера, таких как TASM или MASM. Если было задано достаточное количество проходов при дизасемблировании, то с высокой степенью вероятности можно было при компилировании только что созданного .ASM файла получить исходную исполнимую программу байт-в-байт. Доставлял хорошими комментариями в листинге, скоростью работы, поддержкой разных типов процессора, и конечно, олдскульным 'сценовским' интерфейсом. Сейчас не актуален, хотя некоторые анонимусы продолжают держать его в своем инструментарии, например для дизассемблирования таких вещей как: MBR жесткого диска, Boot-сектора, специальные утилиты, которые загружаются с дискеты без какой-либо операционной системы (например утилиты перепрошивки BIOS или утилиты от производителей HDD) и прочее. То есть для низко-системных нужд. Последней явилась на свет версия v7.00 от 1997 года. Sourcer — помним, любим, скорбим!
[править] Архив даташитов и документация
Без этих вещей вы никогда не узнаете, что процессор Nippon-Denso NP648976 на самом деле жалкий клон Motorola 6803 с 16К ROM на борту. А когда узнаете, поймете что япошки никогда ничего сами не придумывали а только умело пиздили.
[править] Отладчики
Отладчик — программа для контролируемого исполнения программы или в общем случае любого произвольного куска кода вплоть до инжектированной в другой процесс DLL. Продвинутый отладчик умеет использовать аппаратные средства отладки, ну и, конечно, дизассемблировать.
SoftIce может переводиться с расово верного английского как «замерзший софт» и может восприниматься как отсылка к «black ice» (чёрный лёд) из книг Гибсона (На самом деле это больное воображение. Есть в микроконтроллерной технике такой термин — ICE. In-circuit emulator. Микросхема с одной стороны ведущая себя как микроконтроллер (или микропроцессор), а с другой сливающая по дополнительному интерфейсу (которого нет у обычного контроллера/процессора) всю внутреннюю информацию — для отладки. SoftICE — это заявка на то, что вам не нужно покупать ICE-версию чипа а достаточно этого Software что бы получить такую же мощность отладки. И, да, ICE-версия i486 продавалась Intel’ом, дальше вроде бы нет). SoftIce появляется по нажатию CTRL-D и все остальное — программы, драйвера и даже некоторые прерывания перестают работать. Это дебагер, работающий на нулевом уровне, на котором можно все. Можно трассировать все: драйвер hdd, usb антенны и. т. п. А ещё там мышка работает и можно делать скины.
SoftIce вышел на рынок как отладчик уровня ядра совершенно неожиданно для самих создателей этого ядра — MS. Позиционировался как тулза «для нахождения багов в софте», но баги-то бывают разные, например, MS Office может требовать ключа активации.
Его преимуществом были и есть имена — он умеет считывать при загрузке инфу о библиотеке и в процессе отладки показывает имена, например Kernel.FindClose+105h.
В настоящее время похож на свежий навоз, его уже четыре года никто не обновляет (и не будет — в связи с выпилом конторы разработчиков: Numega невозбранно была проебана за 30 серебренников мудацкой Compuware, которая ее просто закрыла нахуй. Потому что для Compuware, всю жизнь городившей говнософт для Detroit Big Three (nuff said?), сколь-либо небыдловатые продукты, как SoftIce и DevPartner, были как жопе ручка. В результате все закончилось тотальным выпилом как нумеговских проектов (два года во славу которых въебывал и анонимус в том числе), так и собственно офиса бывшей Нумеги. А остатки Девпартнера отдали какому-то ебучему реселлеру Microfocus, потому что, опять же, Compuware даже скомпилировать нумеговские сорсы толком была не в состоянии).
WinDbg — как бы быдлокодерам, испытывающим butthurt от слова «Майкрософт», не было обидно, это самый популярный kernel-mode отладчик со времен смерти SoftIce. Nuff said. Да и в user-mode Винбэг обеспечивает лютый вин, кладя болт на эти ваши Debugging API и позволяя, например, заглянуть в native code для процесса, в который уже впилен отладчик для managed code.
Syser — китайский дебагер уровня ядра с GUI. Пришёл на смену SoftIce, развивается томно, но вроде не собирается загибаться.
OllyDbg — отладчик третьего уровня, гуишный, симпатяффный, функионала выше крыши, применим для 95 % программ, а пропатченный ручками и для 98%. Но из-за того что r3, среди профессионалов считатся не труъ тулзой, подходящей скорее для скрипткидисов, чем для разбора чего-то реально сложного.
Отечественная разработка http://www.ollydbg.de/, хотя и не столько широко известна, как SoftIce, но вполне кошерна. Алсо, бесплатна.
Автор положил на него хуй и теперь его разрабатывают новые умельцы, назвав пафосно OllyDbg 2.0. Релизы выглядят хреново, но парни явно набираются опыта и идут в правильном русле.
[править] Декомпиляторы
Современные быдлоязыки программирования типа Java или C# (а также прочий .NOT) вовсе и не требуют для своего взлома применения дизассемблеров и отладчиков. Весь исходный код легко можно получить в считанные секунды, а если кодер был лох и не применил даже обфускацию, то полученные исходники от авторских будут отличаться разве что по отсутствию комментариев в первом (не факт, что они там вообще были). Впрочем, и для обычных сишных бинарников есть декомпиляторы, правда полудохлые и малоюзабельные. Кому интересно, смотреть здесь: [1] и, в частности, здесь: [2].
.NET Reflector — Инструмент для декомпиляции программ на C# и некоторых других языках. Хороший инструмент. Авторы постоянно дорабатывают свое детище, в скорости обещают декомпилировать и другие основные языки. Изначально был бесплатный, но после появления широкой аудитории стал платным, впрочем Reflector использовали для взлома платной версии.
JavaDec, JavaByte, Cavaj, тысячи их… — декомпиляторы для Жабы. Инструментарий тут гораздо побогаче, чем для С#, но реально хитовых тулзов не наблюдается [2].
[править] Прочая дребедень
PETools — Тулза небезызвестного NeoX (йодмен, человек выливший йод на хуй). Пригодна для работы с PE форматом. Конкуренты LordPE (умеет фиксить SizeOfImage в пебе %)), всё другое УГ.
RSATool — Гуи программа для прокачивания скила по RSA. Автор — эгоист из ТМГ (илита сцены, ни одного нюка). Для факторизации не годна, лучше юзать msieve.
[править] Вещи, затрудняющие анализ
Для борьбы с реверсингом авторы используют всяческие трюки, чтобы их творения не были доступны анализу. Обычно, чем выше жадность и хреновее функционал, тем более параноидальная защита, которая в клинических случаях может даже начать мстить — удалять файлы и т. п. — если почувствует, что к ее попке приближается некто с отладчиком. Интересно, что глючащая защита может сработать там, где кряком и не пахло, и тогда простому пользователю пиздецъ.
Продвинутые программы редко содержат паранойю, например, WinRar.
Быдлокодинг. Как это ни удивительно, но быдлопроги зачастую обладают естественной защитой от анализа. Вот, скажем, Visual Basic — проект скомпилированный в P-code читать гораздо труднее, чем продукт полноценного C-программера. Также некоторые сложности представляет индусский стиль программирования — программист неумело пытается защитить свое творение путем искусственного раздутия кода. Есть инфа что на VB пишут только пассивные активные гомосексуалисты.
Дзен-кодинг — использование хитросплетений патернов проектирования, и вообще кодогенерации, шибко умным программистом, приводит к созданию не менее отвратительного кода, который что в сорцах хуй проссышь, что в асме.
Пакеры сжимают программы, чтобы они занимали меньше места на диске, и распаковывались в памяти. Не являются защитой сами по себе. Однако в нераспакованном виде анализировать сжатую программу невозможно. Для известных пакеров лучше всего найти анпакер который вернет программу в более-менее исходное состояние. Известные это UPX, ASPack, MEW, PECompact, NSPack.
Обфускация — превращение исходного, промежуточного, конечного исполняемого(нужное подчеркнуть) кода в говно кашу, которую невозможно читать. Из исходной инструкции обфускатор делает 5 а то и сотню (в случае паранойи пермутации), делающих то же, что и одна, плюс ещё 200 которые вообще ничего не делают. Ну ещё 28 которые препятствуют эмулированию или отладке. Применяется как в «хороших» программах, чтобы перенести появление кряка, так и в «плохих» типа полиморфных вирусов, стремящихся оттянуть момент своей детекции — каждая следующая копия будет непохожа на предыдущую. Олсо пытается юзаться в илитной малваре типа рустока и прочей, в расчете на то, что антивирусные вендоры будут сосать хуйцы.
Кстати, есть такой сайтик: http://www.ioccc.org, где проводится конкурсы на самую запутанную программу (для UNIX). Победители конкурса — истинные шедевры кодописательства и кодозапутывания. Настоятельно рекомендуются к ознакомлению.
Антиотладка — приемы для борьбы с отладкой. Для мелкософтовского виндувса достаточно IsDebuggerPresent(). Например уныло посмотреть поле BeingDebugged в пебе, или посмотреть значение NtGlobalFlag. Это 2 самых говнометода, илита же предпочитает еблю с rdtsc (многопроцессорные системы сосут хуйцы), ядерные сплоиты и парсинг физической памяти. На каждый такой прием существует антиприем. А на антиприем — антиантиприем. И обычно это люто, бешено глючит бсодит и вообще авторов всех этих плагинов для скрытия отладчиков от всякой неведомой хуйни я дом труба шатал. Поэтому нормальные челы не отлаживают всякую хуиту на своих компах, а заставляют давиться этим калом эмуляторы, как Virtual Box, VMWare, VirtualPC и т. д.
Краденные куски — часть кода программы выпиливается, а выполнение оригинального куска выносится во вне: в протектор, на удаленный сервер, донгл и прочую НЁБ. Когда хацкер делает дамп, он получает не всю программу, а лишь ее часть.
Виртуальные машины — часть кода программы транслируется в байткоды другого (не обязательно реального) процессора и добавляется транслятор, который эти байткоды хавает и выполняет. Некоторые протекторы, как Темида, превращают один грамм исходного быдлокода в 1-3 десятка кило нового говна.
Протекторы — проги, которые защитят ваше творение, и вам даже думать ни о чем не надо — знай сиди и бросай формочки в дебилдере. Thinstaller, RCrypt, ASProtect (привет Алёшка), Armadillo (Чад Нельсон, сосни хуец, уже сломали!), EXECryptor (привет Relayer), WL/Themida… много их. Могут содержать все вышеперечисленные пункты в невозбранном количестве и в самых невероятных сочетаниях, но обычно содержат баги в реализациях PRNG/метаморфов и прочей хуиты.
[править] Немного о личных качествах самих реверсеров
« |
Вечеp. Автобус. Едет. Hа пеpвом сиденье сидят двое. У них коэф. интелекта IQ=180: - Я вчеpа Гамлета в оpигинале читал... Такое эстетическое наслаждение... Hа дpугом сиденье сидят ещё двое. У них IQ=140: - Я вчеpа посмотpел "Андалузского пса" и нашёл коpелят с pанними каpтинами Пикассо... Hа дpугом сиденье сидят двое. У них IQ=100: - Мы с дpугом час назад посмотpели "От заката до pассвета". Как там тёлка говоpит тёлке, что... Hа дpугом сиденье сидят двое других. У них IQ=80: - Слышь, бpат! Помнишь какое пойло мы в меpсе пили, когда ноги какой-то б..яди тоpчали в окне... А на задней площадке стоят двое с IQ=40: - Hу вот, вскpываю пpогу твоим дебаггеpом... | » |
— Онегдод, but true. |
[править] Ресурсы
WASM.ruОбразован от слияния двух проектов — HI-TECH (Serrgio) и, собственно, WASM.ru (Aquila). WASM — Windows Assemler Site, ориентирован в том числе на «Отладка и дизассемблирование программ» и «Защита от предыдущего пункта» [3].
Отличная подборка статей на разные околореверсные тематики, набор исходников и утилит (впрочем не сильно приватных), а также форум — здесь обитают специалисты высокого уровня. Также можно получить или поделиться знаниями в области ассемблера — например, оптимизации под современные процессоры и т. д. Также например на сайте к сожалению до сих пор не раскрыт вопрос о том почему например Володий не отдал общак, одепты адово негодуют. (Олала, одепт BHC детектед. Раскрыт но исходнеги в приватном мавзолее).
exelab.ru Более узкоспециализированный форум, многие специалисты обитают там. Приватных тулзов также? по утверждениям некоторых анонимусов, не скачать (а по утверждениям других — скачать), но можно закупить (недорого) CrackL@B SUN DVD и (после самостоятельного изучения) денег на софт, по идее, тратить уже будет не нужно.
vx.netlux.org Сайт для пейсателей малваре, хуесосов, элит и прочего сброда. Содержит овер 9000 исходных кодов полиморфных движков, вирусных журналов, статей и прочих благ. Неимоверно доставляет.
[править] См. также
[править] Примечания
- ↑ К примеру, анонимус видел на официальном форуме ответ Ильфака на вопрос, нельзя ли вынести анализ в отдельный от UI нить в силу жутких тормозов. Внимание ответ: «Нет, нельзя. Попробуйте анализировать бинарники поменьше.»
- ↑ анонимус, принципиально использующий исключительно открытые библиотеки (тысячи их), авторитетно заявляет, что бесплатная idea9 community edition плюс вот это плюс вот это могут помочь в декомпиляции коммерческого быдлокода
[ + ] Reverse Engineering есть особенность Чжунго.
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
[ + ] Любой программист без словаря поймёт, что такое Reverse Engineering
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|