Перейти к содержанию

bitstream -> netlist -> синтезируемый hdl

Предлагаю обсудить насколько актуальным и коммерчески применимым может быть возможность создания полноценно синтезируемого hdl только по прошивке fpga. Самое очевидное применение это модификация уже готовых closed source устройств. Подобный полностью автоматический инструментарий для virtex 5,6,7 неспешно разрабатывается для собственных (не напрямую коммерческих) целей, точные нетлисты и lut эквиваленты доступны уже достаточно давно. Дальнейшее развитие было бы значительно быстрее при каком либо коммерческом применении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
"точные нетлисты и lut эквиваленты доступны уже достаточно давно"
И где такое доступно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Maksim @ May 11 2018, 16:01) <{POST_SNAPBACK}>
"точные нетлисты и lut эквиваленты доступны уже достаточно давно"
И где такое доступно?

В моем инструментарии доступно, этого пока не достаточно для создания 100% эквивалентного и рабочего ncd (ncd, ngd и прочие xdm xdb тоже вскрыты и частично документированы). Насколько за пределами "теоретически пригодится за бесплатно" есть необходимость в этом вот и вопрос...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(efg @ May 11 2018, 15:11) <{POST_SNAPBACK}>
Предлагаю обсудить насколько актуальным и коммерчески применимым может быть возможность создания полноценно синтезируемого hdl только по прошивке fpga. Самое очевидное применение это модификация уже готовых closed source устройств. Подобный полностью автоматический инструментарий для virtex 5,6,7 неспешно разрабатывается для собственных (не напрямую коммерческих) целей, точные нетлисты и lut эквиваленты доступны уже достаточно давно. Дальнейшее развитие было бы значительно быстрее при каком либо коммерческом применении.
Если смотреть на обычные программы то дезассемблирование является аналогом предложенного к обсуждению.
Соответственно можно предположить что для восстановленноых HDL может быть такое же применение.
- Взлом чужих прошивок. (по хорошему должна быть поддержка внесения мелких изменений в исходный битстрим). HDL только для облегчения анализа.
- Анализ логики работы каких то интересных узлов. (важным является возможность восстанавливать стандартные высокоуровневые библиотечные модули а так же инструменты удобного объединения мелких кусков в нечто большее и осмысленное. Т.е. выделение модулей и иерархических частей.)
- Генерация кастомных прошивок для защиты своего проекта. Когда кодовые данные зашиваются прямо в битрим без раскладки. Аналог 1ого применения но для своей прошивки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Приветствую!

Цитата(MegaVolt @ May 11 2018, 16:27) <{POST_SNAPBACK}>
Если смотреть на обычные программы то дезассемблирование является аналогом предложенного к обсуждению.
Имхо - увы, результат синтеза RTL "немного" отличается от компиляции программы - и если по ассемблеру еще можно (но далеко не всегда) как-то востановить высокоуровневую структуру (довольно мал набор паттернов) - то из gate-level "поднять" наверх что то вменяемое наверно будет нельзя - уж больно сильно размазывается логика дизайна по гейтам.
А ковырять gate-level то еще удовольствие. Я как то пару раз занимался похожим 01.gif - да и то там был не чистый нетлист а результат после MAP - хоть часть структуры и имен оставалась.

Цитата(MegaVolt @ May 11 2018, 16:27) <{POST_SNAPBACK}>
Соответственно можно предположить что для восстановленноых HDL может быть такое же применение.
- Взлом чужих прошивок. (по хорошему должна быть поддержка внесения мелких изменений в исходный битстрим). HDL только для облегчения анализа.
Для сколь нибуть приличного дизайна время и cтоимость такого взлома будет просто нереальна.

Цитата(MegaVolt @ May 11 2018, 16:27) <{POST_SNAPBACK}>
- Анализ логики работы каких то интересных узлов. (важным является возможность восстанавливать стандартные высокоуровневые библиотечные модули а так же инструменты удобного объединения мелких кусков в нечто большее и осмысленное. Т.е. выделение модулей и иерархических частей.)
Иногда глядя на исходники RTL не понимаешь что и как должно работать.
Как представлю свой последний дизайн для Virtex7 в виде чистого gate-level и необходимость поменять там что-то - ужас - наверное сегодня ночью не засну.

Цитата(MegaVolt @ May 11 2018, 16:27) <{POST_SNAPBACK}>
- Генерация кастомных прошивок для защиты своего проекта. Когда кодовые данные зашиваются прямо в битрим без раскладки. Аналог 1ого применения но для своей прошивки.

