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

Есть ли коммерческие продукты для защиты памяти программ от анализа

Друзья,

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

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


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

1 hour ago, TOG said:

Есть ли средства для защиты от дизассемблирования памяти программ ?

А зачем? Они сольют вашу прошивку и зальют её миллионным тиражом. Никто даже не будет разбираться в вашем коде.

1 hour ago, TOG said:

превращающая машинный код в адское месиво не пригодное для анализа.

Я вот иногда почитываю новости, и всё больше убеждаюсь в древней мудрости: "что один человек построил, другой сможет сломать" (там, правда, про крепость говорилось).

Я думаю, что единственные способы защитить своё устройство, это:

1. Быть всегда на шаг впереди тех, кто вас догоняет. Т.е. выпускать постоянно развивающуюся продукцию. Это сложно.

2. Выпускать оборудование, которое просто так, если даже и скопируешь, не продашь: медицина, энергетика, нефть.

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

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


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

5 hours ago, haker_fox said:

Они сольют вашу прошивку и зальют её миллионным тиражом.

Современные МК и ПЛМ, как правило, имеют уникальный номер "serial number".

Были ли прецеденты копирования таких чипов большими тиражами, так что-бы у всей партии был одинаковый SN?

Насколько такое возможно/сложно?

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


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

4 minutes ago, zombi said:

Насколько такое возможно/сложно?

Не знаю, слышал звон, да не знаю, где он) Но копируют же)

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


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

6 часов назад, TOG сказал:

Есть ли средства для защиты от дизассемблирования памяти программ ?
Вот для windows, была (или есть) такая штука ExeCryptor, превращающая машинный код в адское месиво не пригодное для анализа. 

Каким образом Вы это себе представляете?

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

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


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

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

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


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

1 hour ago, jcxz said:

Каким образом Вы это себе представляете?

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

да, но этот код будет невозможно анализировать , я уж не говорю про его декомпиляцию в нечто си-подобное. Насколько я помню Exe-cryptor перемешивает машинный код с "мусорным" кодом, заменяет стандартные конструкции создаваемые компилятором на свои (очень сильно замороченные). И если в таком коде будет проверка серийного номера микроконтроллера, то ее найти будет очень не просто.

 

1 hour ago, jcxz said:

Каким образом Вы это себе представляете?

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

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

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


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

19 минут назад, TOG сказал:

И если в таком коде будет проверка серийного номера микроконтроллера, то ее найти будет очень не просто.

Ничего подобного: Ставим бряк на чтение области памяти с серийником (или делаем аналогичное через MPU) и дальше трассируем.

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


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

17 минут назад, TOG сказал:

да, но этот код будет невозможно анализировать , я уж не говорю про его декомпиляцию в нечто си-подобное. Насколько я помню Exe-cryptor перемешивает машинный код с "мусорным" кодом, заменяет стандартные конструкции создаваемые компилятором на свои (очень сильно замороченные). И если в таком коде будет проверка серийного номера микроконтроллера, то ее найти будет очень не просто.

Это даёт очень большой оверхед, при этом на МК при наличии аппаратных средств отладки и эмуляторов есть возможность разобрать программу по байтику. В то время как во всех средствах типа ExeCryptor есть средства антиотладки и т.п., рассчитанные на работу под ОС. Поэтому этот путь в контексте МК на мой взгляд тупиковый, т.к. защищает только от совсем ленивых. Если уж на то пошло, то можно рассовать обфусцированные проверки серийного номера и контрольных сумм по коду, причём с разными периодами проверки, чтобы не всё сразу срабатывало. Но это не панацея.

19 минут назад, TOG сказал:

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

Сообразят, только это всё равно не поможет, т.к. декаппинг и т.п. предварительные процедуры перед инструментальным исследованием без отключения питания провести затруднительно.

1 минуту назад, jcxz сказал:

Ничего подобного: Ставим бряк на чтение области памяти с серийником (или делаем аналогичное через MPU) и дальше трассируем.

Саму процедуру чтения можно сделать не за один заход, а сильно замешанной в коде и т.п. Но, как я уже сказал, это не панацея, а защита от ленивых. ;-)

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


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

1 minute ago, jcxz said:

Ничего подобного: Ставим бряк на чтение области памяти с серийником (или делаем аналогичное через MPU) и дальше трассируем.

Верно, но трассировать в мусорном коде это тот еще гемор.

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


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

4 минуты назад, TOG сказал:

Верно, но трассировать в мусорном коде это тот еще гемор.

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

Как уже тут уже сказали - против трудолюбивой пчёлки китайсы это не панацея.

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


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

общего решения нет, но частных полно

для большинства контроллеров работающих из внешней памяти есть (как уже отмечалось) механизмы защиты - в NXP. например, называется HAB (high assurance boot) - это декриптор от производителя в ПЗУ чипа,

ключ прошивается во внутренней памяти (часто это ОТР - одноразовая ПЗУшка, размером в сотни байт) - после этого грузится криптованная программа, то есть ее не просто трудно разбирать, а вообще ничего не понятно. и так же в контроллер нельзя залить "шпионскую" программу без ключа. также средства отладки JTAG/дебагер отключаются.

есть режимы декриптования "на лету" - то есть не надо всю программу копировать во внутреннюю память, а уже готово "ис коропки" исполнение криптованой программы

btw: в "больших" АРМ-ах есть режим TRUSTZONE, который вообще позволяет чужие программы грузить и исполнять так, что ничего секретного они не могут считать (это программная модель - то есть в добавку к юзеру, суперюзеру) но я ни разу не видел полного описания имплементаций этого трастзона - видимо только проверенным пользователям под большое NDA дают

-----------------------------

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

-----------------------------

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

 

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...