Reverse engineering

Содержание:

Реверс-инжиниринг полёта Бэтмена

Этим летом вышла очередная игра из серии Batman Arkham, в ПК версии которой оказалось столько багов, что было принято беспрецедентное решение снять её с продаж. Я решил посмотреть, что же там такого ужасного.
Среди прочих наблюдается такой баг, на первый взгляд, случайный: иногда, когда Бэтмен прыгает с крыши, вместо того, чтобы ровно планировать, он колбасится некоторое время, потом делает довольно глубокий нырок, и только потом выравнивается. В результате в лучшем случае — весьма нежелательная потеря высоты, в худшем можно спугнуть врагов, а то и вообще свалиться им на голову.
На скриншоте изображён этот момент: вместо того, чтобы лететь вперёд, Бэтмен повернулся вниз головой, демонстрируя полнейшее пренебрежение к происходящему. Аналогичный баг был в предыдущей игре (Arkham Origins), и он до сих пор не исправлен. Видимо тот же самый кривой код был перенесён в новую игру. Попробуем найти, какие ошибки делают программисты в играх такого уровня, и исправить их.

О ReactOS из первых рук или «очная ставка» с Алексеем Брагиным

Мало кто знает, что Институт системного программирования (ИСП) Роcсийской академии наук (РАН) проводит ежемесячный научно-практический семинар «Технологии разработки и анализа программ». Мероприятие проходит при поддержке МГУ и Microsoft Research представляет собой аналог конференций TED Talks и Google Tech Talks.
В этот четверг гостем будет Алексей Брагин — президент Фонда «Реактос», который выступит с докладом на тему «Операционная система Реактос».
Алексей ведёт учебную и научную работу, напрямую связанную с операционными системами – разработан и читается в МГТУ им. Н.Э.Баумана на кафедре ИУ9 собственный курс лекций и лабораторных работ, проводится ряд научно-исследовательских проектов, в том числе в сотрудничестве с университетами в Бельгии и Франции. Область научных интересов: функциональное и логическое программирование, операционные системы, криптография, экономика.
В докладе будут рассмотрены основные технические аспекты разработки операционной системы ReactOS, а также приведён пример использования трёх независимых проектов (ReactOS, Wine, X Window System) для создания альтернативной реализации подсистемы Win32, которая может быть использована как в ReactOS, так и в самой Windows, например, для построения виртуальных сред для выполнения Win32-программ.

Анализ исходного кода Doom 3

Перевод

23 ноября 2011 года id Software поддержала собственную традицию и опубликовала исходный код своего предыдущего движка.
На сей раз настало время idTech4, который использовался в Prey, в Quake 4 и, разумеется, в Doom 3. Всего за несколько часов было создано больше 400 форков репозитория на GitHub, люди начали исследовать внутренние механизмы игры или портировать её на другие платформы. Я тоже решил поучаствовать и создал Intel-версию для Mac OS X, которую Джон Кармак .
С точки зрения чистоты и комментариев это самый лучший релиз кода id Software со времени кодовой базы Doom iPhone (которая была выпущена позже, а потому откомментирована лучше). Крайне рекомендую каждому изучить этот движок, собрать его и поэкспериментировать.
Вот мои заметки о том, что я понял. Как обычно, я подчистил их, надеюсь, они сэкономят кому-нибудь пару часов и сподвигнут кого-нибудь на изучение кода для усовершенствования своих навыков программиста.

Я учитель

Сделав какие-то переводы «в стол», а какие-то и в народ, я вернулся к исполняемым файлам Windows. Ещё немного поднаторев в ассемблере, я понял, что «секретных» знаний во мне теперь чересчур много, и мне есть что рассказать из своего опыта, есть чем поделиться, и что ещё не было описано в имеющихся статьях. Хотелось передавать знания таким же новичкам, каким я был сам (видимо, сказывается то, что мама — учитель).

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