Это можно и нужно закладывать на уровне дизайна и частично можно делать уже сейчас имеющимися средствами.

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я как то баловался тем, что по нетлисту восстанавливал функции, используя перл и библиотеку Verilog-perl. В принципе, ничего сложного здесь нет - из флопа записать конструкцию always, а из логики восстановить и записать assign-функцию. Используя десяток подобных шаблонов можно любой нетлист сконвертить. Конечно, результат будет то же что и обфусцированый верилог - разобраться что есть что, очень тяжело. С другой стороны, такой верилог гораздо информативнее и компактнее нетлиста: если кто то задался целью реверс инжиниринга, подобный конвертер будет крайне полезен. Но очень сомневаюсь что на этом можно заработать, скорее проблем наживете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо за ответы.
Поясню подробнее: я подразумеваю создание ncd (для ise) файла идентичного пршивке, значит bitgen из него создаст идентичный до каждого бита файл.
Редактировать нетлист врчную затруднительно поэтому нужны hdl файлы соотвествующие ему логичеки, схематически и по требуемым задержкам. Т.е при синтезе стандартными средствами ise будет получаться прошивка аналогичная оригинальной которую сразу можно использовать на реальном устройстве. Среди элементов автоматизировано можно распознать простые схемы понятного назначения, вероятные независимые блоки, кандидаты на известные ядра (частично распознавание уже реализовано). Кроме этого легко выделить части жестко привязанные к изначальному типу плис отдельно и остальную легко переносимую логику. Для реверс инженеринга (и не только) можно добавлять внутрь прошивки живого железа дополнительные блоки анализаторы и уже вручную разбираться как что работает на реальных примерах без необходимости разбираться в обфусцированых hdl кодах.
Далее названия с опечатками специально...
Цитата(MegaVolt @ May 11 2018, 16:27) <{POST_SNAPBACK}>
Если смотреть на обычные программы то дезассемблирование является аналогом предложенного к обсуждению.
Соответственно можно предположить что для восстановленноых HDL может быть такое же применение.
- Взлом чужих прошивок. (по хорошему должна быть поддержка внесения мелких изменений в исходный битстрим). HDL только для облегчения анализа.

Ближе к attach+debug а не просто дизассемблированию, а также аналог hex-rays (asm -> c). Любые изменения можно вносить стандартными средствами ise для v5,6,7 или даже перенести на другие плис. Я не ограничиваюсь xlinx, просто в данный момент для них уже многое сделано и сам ise хороший донор данных.
Цитата(MegaVolt @ May 11 2018, 16:27) <{POST_SNAPBACK}>
- Генерация кастомных прошивок для защиты своего проекта. Когда кодовые данные зашиваются прямо в битрим без раскладки. Аналог 1ого применения но для своей прошивки.

Цитата(RobFPGA @ May 11 2018, 17:30) <{POST_SNAPBACK}>
Это можно и нужно закладывать на уровне дизайна и частично можно делать уже сейчас имеющимися средствами.

Я не очень понял что имеется в виду и что не получится сделать сейчас в полностью своем проекте на ise/vivdo/quatus? Кстати паралельно с реверсным процессом по возможности делается нормальный процесс (p&r netlist)->verify->timing analyse->bitstream без использования ПО производителя, аналогично на v5,6,7
Цитата(RobFPGA @ May 11 2018, 17:30) <{POST_SNAPBACK}>
из gate-level "поднять" наверх что то вменяемое наверно будет нельзя - уж больно сильно размазывается логика дизайна по гейтам.
А ковырять gate-level то еще удовольствие.

Цитата(Shivers @ May 11 2018, 19:04) <{POST_SNAPBACK}>
Конечно, результат будет то же что и обфусцированый верилог - разобраться что есть что, очень тяжело. С другой стороны, такой верилог гораздо информативнее и компактнее нетлиста: если кто то задался целью реверс инжиниринга, подобный конвертер будет крайне полезен.

Вручную заниматься hdl эквивалентом gate-level я конечно не предлагаю, тем более просто в тексте без живого железа. С текстом можно работать в структурированном виде с кандидатами на блоки и ядра. Вариантов распознанных кандидатов будет сильно больше одного, особенно в ранних версиях, но в любом случае это лучше жуткого мяса из лутов и триггеров. Кандидат подразумевает полную синтезируемость и работоспособность проекта, соотвественно и возможность проверки на железе. Алгоритмы восстановления осмысленных блоков сами являются частью другого "материнского" проекта и втч. для их проработки и развития я ищу возможности коммерческого применения.

Высказывайте предложения какую прошивку от реального устройства разобрать и опубликовать здесь результаты
Пока только vitex lx 5 6 7, впринципе можно spatan6, kitex7,atix7. Само собой устройство не должно быть засекречено и прошивка (bin,bit,xsvf,mcs) не зашифрована и доступна автору предложения. Результаты не в ближайший месяц, я уже упоминал что много мелочей для полноценного ncd не готово, настройки от pci-e и gtx буду делать в последнюю очередь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я не очень понял что имеется в виду и что не получится сделать сейчас в полностью своем проекте на ise/vivdo/quatus?
Генерация некой пары прошивка - ключ. Т.е. некой аппаратой струтуры которую можно открыть только заданным ключём. Причём делать это без перераскладки.

 

Возможно это можно сделать и сейчас. Я могу не знать всех доступных тонкостей.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

...

Я не очень понял что имеется в виду и что не получится сделать сейчас в полностью своем проекте на ise/vivdo/quatus?

Я имел ввиду что генерация кастомной прошивки без полного P&R возможна уже имеющимися средствами

Например закладывая реализацию части логики в виде BRAM и затем обновление содержимого этой BRAM непосредственно в выходном нетлисте.

 

...

Кстати паралельно с реверсным процессом по возможности делается нормальный процесс (p&r netlist)->verify->timing analyse->bitstream без использования ПО производителя, аналогично на v5,6,7

...

А вот это (если я Вас правильно понял на счет P&R) как раз более перспективное направление - если сделаете P&R лучше чем родной то сам Xilinx его и купит :)

 

Успехов! Rob.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти