Jump to content

    
Sign in to follow this  
TOG

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

Recommended Posts

Друзья,

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

Share this post


Link to post
Share on other sites
1 hour ago, TOG said:

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

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

1 hour ago, TOG said:

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
5 hours ago, haker_fox said:

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

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

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

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

Share this post


Link to post
Share on other sites
6 часов назад, TOG сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 hour ago, jcxz said:

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

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

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

 

1 hour ago, jcxz said:

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

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

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

Share this post


Link to post
Share on other sites
19 минут назад, TOG сказал:

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

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

Share this post


Link to post
Share on other sites
17 минут назад, TOG сказал:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
1 minute ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites
4 минуты назад, TOG сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this