Получив положительные отзывы, я писал ещё и ещё, понимая, что спрос есть.

Инструменты

При написании каждой статьи я старался использовать только самые свежие и удобные программы на тот момент: с плагинами, , , и кучу других. Никаких тебе , и , коими привыкли пользоваться большинство авторов, хотя пользоваться ими в современном мире было сплошной болью.

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

Прикладная криптография. Как мы восстановили биткоины на 300 тысяч долларов

Перевод

Поделюсь с вами одной историей. Около двадцати лет назад я получил степень по физике, но занимался реверс-инжинирингом и криптоанализом. Наша компания AccessData работала в конце 90-х и начале 2000-х. Тогда правительство США постепенно снимало ограничения на экспорт криптографии, однако парольная защита в большинстве программ по-прежнему оставалась довольно бесполезной. Мы брали офисные программы, я проводил реверс-инжиниринг и выяснял алгоритм шифрования, а потом ломал криптозащиту.
Это был нескончаемый поток интересных, но не особенно сложных математических головоломок. За всё время я написал около сорока взломщиков паролей. Мы продавали их домашним пользователям, системным администраторам, местным и федеральным правоохранительным органам. Мне пришлось несколько раз съездить в федеральный центр подготовки сотрудников правоохранительных органов в Глинко, чтобы объяснить ребятам из Секретной службы, ФБР и АТФ основы криптографии и как использовать наши продукты.
Особенно ярко мне запомнились два проекта. Первым был Microsoft Word 97. До его появления файлы шифровались с помощью XOR байтов открытого текста и 16-байтовой строки, которая выводилась из пароля. Самыми распространёнными байтами в файле Word обычно были 0x00, 0xFF или 0x20 (пробел), поэтому мы просто выбирали самый распространённый символ в каждом столбце и проверяли 316 вариантов. Восстановление ключа обычно происходило мгновенно, но чтобы людям не казалось, что они зря потратили деньги, мы вставили небольшую анимацию, похожую на голливудскую хакерскую сцену с множеством случайных символов, из которых постепенно проявляется правильный пароль.

Как устроен Philips VideoWRITER. Сначала фотки железа, потом немного занудства

Перевод

Устройство для редактирования и печати текстов VideoWRITER было выпущено компанией Philips в 1985 году. Оно выполнено на Z80-совместимом процессоре и содержит 16 кБ ПЗУ и столько же ОЗУ (как позже выяснилось, ПЗУ больше). Для сохранения документов в нём предусмотрен 3,5-дюймовый дисковод. Стать счастливым обладателем этого «комбайна» (там ещё и принтер встроенный) можно было за 799 долларов.
Экран оранжевого ЭЛТ-монитора заметно шире обычного. На него помещается не только окно с редактируемым документом, но и расположенное справа от него меню. Там же отображаются подсказки, в том числе о назначении функциональных клавиш. Документ всегда отображается светлыми символами на тёмном фоне, меню — наоборот. В левом нижнем углу накладки на экран нанесено обозначение: DDS — Dual Display Screen…

ReactOS 0.4.12: 华为, 你认为这个怎么样?

Нихао, Хабражители!
Чувствую, что в этот раз вы реально заскучали по весточкам от нашего проекта! Целых семь месяцев мы работали, не покладая клавиатур, чтобы вы могли скачать и протестировать очередную версию нашей операционной системы. В ней было исправлено 226 багов, сделано 1140 изменений в исходном коде и специально для вашего удовольствия добавлены новые нескучные темы оформленияСкачать образы системы | Пресс–релиз | Список изменений | TL;DR | Тесты и список регрессий
Несмотря на заявленный оперативный график формирования релизов раз в 3 месяца, окончательная подготовка выпуска 0.4.12, которая по традиции велась в отдельной ветке, заняла на этот раз немногим больше полугода. Причиной столь длительного процесса подготовки было желание нашего перфекциониста и релиз–инженера по совместительству, Иоахима Хензе, исправить как можно больше регрессий, накопившихся за последние несколько лет. В результате Иоахим добился устранения не менее 33 регрессий, что можно назвать впечатляющим результатом.

Защита микросхем от реверс-инжиниринга и несанкционированного проникновения

“CVAX — когда вы забатите довольно воровать настоящий лучший”.
Надпись, оставленная американскими инженерами для советских коллег в топологии микропроцессора.
Реверс-инжиниринг микросхем — головная боль производителей с самых первых лет существования микроэлектроники. Вся советская электроника в какой-то момент была построена на нем, а сейчас с гораздо большим размахом тем же самым занимаются в Поднебесной, да и не только в ней. На самом деле, реверс-инжиниринг абсолютно легален в США, Евросоюзе и многих других местах, с целью (цитирую американский закон) “teaching, analyzing, or evaluating the concepts or techniques embodied in the mask work or circuitry”.
Самое частое легальное применение реверс-инжиниринга — патентные и лицензионные суды. Промышленный шпионаж тоже распространен, особенно с учетом того, что электрические схемы (особенно аналоговые) часто являются ключевой интеллектуальной собственностью и редко патентуются — как раз для того, чтобы избежать раскрытия IP и участия в патентных судах в качестве обвиняющей стороны

Разумеется, оказавшись в ситуации, когда нужно защитить свою интеллектуальную собственность, не патентуя ее, разработчики и производители стараются придумать способы предотвращения копирования своих разработок.
Другое не менее (а то и более) важное направление защиты микросхем от реверс-инжиниринга — обеспечение безопасности информации, хранимой в памяти. Такой информацией может быть как прошивка ПЛИС (то есть опять-таки интеллектуальная собственность разработчика), так и, например, пин-код от банковской карты или ключ шифрования защищенной флэшки

Чем больше ценной информации мы доверяем окружающему миру, тем важнее защищать эту информацию на всех уровнях работы обрабатывающих ее систем, и хардварный уровень — не исключение.

Динамическое распределение памяти

В этой статье будут рассмотрены следующие виды динамического распределения памяти:

  1. malloc.
  2. calloc.
  3. realloc.

malloc — динамическое выделение памяти

Сначала разберёмся в коде:

Прим. перев. В оригинале статьи выделяется байтов, хотя правильно будет . В конце строки ещё добавляется символ с кодом .

В этой функции выделяется место под 11 символов с помощью , а затем в выделенное пространство памяти копируется «Hello World».

Теперь давайте посмотрим на машинный код:

Примечание Во время сборки вы можете увидеть инструкции «». Эти инструкции были специально размещены на этапе подготовки к статье, чтобы различные части кода было проще понимать.

Динамическое распределение памяти с помощью — машинный код

При использовании размер выделенной памяти () сначала перемещается в регистр . Затем системная функция вызывается для выделения памяти. Выделенная область памяти затем сохраняется в переменной . Потом строка «Hello World» разбивается на «Hello Wo» и «rld», поскольку она копируется в выделенное пространство памяти. Наконец, вновь скопированная строка «Hello World» выводится на экран, а выделенная память освобождается с помощью функции .

calloc — динамическое чистое выделение памяти

Посмотрим на код:

Как и в методе , место для 11 символов выделяется, а строка «Hello World» копируется в указанное пространство. Затем вновь перемещённый «Hello World» распечатывается, и выделенное пространство памяти освобождается.

Динамическое распределение памяти с помощью calloc — машинный код

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

realloc — динамическое перераспределение памяти

Сначала посмотрим код.

В этой функции память для 11 символов выделяется с помощью . Затем «Hello World» копируется в только что выделенное пространство памяти, прежде чем указанное расположение памяти перераспределяется, чтобы соответствовать 21 символу.

Прим. перев.: Должно быть 22 символа. Снова автор забыл символ с кодом , используя

