Все потоки
Поиск
Написать публикацию
Обновить
117.54

Реверс-инжиниринг *

Расковырять и понять как работает

Сначала показывать
Порог рейтинга
Уровень сложности

Пасхалка в ionCube — попытка разработчиков замести мусор под ковер?

Время на прочтение9 мин
Количество просмотров15K

Веб-разработчик знает, что скрипты, созданные в коммерческих целях, могут пойти гулять по сети с затёртыми копирайтами; не исключено, что скрипт начнут перепродавать от чужого имени. Чтобы скрыть исходный код скрипта и препятствовать его изменению, применяются обфускаторы, минификаторы и т.д. Один из самых давних и известных инструментов для шифрования скриптов на PHP — это ionCube. Появившийся в 2002, он продолжает следить за развитием PHP и заявляет о поддержке последних версий платформы. Как я покажу в этой статье, с поддержкой PHP 7 у ionCube далеко не всё в порядке…
Читать дальше →

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR

Время на прочтение4 мин
Количество просмотров29K
Привет, Хабр.

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


Фото (с) Verifone

Для тех кому интересно как это работает, немного подробностей под катом.
Читать дальше →

Исследователи восстановили утерянную игру для NES с 30-летних дискет

Время на прочтение10 мин
Количество просмотров9.7K
image

Привет, я основатель Video Game History Foundation Фрэнк Сифалди. Сегодня мы с Ричем Уайтхаусом расскажем вам историю о том, как восстановили и собрали заново Days of Thunder — невыпущенную, никем ранее не виденную игру, соавтором которой был Крис Оберт из Mindscape.

Ушедший от нас в 2012 году программист и дизайнер Крис Оберт (Chris Oberth) сделал долгую и разнообразную карьеру в индустрии видеоигр. Думаю, для большинства из нас главной игрой Криса Оберта была Anteater — аркадный проект, который он придумал и разработал во время работы в Stern (или, возможно, вы знаете клон этой игры под названием Ardy the Aardvark, который сам Крис написал для домашних компьютеров, или ещё один клон, Oil’s Well, созданный другими людьми). Для остальных такой игрой может быть Winter Games для Commodore 64 или, возможно, его последние проекты для аркадных автоматов наподобие Time Killers или World Class Bowling, которые он разрабатывал в Incredible Technologies; или же такими знаковыми играми для вас могли стать несколько проектов, которые он разработал на своём Apple II в конце 70-х и начале 80-х (как он сам любил хвастаться, его Apple II имел серийный номер 201).

В начале 2020 года с Video Game History Foundation связался друг семьи Оберта, попросив помочь разобраться с оставшимися после него материалами. В подвале его дома, где он часто работал, хранились годами нетронутые кучи старых компьютеров, резервных копий на CD-R, гибких дисков, записей, кассет, EPROM и данных на ленточных накопителях, копившиеся со времён его работы с Apple II в конце 70-х. Его семья согласилась временно передать нам эти архивы для разбора.

Опубликован исходный код Command & Conquer: смотрим, что внутри

Время на прочтение19 мин
Количество просмотров37K

Компания Electronic Arts открыла исходный код первой Command & Conquer, а также Command & Conqueror: Red Alert. Скачать его можно с GitHub.

Всё содержимое имеет лицензию GPL v3; кроме того, в исходном коде сохранены все комментарии. Отсутствует только changelog использовавшейся при разработке системы контроля версий. Похоже, всё просто недавно выложили на Git.

Я решил изучить, что же происходит внутри этого игрового движка. Не буду описывать каждую строку кода, но, по крайней мере, будет интересно взглянуть на то, какой была разработка на C++ в начале 1990-х.

Изучать мы будем только исходный код «Command & Conquer: Red Alert», потому что он похож на форк первой игры. В репозитории он находится в папке REDALERT.

Статистика


  1. 290 файлов заголовков C++
  2. 296 файлов реализации на C++
  3. 14 файлов ассемблера, содержащих инструкции ассемблера x86
  4. 222090 строк кода на C++

Количество строк кода я получил, подсчитав непустые строки, после чего вычел из них те строки, которые очевидно были комментариями.

Почти все файлы имеют имена в верхнем регистре.

Кроме того, есть файл «RedAlert.vcxproj», поэтому можно предположить, что проект можно собрать в более новых версиях Visual Studio, но этого я не проверял.
Читать дальше →

Реверс-инжиниринг микросхем по фото

Время на прочтение3 мин
Количество просмотров13K
Тем, кто любит гикпорн-фотографии от BarsMonster и его товарищей по цеху, наверняка интересно научиться расшифровывать логическую схему по её фотографии. Например, что делает вот этот кусочек Z80?


Яркие вертикальные полосы — это металлические проводники; горизонтальные полосы, от которых видны только тёмные границы — это проводники из поликремния; область неправильной формы с ярко-чёрной границей — это легированная часть кремниевой подложки; желтоватые круги — это соединения между слоями микросхемы.

Каждый транзистор образован поликремниевым проводником, пересекающим область легированного кремния:



По традиции, такие транзисторы называют MOSFET («металл-оксид-полупроводник»), даже когда затвор не металлический, а поликремниевый. Автор вполушутку предположил, что ни один производитель поликремниевых транзисторов не хотел называть их POS.

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

Вот та же самая фотография с размеченными транзисторами и проводниками: (я добавил в авторскую иллюстрацию обозначения соединений между слоями)

Читать дальше →

Швейные машины с управлением через Game Boy: пишем эмулятор

Время на прочтение21 мин
Количество просмотров4.3K

Новая нить повествования


Моё путешествие оказалось довольно долгим, и сегодня уже третья годовщина с момента начала серии статей Edge of Emulation. Когда я впервые работал над эмуляцией сканера штрихкодов Barcode Taisen Bardigun в 2017 году, я понятия не имел, сколько ещё смогу всего сделать. Моя цель заключалась в завершении списка, исследовании и документировании по одному устройству за раз, но я не знал, есть ли вообще у меня нужные навыки для выполнения этой задачи. За последние несколько лет я столкнулся с большим количеством трудностей и множеством различных проблем. Тем не менее, мне как-то удалось преодолеть все эти препятствия благодаря уделённому времени, решимости и помощи друзей и коллег. Некоторые устройства очень просты, и для их правильной эмуляции требовалось всего один-два дня. Однако другие были упрямы и трудны. Тема этой статьи доставила мне особую головную боль.

В начале 2000-х японская швейная компания Jaguar выпустила машину с одной очень любопытной функцией. Шаблоны шитья не были встроены в саму швейную машину Jaguar JN-100 (так же известную как «nuyell»); вместо этого она с помощью Link Cable подключалась к Game Boy и получала инструкции. Программное обеспечение, называвшееся Raku x Raku Mishin, поставлялось на обычном чёрном картридже Game Boy и занималось передачей данных на JN-100. Пользователи могли программировать машину, чтобы она шила различные узоры, петлицы, символы каны, буквы и даже короткие контуры, создаваемые пользователем. Американская компания Singer («Зингер») увидела в JN-100 потенциал для бизнеса; позже две стороны пришли к соглашению о выпуске в США почти точной копии машины под собственным брендом компании Singer IZEK 1500.

Хранение мира в Snake Rattle'n'Roll

Время на прочтение34 мин
Количество просмотров7.8K
Много лет назад мне довелось поиграть на Dendy в игру Snake Rattle'n'Roll. Пройти её мне тогда так и не удалось, из-за широко известного в узких кругах бага с фонтанчиком на 7 уровне. Да, и на данный момент игра так и не пройдена. Прогресс пока остановился на последнем уровне из-за его сложности. Игра сама по себе для NES была достаточно нестандартна. Это был изометрический мир, в котором надо было карабкаться верх, по пути собирая бонусы, поедая ниблов (местная живность) и сражаясь с ногами, шашками и прочими грибами. Вроде бы ничего необычного, но продвигаясь дальше по уровням я замечал, что мир хоть и был разбит на уровни, но был единым целым, просто каждый из уровней происходил в другой ограниченной части этого мира. И вот однажды мне захотелось получить 3D модель данного мира, с целью распечатать себе сувенир на 3D принтере. Учитывая характеристики железа NES я представлял, что это будет не очень просто, как оно оказалось на самом деле судить вам. Итак, если вас заинтересовало исследование этого мира — добро пожаловать под кат.
Читать дальше →

