Персональные инструменты
Счётчики

Reverse Engineering

Материал из Lurkmore
Перейти к: навигация, поиск
Eri x Yakumo.jpgВ эту статью нужно добавить как можно больше не софтваре реверс инжиниринга, ибо ваистину.
Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи.
Шаблон:Q-Pre
«

I wanna dig inside to find a little bit of me

»
— Slipknot
Файл:124532247288.png
Аноним доставляет на /s/.

Reverse Engineering — процесс восстановления пизженья исходников из конечного продукта инженерной и/или научной деятельности. Возможно, все мы в детстве сломали немало игрушек пытаясь понять «как оно там устроено». С возрастом это проходит. Но не у всех.

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

Военные первым делом подбирают оружие на поле боя — чтобы посмотреть как устроена эта штурмовая винтовка Stg-44 и можно ли из нее сделать калаш, а уже потом закапывают трупы.

Китайские дизайнеры успешно реверсируют дольче-габбано чтобы произвести его больше, дешевле и хреновее.

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

Содержание

Software Реверсинг

Реверсинг ПО — восстановление принципов/идей/алгоритмов работы программы, для исследования и/или создания аналогичного ПО. Часто применяется для:

  • Анализа вирусов/троянов/червей и прочего дерьма, с целью создания средств защиты.
  • Создания описаний для форматов данных/протоколов, используемых в программах и прочем дерьме. Пример с преподской тестирующей программой относится сюда.
  • Анализа работы закрытых драйверов и прочего дерьма для создания открытых линупсовых.
  • Поиска дырок в закрытом софте с целью создания вирусов/троянов/червей и прочего дерьма.

Не следует путать взлом ПО с его реверсингом: для взлома достаточно разобрать принцип работы лицензионной проверки, а реверсинг — это полный разбор программы по кирпичикам.

  • Изготовление пиратских серверов серверных игр вроде WoW и допилка их рубанком до сходства с официальными.

Для успешной работы требуется знать ассемблер, иметь общее представление о криптографии и знать мунспик. Алсо матан, например теорию графов для анализа ветвлений. Но можно и не знать, главное — уметь быстро найти что почитать и быстро разобраться.

Hardware Реверсинг

Реверс инжиниринг дивайса

Реверсинг железа — всяких блоков управления стиральными машинами, субару импрезами, контрольно-кассовыми машинами. Обычно применяется для:

  • Скручивания одометров на прульном говне, патчей блоков управления подушками безопасности (чтобы быдло думало, что его 5-летнее БМВ еще не побывало в аварии)
  • Патчей для теплосчетчиков, водосчетчиков, электросчетчиков и контрольно-кассовых машин
  • Патчей блоков управления моторами с целью добытия большего количества лошадиных сил из двигателя и на порядок раннего экстерминатуса мотора. Алсо для снятия ограничителя скорости.
  • Снятие каких-либо ограничений, заложенных производителем в девайс (как в модемах US robotics).

Также, хоть ксакепам, писавшим данную статью, это и не приходит в голову, но любой разработчик и производитель имеет свою лабораторию анализа отказов для настоящего чип-реверсинга, а не того говна, что расписано выше. Вот, например, фотоотчет о лабе Atmel: http://www.sparkfun.com/commerce/news.php?id=384

Инструменты

Дизассемблеры

Дизассемблер — это утилита, которая преобразует бинарный код в ассемблерный листинг. В простейших случаях этого вполне достаточно и остается немного покурить и найти то, что нужно. В худших — это каша, и без скриптов и/или отладчика не обойтись.

Матрица поимела тебя. Анализ кода в IDA.
IDA в линуксе или линукс в IDA?

IDA — это основной дизассемблер на сегодняшний день. Обладает множеством функций типа поддержки скриптов, графического режима (в хуй никому не упёршегося) или встроенных плагинов вплоть до эмулятора x86. Не тупой интерфейс — множество интуитивно понятных «горячих» клавиш и т. п. Проекту уже лет 15 и он единственный из дизассемблеров живущий активной половой жизнью сейчас, у других в новых версиях фичи почти не родятся. Олсо до сих пор с собой таскает свою DOS-GUI версию для олдфагов.