Наконец, «» копируется в только что перераспределённое пространство. Наконец, после вывода на экран память освобождается.

Интенсив «Pentesting: Level 0»

4–6 декабря, Онлайн, 2300 ₽

tproger.ru

События и курсы на tproger.ru

Теперь посмотрим машинный код:

Динамическое распределение памяти с помощью realloc — машинный код

Сначала память выделяется с помощью . Затем, после вывода на экран только что перемещённой строки «Hello World», вызывается для переменной (которая представляет переменную в коде), а также передаётся новый размер ( в десятичном виде). Затем «» разбивается на «„, “», «» и «„, поскольку он копируется в только что перераспределённое пространство памяти. Наконец, пространство освобождается с помощью функции .

Исследуем китайские роутеры на RT5350

Однажды, lolipop купил роутер на алиэкспрессе. Да не простой роутер, а очень компактный и дешевый, с 2 Ethernet-портами, USB, да еще и от фирмы, которая в начале 2000-х продавала свои mp3-плееры на территории РФ: Nexx WT1520H.
Стандартная прошивка, как и почти всегда, была скудная, и, конечно же, хотелось заменить ее на что-то более вменяемое. Но вот незадача — никаких альтернативных прошивок под роутер нет, и прошить непонятно как, т.к. никакие другие прошивки не принимались через веб-интерфейс, заголовок прошивки я раньше такой не видел, да и binwalk ничего в ней не находил, стало быть, она зашифрована:

lolipop слил данные с флешки через программатор, и мы начали в них ковыряться.

Грязные решения в реверс-инжиниринге

Перед разработчиками довольно часто встаёт выбор — сделать всё правильно, потратив на решение задачи уйму времени, или сделать так, чтобы работало, не особо вдаваясь в детали того, как именно это получилось. Со стороны заказчика, разумеется, наиболее привлекательной является некая золотая середина, которая в данном случае заключается одновременно и в хорошем понимании программистом выполненного таска, и в как можно меньшем количестве затраченных на него человеко-часов. С разработчиками тоже не всё так однозначно — с одной стороны, понимать, что происходит в своём собственном коде, это вполне естесственное желание (особенно если поддержка данного продукта также будет лежать на его плечах), а с другой стороны, если результаты работы приложения представлены в наглядном виде (графики / звуковые или видео-фрагменты etc), разработка разовая, и отдел тестирования говорит, что всё хорошо, то почему бы не проскроллить оставшуюся часть рабочего времени Хабр, посвятив время себе любимому?
Ближе к делу. В одной из предыдущих статей я уже упоминал о программе под названием «Говорилка». Несмотря на название, сама по себе она ничего не озвучивает, а лишь является связующим звеном между пользователем и речевыми движками, предоставляя более удобный интерфейс и возможность конфигурации. Одним из наиболее популярных в узких кругах движков является «Digalo 2000 text-to-speech engine» (далее — Digalo), ссылку на который можно найти как раз на сайте «Говорилки». Как вы уже, наверное, догадались из тематик моих предыдущих статей, не всё с ним так хорошо, и без багов тут также не обошлось. На этот раз проблема проявилась при озвучивании текста «ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа». Немного поэкспериментировав, я обнаружил, что при достижении определённого количества «неразрывных» символов Digalo начинает крашиться, предлагая отладить свой процесс. Ну, а что, почему бы и нет?
Как протекал процесс, и что из этого вышло, читайте под катом (перед прочтением данной статьи я настоятельно рекомендую ознакомиться с предыдущими, которые можно найти, например, тут).

Переводчик

Так вот, тогда мне почему-то не нравилось, что далеко не все программы переведены на русский язык, и захотелось это исправить. Накачал разных редакторов ресурсов, типа , начал открывать все и -файлы программ что находил в , и смотрел, какие строковые ресурсы можно перевести. Переводил, паковал в установщик или файл, и выкладывал (так и не узнал, как эти rus-файлы работали). Но так продолжалось до тех пор, пока мне не повстречались упакованные и защищённые файлы.