Реверс-инжиниринг рендеринга «Ведьмака 3»: Млечный путь, порталы и цветокоррекция

Время на прочтение34 мин
Количество просмотров5.6K
[Предыдущие части анализа: первая и вторая, третья и четвёртая.]

Часть 1: Млечный путь


В предыдущем посте я рассказывал, как в «Ведьмаке 3» реализованы падающие звёзды. Этого эффекта нет в «Крови и вине». В посте я опишу эффект, который есть только в этом DLC: Млечный путь.

Вот видео, в котором показан Млечный путь.


И несколько скриншотов: (1) до вызова отрисовки купола неба, (2) только с цветом Млечного пути, (3) после вызова:

Скриншоты



Готовый кадр только с одним Млечным путём (без цвета неба и звёзд) выглядит так:


Эффект Млечного пути, ставший одним из самых сильных отличий от версии игры 2015 года, вкратце упомянут в разделе «Глупые трюки с небом». Давайте разберёмся, как он реализован!

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

АНБ, Ghidra и единороги

Время на прочтение12 мин
Количество просмотров4K

АНБ, Ghidra и единороги

На этот раз взгляд команды PVS-Studio привлекла Ghidra — большой и злой фреймворк для реверс-инжиниринга, с помощью которого можно анализировать различные бинарные файлы и делать с ними всякие страшные вещи. Наиболее интересно в нём даже не то, что он бесплатен для использования или отлично расширяется плагинами, а то, что написали его в АНБ и выложили исходники на GitHub для всех желающих. С одной стороны, кажется, что у АНБ-то точно достаточно ресурсов для поддержания кодовой базы в чистоте. А с другой, не очень знакомые с ней новые контрибьюторы могли за прошедшее время случайно добавить незамеченных багов. Поэтому, вооружившись статическим анализом, мы решили поискать слабые места в этом проекте.
Читать дальше →

Ностальгии пост: j2me, Gravity Defied, 64kb

Время на прочтение17 мин
Количество просмотров37K

Эта статья не преследует никаких практических целей — просто мне стало интересно, как лет 15 назад разработчикам удавалось делать вполне функциональные приложения и игры для слабых телефонов того времени.



  • Если что, я не имею к этой игре никакого отношения.

Например, игра с картинки выше не использовала floating-point числа, так как не все телефоны их поддерживали. "3д" и физика — полностью самописные на fixed-point вычислениях поверх целых чисел. Но мне кажется, перечисление особенностей одного приложения будет не сильно информативным. Для полноты картины я немного затрону возможности телефонов, j2me платформу и заодно сравню это с современной разработкой под Android.


Кроме того, j2me — это полноценная java старой версии (кажется, 1.3), я дописал некоторые недостающие классы и смог запустить .jar файлик с игрой на своём PC. Скриншот выше — оттуда. Не скажу, что от этого есть какая-то польза — просто API для j2me было очень простым и мне захотелось попробовать.

Читать дальше →

Полигоны Another World: Sega Genesis

Время на прочтение9 мин
Количество просмотров4.2K

Перевод пятой статьи из серии от Fabien Sanglard, в этот раз про порт Another World на Sega Genesis.


Разработка MegaDrive/Genesis началась сразу после того, как Sega выпустила свою Master System ​​в 1987 году. В то время целью Sega было создание чего-то, что превосходит PC Engine от NEC и Famicom от Nintendo.



Вскрываем ProLock: анализ действий операторов нового вымогателя по матрице MITRE ATT&CK

Время на прочтение6 мин
Количество просмотров2.5K


