Reverse Engineering
Материал из Lurkmore.
В эту статью нужно добавить как можно больше не софтваре реверс инжиниринга, ибо ваистину. Также сюда можно добавить интересные факты, картинки и прочие кошерные вещи. |
Reverse Engineering — процесс получения исходников из конечного продукта инженерной и/или научной деятельности. Возможно все мы в детстве сломали немало игрушек пытаясь понять «как оно там устроено». С возрастом это проходит. Но не у всех.
Ученые пытаются дизассемблировать Вселенную чтобы восстановить исходники Б-га, который явно наложил несколько пакеров и обфускаторов.
Военные первым делом подбирают оружие на поле боя — чтобы посмотреть как устроена эта штурмовая винтовка Stg-44 и можно ли из нее сделать калаш, а уже потом закапывают трупы.
Китайские дизайнеры успешно реверсируют дольче-габбано чтобы произвести его больше, дешевле и хреновее. В этой стране таким способом были получены моцики «Урал» и «Днепр» — их просто спиздили через третьи руки у фошистов еще в тридцатые годы ХХ века.
И наконец некоторые реверсируют программы, чтобы исправить в них некоторые ошибки[1] или просто посмотреть как она устроена, что умеет, и сделать свою, с маджонгом и гейшами. Они то и являются илитой IT.
Содержание |
[править] Software Реверсинг
Реверсинг ПО — восстановление принципов/идей/алгоритмов работы программы, для исследования и/или создания аналогичного ПО. Часто применяется для:
- Анализа вирусов/троянов/червей и прочего дерьма, с целью создания средств защиты.
- Создания описаний для форматов данных/протоколов, используемых в программах и прочем дерьме. Пример с преподской тестирующей программой относится сюда.
- Анализа работы закрытых драйверов и прочего дерьма для создания открытых линупсовых.
- Поиска дырок в закрытом софте с целью создания вирусов/троянов/червей и прочего дерьма.
Не следует путать взлом ПО с его реверсингом: для взлома достаточно разобрать принцип работы лицензионной проверки, а реверсинг — это полный разбор программы по кирпичикам.
Для успешной работы требуется знать ассемблер, иметь общее представление о криптографии и знать мунспик. Алсо матан, например теорию графов для анализа ветвлений. Но можно и не знать, главное — уметь быстро найти что почитать и быстро разобраться.
[править] Инструменты
- Дизассемблеры
Дизассемблер — это утилита, которая преобразует бинарный код в ассемблерный листинг. В простейших случаях этого вполне достаточно и остается немного покурить и найти то, что нужно. В худших — это каша, и без скриптов и/или отладчика не обойтись.
IDA — это основной дизассемблер на сегодняшний день. Обладает множеством функций типа поддержки скриптов, графического режима (в хуй никому не упёршегося) или встроенных плагинов вплоть до эмулятора x86. Не тупой интерфейс — множество интуитивно понятных «горячих» клавиш и т. п. Проекту уже лет 15 и он единственный из дизассемблеров живущий активной жизнью сейчас, у других в новых версиях фичи почти не родятся. Олсо до сих пор с собой таскает свою DOS-GUI версию для олдфагов.
Hiew (Hacker’s viewer). Небольшая утилита, для нормальных людей бесполезна, используется только надрочившимися спецами.
Иногда используется продвинутыми пользователями как шестнадцатеричный редактор.
- Отладчики
Отладчик — программа для контролируемого исполнения программы или в общем случае любого произвольного куска кода вплоть до инжектированной в другой процесс DLL. Продвинутый отладчик умеет использовать аппаратные средства отладки, ну и, конечно, дизассемблировать.
SoftIce может переводиться с расово верного английского как «замерзший софт», на самом деле это отсылка к «black ice» (чёрный лёд) из книг Гибсона[2]. SoftIce появляется по нажатию CTRL-D и все остальное — программы, драйвера и даже некоторые прерывания перестают работать. Это дебагер, работающий на нулевом уровне, на котором можно все. Можно трассировать все: драйвер hdd, usb антенны и. т. п. А ещё там мышка работает и можно делать скины.
SoftIce вышел на рынок как отладчик уровня ядра совершенно неожиданно для самих создателей этого ядра — MS. Позиционировался как тулза «для нахождения багов в софте», но баги-то бывают разные, например, MS Office может требовать ключа активации.
Его преимуществом были и есть имена — он умеет считывать при загрузке инфу о библиотеке и в процессе отладки показывает имена, например Kernel.FindClose+105h.
В настоящее время похож на свежий навоз, его уже года два конструктивно не обновляют, легенда умерла.
Syser — китайский дебагер уровня ядра с GUI. Пришёл на смену SoftIce, развивается томно, но вроде не собирается загибаться.
OllyDbg — отладчик третьего уровня, гуишный, симпатяффный, функионала выше крыши, применим для 95 % программ, а пропатченный ручками и для 98 %.
Отечественная разработка http://www.ollydbg.de/, хотя и не столько широко известна, как SoftIce, но вполне кошерна. Алсо, бесплатна.
Автор положил на него хуй и теперь его разрабатывают новые умельцы, назвав пафосно OllyDbg 2.0. Релизы выглядят хреново, но парни явно набираются опыта и идут в правильном русле.
- Декомпиляторы
Современные быдлоязыки программирования типа Java или C# (он же .NET[3]) вовсе и не требуют для своего взлома применения дизассемблеров и отладчиков. Весь исходный код легко можно получить в считанные секунды, а если кодер был лох и не применил даже обфускацию, то полученные исходники от авторских будут отличаться разве что по отсутствию комментариев в первом.
.NET Reflector — Инструмент для декомпиляции программ на C# и некоторых других языках. Хороший инструмент. Авторы постоянно дорабатывают свое детище, в скорости обещают декомпилировать и другие основные языки. И это несмотря на то, что Reflector используется для взлома их собственных платных продуктов.
JavaDec, JavaByte, Cavaj, тысячи их… — декомпиляторы для Жабы. Инструментарий тут гораздо побогаче, чем для С#, но реально хитовых тулзов не наблюдается.
- Прочая хуита
PETools — Тулза небезызвестного NeoX (йодмен, человек выливший йод на хуй). Пригодна для работы с PE форматом. Конкуренты LordPE (умеет фиксить SizeOfImage в пебе %)), всё другое УГ.
RSATool — Гуи программа для прокачивания скила по RSA. Автор — эгоист из ТМГ (илита сцены, ни одного нюка)[4]. Для факторизации не годна, лучше юзать msieve.
[править] Вещи, затрудняющие анализ
Для борьбы с реверсингом авторы используют всяческие трюки, чтобы их творения были доступны анализу. Обычно, чем выше жадность и хреновее функционал, тем более параноидальная защита, которая в клинических случаях может даже начать мстить — удалять файлы и т. п. — если почувствует, что к ее попке приближается некто с отладчиком. Интересно, что глючащая защита может сработать там, где кряком и не пахло, и тогда простому пользователю пиздецъ.
Продвинутые программы редко содержат паранойю, например, WinRar.
Быдлокодинг. Как это ни удивительно, но быдлопроги зачастую обладают естественной защитой от анализа. Вот, скажем, Visual Basic — проект скомпилированный в P-code читать гораздо труднее чем продукт полноценного C-программера (ты кретин? Пикод декомпилируется[5]). Также некоторые сложности представляет индусский стиль программирования — программист неумело пытается защитить свое творение путем искусственного раздутия кода. Есть инфа что на VB пишут только пассивные гомосексуалисты.
Пакеры сжимают программы, чтобы они занимали меньше места на диске, и распаковывались в памяти. Не являются защитой сами по себе. Однако в нераспакованном виде анализировать сжатую программу невозможно. Для известных пакеров лучше всего найти анпакер который вернет программу в более-менее исходное состояние. Известные это UPX, ASPack, MEW, PECompact, NSPack.
Обфускация — превращение исходного исполняемого кода в говно кашу, которую невозможно читать. Из исходной инструкции обфускатор делает 5 а то и сотню (в случае параноии[6]; не путай хуй с пальцем, ты говоришь о пермутации[7]), делающих то же, что и одна, плюс ещё 200 которые вообще ничего не делают. Ну ещё 28 которые препятствуют эмулированию или отладке.
Применяется как в «хороших» программах, чтобы перенести появление кряка, так и в «плохих» типа полиморфных вирусов, стремящихся оттянуть момент своей детекции — каждая следующая копия будет непохожа на предыдущую. Олсо юзается в илитной малваре типа рустока и прочей, на которой антивирусные вендоры сосут хуйцы[8].
Антиотладка — приемы для борьбы с отладкой. Например уныло посмотреть поле BeingDebugged в пебе, или посмотреть значение NtGlobalFlag. Это 2 самых гавнометода, илита же предпочитает еблю с rdtsc (многопроцессорные системы сосут хуйцы), ядерные сплоиты и парсинг физической памяти. На каждый такой прием существует, антиприем. А на антиприем — антиантиприем. И обычно это люто бешенно глючит бсодит и вообще ебал я врот авторов всех этих плагинов для скрытия отладчиков от всякой неведомой хуйни.
Протекторы — проги, которые защитят ваше творение, и вам даже думать ни о чем не надо — знай сиди и бросай формочки в билдере. Thinstaller, RCrypt, ASProtect (привет Алёшка), Armadillo (привет Чад Нельсон), Execrypter (привет Relayer), WL/Themida… много их. Могут содержать все вышеперечисленные пункты в невозбранном количестве и в самых невероятных сочетаниях, но обычно содержат баги в реализациях PRNG/метаморфов и прочей хуиты.
[править] Ресурсы
WASM.ruОбразован от слияния двух проектов — HI-TECH (Serrgio) и, собственно, WASM.ru (Aquila). WASM — Windows Assemler Site, ориентирован в том числе на «Отладка и дизассемблирование программ» и «Защита от предыдущего пункта» [1].
Отличная подборка статей на разные околореверсные тематики, набор исходников и утилит (впрочем не сильно приватных), а также форум — здесь обитают специалисты высокого уровня. Также можно получить или поделиться знаниями в области ассемблера — например, оптимизации под современные процессоры и т. д. Также например на сайте к сожалению до сих пор не раскрыт вопрос о том почему например Володий не отдал общак, одепты адово негодуют. (Олала, одепт BHC детектед. Раскрыт но исходнеги в приватном мавзолее. Лучше бы напейсали отдельный развернутый параграф про тот случай).
RENG.RU Ныне в дауне.
cracklab.ru Более узкоспециализированный форум, многие специалисты обитают там. Приватных тулзов также не скачать (а мне скачать) но можно закупить (недорого) crack DVD 2008 и (после самостоятельного изучения) денег на софт, по идее, тратить уже будет не нужно.
vx.netlux.org Сайт для пейсателей малваре, хуесосов, элит и прочего сброда. Содержит овер 9000 исходных кодов полиморфных движков, вирусных журналов, статей и прочих благ. Неимоверно доставляет.
[править] См. также
[править] Примечания
- ↑ одна из самых «распространенных» — жадность разработчика.
- ↑ Это больное воображение. Есть в микроконтроллерной технике такой термин — ICE. In-circuit emulator. Микросхема с одной стороны ведущая себя как микроконтроллер (или микропроцессор), а с другой сливающая по дополнительному интерфейсу (которого нет у обычного контроллера/процессора) всю внутреннюю информацию — для отладки. Так вот SoftICE — это заявка на то, что всм не нужно покупать ICE-версию чипа а достаточно этого Software что бы получить такую же мощность отладки. И, да, ICE-версия i486 продавалась Intel’ом, дальше вроде бы нет.
- ↑ Чебля? Схуяли платформа = язык стала?.
- ↑ Имха про команды лучше пейсать [начать] отдельный параграф. Правда горантии что не будет удолена — нет — local admins are ruthless here :(
- ↑ Все что угодно декомпилируется — если есть декомпиллер/стриппер. А если нет? Это было использовано для примера.
- ↑ Блджад, школьник, да посмотри это слово в словаре, если оно тебе так нравится
- ↑ Ты училсо на юрфаке а я — на филфаке. Обфускация == любое «затемнение» кода, даже в википедии.
- ↑ И русток.ц, и синовал, и прочее преотлично лечатся Доктором и Каспером.
Быдлоязыки | ABAP • PHP • Python • C++ • C# • Жаба• JavaScript (Ajax) • Pascal • 1С • Васик |
Небыдлоязыки | BrainFuck • Erlang • Forth • Haskell • LISP • Perl • Tcl • TeX |
Ассемблеры | Ассемблер • Няшная Сишка |
Профессии | Быдлокодер • Индус • Программист • Тестировщик • Хеллоуворлдщик |
Прочее | My other car • Foobar • Regexp • Resign patterns • Выстрелить себе в ногу • ЕГГОГ • Рекурсия • %s • ++i + ++i • Свистелки и перделки • Тест Тьюринга • Умение разбираться в чужом коде • Фаза Луны |