cracklab.ru

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

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

Ромхакинг

Иногда играя в Сегу, мне попадались картриджи на русском языке, на титульных экранах игр которых были такие надписи как «Группа перевода «, «Перевод «. Разработчики ли это, или же какие-то сторонние организации я не знал, но у них явно был доступ к каким-то манускриптам, древним текстам шумеров, в которых рассказывалось, как переводить игры на русский язык. И мне захотелось овладеть этими знаниями.

Так я открыл для себя форум «Шедевра».

Если вкратце, то ромхакинг — это любое изменение образа или файла игры, с какой либо целью: перевод, исправление кода, графики.

Это был очень занимательный процесс: сидишь, перерисовываешь квадратики игрового шрифта пиксель за пикселем, переводишь и вставляешь с помощью программы для перевода текст, и смотришь что получилось. Правда, никакого тебе ассемблера, только хардкор! Но это уже было планкой, через которую очень немногие могли перепрыгнуть (судя по количество активных на форуме Шедевра).

Как воскресить Ягуара за тысячу часов?

Бывает меня спрашивают — как я пишу эмуляторы? Попробую ответить на примере одной провалившейся консоли.
Эмуляция — почти бесконечное занятие, всегда остаются неточности, и если меня спросят сколько я потратил на эмуляцию 3DO, то я лишь пожму плечами, но одно знаю точно — с эмуляцией 3DO все очень хорошо. Поэтому пришло время найти новую жертву и ей оказался Atari Jaguar. 1000 часов — примерно столько я потратил на разработку ядра эмуляции данной консоли в проекте «Феникс», и вероятно еще столько же понадобится, чтобы поднять совместимость с текущих 95% до 99%, а оставшийся 1% потребует еще, возможно не одну тысячу часов, но это уже отдельные скучные истории про отладку едва уловимых глюков.

Упражнения в эмуляции: инструкция FMA консоли Xbox 360

Перевод

Много лет назад я работал в отделе Xbox 360 компании Microsoft. Мы думали над выпуском новой консоли, и решили, что было бы здорово, если эта консоль сможет запускать игры с консоли предыдущего поколения.
Эмуляция — это всегда сложно, но она оказывается ещё труднее, если твоё корпоративное начальство постоянно меняет типы центральных процессоров. В первом Xbox (не путать с Xbox One) использовался ЦП x86. Во втором Xbox, то есть, простите, в Xbox 360 использовался процессор PowerPC. В третьем Xbox, то есть в Xbox One, использовался ЦП x86/x64. Подобные скачки между разными ISA не упрощали нам жизнь.
Я участвовал в работе команды, которая учила Xbox 360 эмулировать многие игры первого Xbox, то есть эмулировать x86 на PowerPC, и за эту работу получил титул «ниндзя эмуляции». Затем меня попросили изучить вопрос эмуляции ЦП PowerPC консоли Xbox 360 на ЦП x64. Заранее скажу, что удовлетворительного решения я не нашёл.

Реверс-инженеринг GPS замка WatchLock для личного использования

Из песочницы

Израильская компания Starcom Systems специализируется на различного рода GPS/GSM трекерах и удаленных системах контроля, базирующихся на них. В данном случае ко мне попало разработанное в этой компании устройство: электронный замок с функциями GPS-трекера WatchLock, который Starcom выпускает совместно с компанией Mul-T-Lock.
Устройство совмещает в себе функции классического навесного замка с функциями GPS/GSM трекера и соответственно позволяет контролировать такие параметры как: открытие/закрытие замка, физическое воздействие на замок (при помощи акселерометра), текущие местоположение замка и т.д. Передача информации о событиях посредством сети GSM. Возможно использовать для связи два варианта, GPRS канал и(или) SMS сообщения (в данном случае связь через SMS меня не особо волнует, поэтому остановимся на GPRS). Передача данных ведется на сервер компании или на прокси-сервер, установленный у дилера на поддерживаемый дружественный сервис. Например, Wialon, либо опять таки на сервер компании. Частному пользователю, купившему устройство для личных нужд, не удастся его использовать без оплаты услуг сторонних компаний, что для не корпоративных пользователей может быть накладно или излишне (либо, как вариант, необходима высокая анонимность). Я один из тех, кому функционал больших мониторинговых серверов излишен, а возможность поиграться с новым устройством мотивационна. Итак, приступим!