Успех атак вирусов-шифровальщиков на организации по всему миру побуждает все больше новых злоумышленников «вступить в игру». Один из таких новых игроков — группа, использующая шифровальщик ProLock. Он появился в марте 2020 года как преемник программы PwndLocker, которая начала работать с конца 2019 года. Атаки шифровальщика ProLock, прежде всего, нацелены на финансовые и медицинские организации, государственные учреждения и сектор розничной торговли. Недавно операторы ProLock успешно атаковали одного из крупнейших производителей банкоматов — компанию Diebold Nixdorf.

В этом посте Олег Скулкин, ведущий специалист Лаборатории компьютерной криминалистики Group-IB, рассказывает об основных тактиках, техниках и процедурах (TTPs), используемых операторами ProLock. В конце статьи — сопоставление с матрицей MITRE ATT&CK, публичной базой данных, в которой собраны тактики целевых атак, применяемые различными киберпреступными группами.
Читать дальше →

Рисуем речь: Software Automatic Mouth

Время на прочтение9 мин
Количество просмотров14K
Прошлогоднюю статью «Рисуем звук» я завершил признанием: «А можно ли нарисовать звук с чистого листа, не обводя спектрограмму аудиозаписи? Скажу честно, у меня не полу­чилось.» Но недавно я узнал про S.A.M. — выпущенный в 1982 г. компанией Don’t Ask Software, он стал первой коммерчески успешной программой для синтеза речи на ПК. В середине 2000-х немецкие демосценщики Tobias Korbmacher и Sebastian Macke взяли ассемблерный листинг S.A.M. для Commodore 64 и сконвертировали его в нечитаемый, но работоспособный код на Си; затем в 2014 г. британец Vidar Hokstad постарался привести код на Си в читаемый вид — вручную давая переменным осмыс­ленные названия и заменяя goto на циклы и ветвления; и наконец, в 2017 г. ещё один немец Christian Schiffler переписал код с Си на JavaScript. Испробовать его в действии как «чёрный ящик» можно на discordier.github.io/sam.

По-моему, примитивный синтезатор речи на JavaScript — самый удобный подопытный образец для тех, кто хочет разобраться, как в целом работает синтез речи. Мой форк S.A.M. с существенно почищенным кодом и комментариями доступен на github.com/tyomitch/sam. К сожалению, у предыдущих авторов интерес к S.A.M. успел угаснуть, и им сейчас не до разбора пулл-реквестов в хобби-проект многолетней давности.

S.A.M. состоит из четырёх функциональных компонентов:

  1. Reciter переводит текст на английском в фонемную запись: например, «A LITTLE TOO LOW» (пример из приложенной к S.A.M. демо-программы) превращается в «AH LIHTUL TUW5 LOW».
  2. Parser превращает фонемную запись в фонетическую: из «AH LIHTUL TUW5 LOW» получается "AH, ,L,IH,DX,AX,LX, ,T,*,*,UX,WX, ,L,OW,WX". Для каждого выводимого фона Parser задаёт также длительность и тон.
  3. Renderer строит по фонетической записи массив частот, амплитуд и прочих акустических характеристик;
  4. Последний, безымянный компонент (функция ProcessFrames) превращает массив частот и амплитуд в PCM-поток для аудиовывода.

В этой статье я разберу все четыре компонента по очереди.
Читать дальше →

Ближайшие события

Реверс-инжиниринг звукового усилителя популярной портативной консоли — обсуждаем основные находки

Время на прочтение3 мин
Количество просмотров4.7K
В начале мая на Hacker News опубликовали материал, автор которого провел reverse engineering усилителя звука, установленного в Nintendo Game Boy Color. Обсудим главное.

Ранее мы рассказывали о Sound Blaster 1.0 и карте для IBM PC — Innovation SSI-2001.

Читать дальше →

Прокачиваем беговую дорожку

Время на прочтение11 мин
Количество просмотров27K
Недавно я решился на очень странную для себя покупку. Да, я купил себе беговую дорожку.



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

Так я решил сделать что-то подобное и с беговой дорожкой: подключить её к смартфону или планшету, чтобы собирать и отображать статистику.

Книжная полка компьютерного криминалиста: 11 лучших книг по Digital Forensics, Incident Response и Malware Analysis

Время на прочтение6 мин
Количество просмотров75K


Хотите разобраться в компьютерной или мобильной криминалистике? Научиться реагированию на инциденты? Реверсу вредоносных программ? Проактивному поиску угроз (Threat Hunting)? Киберразведке? Подготовиться к собеседованию? В этой статье Игорь Михайлов, специалист Лаборатории компьютерной криминалистики Group-IB, собрал топ-11 книг по компьютерной криминалистике, расследованию инцидентов и реверсу вредоносных программ, которые помогут изучить опыт профессионалов, прокачать свои скиллы, получить более высокую должность или новую высокооплачиваемую работу.
Читать дальше →

Как разрабатываются моды для Unity-игр: пишем свой мод

Время на прочтение21 мин
Количество просмотров25K

В этой части на примере мода для Beat Saber мы рассмотрим общие принципы разработки модов для Unity-игр, узнаем, какие есть трудности, а также познакомимся с Harmony — библиотекой для модификации кода игр, которая используется в RimWorld, Battletech, Cities: Skylines и многих других играх.


Хоть эта статья и похожа на туториал, как написать свой мод для Beat Saber, ее цель — показать, какие принципы используются при создании любых пользовательских модов и какие проблемы приходится решать при разработке. Все, что здесь описано, с некоторыми оговорками применимо для всех Unity-игр как минимум в Windows.


Защита и взлом Xbox 360 (Часть 3)

Время на прочтение9 мин
Количество просмотров72K


В 2011 году, через 6 лет после выпуска игровой приставки Xbox 360, исследователями был обнаружен занимательный факт — если на вывод RESET центрального процессора на очень короткое время подать сигнал «0», процессор не сбросит своё состояние (как должно быть), но вместо этого изменит своё поведение! На основе этой «особенности» был разработан Reset Glitch Hack (RGH), с помощью которого удалось полностью скомпрометировать защиту Xbox 360, запустить неподписанный код, тем самым открыв путь к взлому самой системы и победе над «невзламываемыми» приводами DG-16D5S.

Давайте же рассмотрим в деталях, как работал RGH, как разработчики пытались залатать дыру и как эти заплатки смогли обойти!
Читать дальше →

Анализ кода демо Second Reality

Время на прочтение11 мин
Количество просмотров8.1K

23 июля 2013 года был опубликован исходный код демо Second Reality (1993 год). Как и многим, мне не терпелось взглянуть на внутренности демо, которое так вдохновляло нас на протяжении всех этих лет.

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

  • Командная работа.
  • Обфускация.

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

Часть 1: введение


Демо


Прежде чем приступать к коду, дам ссылку на захват легендарного демо в HD-видео (Майкла Хата). Сегодня это единственный способ полноценно оценить демо без графических глитчей (даже DOSBox не может правильно его запускать).

Взламываем Age of Empires III, чтобы изменить настройки качества шейдеров

Время на прочтение18 мин
Количество просмотров27K
Начало мая 2020 года — если вы похожи на меня, то карантин заставил вас перепройти заново игры, которые не запускали долгие годы.

А если вы ещё больше похожи на меня, то у вас где-то мог заваляться диск с Age of Empires 3. Возможно, вы играете на Mac, возможно, вы ещё не обновились до Catalina и желаете покомандовать Морганом Блеком.

Итак, вы запускаете игру, попадаете в главное меню, и сразу же замечаете — что-то не так… Меню выглядит отвратительно.


Если вам интересно что же именно «отвратительно», то обратите внимание на воду. Всё остальное тоже ужасно, но это менее очевидно.


Итак, вы заходите в опции, поднимаете все параметры до максимума… Но игра по-прежнему уродлива.

Вы замечаете, что опции "Shader Quality" подозрительно заблокированы на "Low".
Читать дальше →

Вклад авторов