Тем не менее пишет его татарский расовый мудак по имени Ильфак Гуильфанов. Одно имя уже доставляет. История создания дизассемблера, покрыта тайной, но известно, что начиналась с того, что Ильфаку, так же как и Биллу Гейтсу с DOS, помогли добрые люди написать первые версии дизассемблера. И задумывался он как тулза для восстановления прошивок HDD. Дальше, непонятно как и почему, люди разошлись и остался он один. Потом Ильфак всплывает с версией 3.x уже от лица фирмы Datarescue, которая купила проект. Начиная с версии 4.0 У него появляется GUI, написанный на BCB, OMG! С этого времени продукт начинает приобретать массовую известность в узких кругах по двум причинам:

  • MUST HAVE
  • «Ильфак — пидорас»

Остановимся на втором пункте подробнее.

Ильфак, понимая, что он является монополистом на данном рынке, давно забил хуй на пользователей. Потому что берут и так.[1] Любой юзер IDA, которому приходилось иметь дело с сапортом получал кучу отрицательных эмоций: получив продукт с кучей багов, вы предоставлены себе в их исправлении. Баги фиксить никто не спешит, можно легко прождать полгода. Даже если баг вопиющий. Продукт как практически не тестировался перед релизами, так и не тестируется до сих пор. Юзеры IDA вынуждены хранить несколько версий, потому что в одной хорошо работает одна фича, в другой — другая, в третьей — третья.

А среди «неофициальных» юзеров Ильфак нелюбим за то, что без спроса берет идеи. За счет того, что IDA поставляется с SDK, юзеры могут делать свои плагины к IDA. Делаются они в довольном большом количестве. Плагины пишутся как для того, чтобы исправить баги оригинальной функциональности, так и для добавления своих фич, для решения конкретных задач. Естественно альтруизм среди «неофициальных» юзеров высок, и сорцы плагинов выкладываются на всеобщее обозрение. Так вот, как заметил анонимус, примерно через полгода после появления полезных сорцов это становится фичей IDA. У Ильфака на этот счет железное алиби: «То что тут придумали — это не новая идея, это меня пользователи попросили еще год назад». Какбэ мстит за недополученные сотни нефти.

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

Посему примерно раз в год то китайцы, то албанцы, то русские(был интересный случай когда народ скидывался на руборде чтобы купить 1 копию и поделиться), то немцы тырят с тренингов, кардят, хачат сервера с IDA и комуниздят очередную версию. Чем нереально каждый раз доставляют целевой аудитории IDA. А официальные юзеры, потом смотрят в закрытые форумы поддержки и скидывают цитаты батхёрта Ильфака в публику, усиливая доставляющий эффект события.

В текущий момент Ильфак свалил с Datarescue и делает IDA от лица своей конторы Hex-Rays. Ходят слухи что он перестал ее кодить, а нанял наконец программеров с прямыми руками, которые наконец начали чистить говнокод. Поэтому версия 5.5 была воспринята с одобрением и некоторые неофициальные пользователи даже начали помышлять о том, чтобы ее таки приобрести. Но эйфория продлилась недолго, баги были снова найдены, и все вернулось в привычный цикл.

Hiew (Hacker’s viewer). Небольшая утилита, для нормальных людей бесполезна, используется только надрочившимися спецами.
Иногда используется продвинутыми пользователями как шестнадцатиричный редактор. Использование ее скорее дань традиции, чем надобность, давно существует куча GUI-шных тулзов для тех же целей. Тем не менее тулзу продолжают писать…

Архив даташитов и документация

Без этих вещей вы никогда не узнаете, что процессор Nippon-Denso NP648976 на самом деле жалкий клон Motorola 6803 с 16К ROM на борту. А когда узнаете, поймете что япошки никогда ничего сами не придумывали а только умело пиздили.

Отладчики

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

Прошлый desktop тред в бамплимите, я начинаю новый, зацените сейчас мои обои.

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 которые препятствуют эмулированию или отладке. Применяется как в «хороших» программах, чтобы перенести появление кряка, так и в «плохих» типа полиморфных вирусов, стремящихся оттянуть момент своей детекции — каждая следующая копия будет непохожа на предыдущую. Олсо пытается юзаться в илитной малваре типа рустока и прочей, в расчете на то, что антивирусные вендоры будут сосать хуйцы.

Антиотладка — приемы для борьбы с отладкой. Например уныло посмотреть поле BeingDebugged в пебе, или посмотреть значение NtGlobalFlag. Это 2 самых гавнометода, илита же предпочитает еблю с rdtsc (многопроцессорные системы сосут хуйцы), ядерные сплоиты и парсинг физической памяти. На каждый такой прием существует антиприем. А на антиприем — антиантиприем. И обычно это люто бешенно глючит бсодит и вообще авторов всех этих плагинов для скрытия отладчиков от всякой неведомой хуйни я дом труба шатал. Поэтому нормальные челы не отлаживают всякую хуиту на своих компах, а заставляют давиться этим калом эмуляторы, как Virtual Box, VMWare, VirtualPC и т.д.

Краденные куски - часть кода программы выпиливается, а выполнение оригинального куска выносится во вне: в протектор, на удаленный сервер, донгл и прочую НЁБ. Когда хацкер делает дамп, он получает не всю программу, а лишь ее часть.

Виртуальные машины - часть кода программы транслируется в байткоды другого (не обязательно реального) процессора и добавляется транслятор, который эти байткоды хавает и выполняет. Некоторые протекторы, как Темида, превращают один грамм исходного быдлокода в 1-3 десятка кило нового говна.

Протекторы — проги, которые защитят ваше творение, и вам даже думать ни о чем не надо — знай сиди и бросай формочки в дебилдере. Thinstaller, RCrypt, ASProtect (привет Алёшка), Armadillo (Чад Нельсон, сосни хуец, уже сломали!), Execrypter (привет Relayer), WL/Themida… много их. Могут содержать все вышеперечисленные пункты в невозбранном количестве и в самых невероятных сочетаниях, но обычно содержат баги в реализациях PRNG/метаморфов и прочей хуиты.

Ресурсы

WASM.ruОбразован от слияния двух проектов — HI-TECH (Serrgio) и, собственно, WASM.ru (Aquila). WASM — Windows Assemler Site, ориентирован в том числе на «Отладка и дизассемблирование программ» и «Защита от предыдущего пункта» [3].
Отличная подборка статей на разные околореверсные тематики, набор исходников и утилит (впрочем не сильно приватных), а также форум — здесь обитают специалисты высокого уровня. Также можно получить или поделиться знаниями в области ассемблера — например, оптимизации под современные процессоры и т. д. Также например на сайте к сожалению до сих пор не раскрыт вопрос о том почему например Володий не отдал общак, одепты адово негодуют. (Олала, одепт BHC детектед. Раскрыт но исходнеги в приватном мавзолее).

RENG.RU

cracklab.ru Более узкоспециализированный форум, многие специалисты обитают там. Приватных тулзов также? по утверждениям некоторых анонимусов, не скачать (а по утверждениям других - скачать), но можно закупить (недорого) CrackL@B SUN DVD и (после самостоятельного изучения) денег на софт, по идее, тратить уже будет не нужно.

vx.netlux.org Сайт для пейсателей малваре, хуесосов, элит и прочего сброда. Содержит овер 9000 исходных кодов полиморфных движков, вирусных журналов, статей и прочих благ. Неимоверно доставляет.

См. также

Примечания

  1. К примеру, анонимус видел на официальном форуме ответ Ильфака на вопрос, нельзя ли вынести анализ в отдельный от UI thread в силу жутких тормозов. Внимание ответ: «Нет, нельзя. Попробуйте анализировать бинарники поменьше.» Лютый вин.
  2. анонимус, принципиально использующий исключительно открытые библиотеки (тысячи их), авторитетно заявляет, что бесплатная idea9 community edition плюс вот это плюс вот это могут помочь в декомпиляции коммерческого быдлокода