[править] Немного о личных качествах самих реверсеров

Вечер. Автобус. Едет. На первом сиденье сидят двое. У них коэф. интеллекта IQ=180:
— Я вчера Гамлета в оригинале читал… Такое эстетическое наслаждение…
На другом сиденье сидят ещё двое. У них IQ=140:
— Я вчера посмотрел «Андалузского пса» и нашёл коррелят с ранними картинами Пикассо…
На другом сиденье сидят двое. У них IQ=100:
— Мы с другом час назад посмотрели «От заката до рассвета». Как там тёлка говорит тёлке, что…
На другом сиденье сидят двое других. У них IQ=80:
— Слышь, брат! Помнишь, какое пойло мы в мерсе пили, когда ноги какой-то б..яди торчали в окне…
А на задней площадке стоят двое с IQ=40:
— Ну вот, вскрываю прогу твоим дебаггером…

Анекдоты — анекдотами, но реверсивщики делают много хорошего. Помимо упомянутого участия в разработке всевозможных антивирусов, именно один из них создал неофициальный кодовый патч (UCP) для Master of Orion образца 2016 г, позволивший модить игруху сверх дозволенного разработчиками. Продукт продолжает расширяться и дорабатываться. Самое забавное, что даже по строгим заокеанским законам собственник не осудил кулибина, но и не заплатил за старания, а вместо этого тупо скомуниздил несколько решений в официальный патч. Вот тебе, бабушка, и авторские права!

Telnet и echo — кто прав, кто виноват

В к предыдущей статье у нас разразился небольшой спор на тему того, помогает ли команда «set localecho» в решении проблемы с отсутствием echo при взаимодействии с сервером bat.org. Я стоял на том, что команда эта не сделает ровным счётом ничего для исправления рассмотренной ситуации, и говорил это вовсе неспроста — специально после одного из комментариев я решил ещё раз проверить мою правоту в данном вопросе. Проделав все необходимые действия (запуск telnet.exe, нажатие Ctrl-], ввод команды «set localecho» и двойное нажатие клавиши Enter), я в очередной раз убедился, что был прав. О чём же тогда так уверенно твердят остальные?
Я попросил выслать мне бинарник «работающего» telnet-клиента и версию ОС, на котором он запускался, в личку

Убедившись, что версии ОС совпадают (использовалась Windows 7 SP1 x64), я обратил своё внимание на сам telnet-клиент. Хеши совпали

Запустив «работающий», по заверению пользователя k0ldbl00d, бинарник, я с удивлением обнаружил, что на моём компьютере не работает и он.
Может быть, дело в окружении, в котором выполняется telnet.exe? Оригинальный исполняемый файл был взят из директории «%WINDIR%\System32», так что я запустил свой telnet-клиент оттуда, и… Обнаружил, что команда «set localecho» корректно отрабатывает при таком раскладе. А если скопировать тот же самый исполняемый файл в любую другую директорию и воспользоваться уже им, то, несмотря на то, что основной функционал telnet.exe будет продолжать работать, команды перестанут выполнять то, что от них требуется.
В чём же дело? Давайте раберёмся.
Как протекал процесс, и что из этого вышло, читайте под катом. Перед прочтением данной статьи также настоятельно рекомендую ознакомиться с предыдущими, т.к. в них уже объяснены многие из опущенных здесь моментов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector