Для начала надо понять какие цели ставятся: 1) защитить от копирования не-профессионалами;
2) защитить от создания функционального аналога профессионалами;
3) защитить от создания копии (имитации оригинального изделия, внешне трудноотличимой) профессионалами;
4) скрыть принципы работы прибора.
Заливание чем-то платы вообще наверное не поможет, спиливание маркировки -- только от пункта 1 разве что и иногда 3. Лучше вместо заливания "какой-то дрянью" (которая окажется гигроскопичной, содержит кислоты, может стать электропроводной, в любом случае влияет на диэлектрическую проницаемость и ёмкость, препятствует отводу тепла...) лучше покрыть плату каким-либо составом защищающим от влаги, но не сильно препятствующим ремонту.
Вопрос есть ли в приборе что-то, что способно хранить логику работы прибора и при этом недоступно для чтения? Например тот же микроконтроллер. Если нет, то наверное и не стоит пытаться. Те же логические ИМС вполне угадываются, как и многое другое. Может скопировать и не удастся, но принцип работы вскроется и можно сделать приблизительный или даже визуально малоотличимый аналог.
Что может защищать микроконтроллер. Во-первых само программное обеспечение -- работа по его созданию достаточно трудоёмка попросту, и чем больше по объёму ПО, тем меньше смысла что-то копировать. Попросту разработка с нуля становится сопоставима в финансовом плане.
Во-вторых ПО может реализовывать какие-либо неочевидные алгоритмы обработки сигналов, например, без знания которых невозможно понять принцип работы прибора. Может быть в связи с этим какие-то очевидные вещи, тривиально выполняемые схемотехнически, стоит переложить на МК, чтоб они стали не видны.
В третьих, если речь, например, о том, что копированием прибора занимаются люди занимающиеся его же и производством, в рабочее время, то очевидно стоило бы разнести программирование микроконтроллера и собственно производство. Более того, наличие в электронной схеме какого-либо компонента с уникальным идентификатором (есть, например, микросхемы "ПЗУ" содержащие уникальный MAC-адрес и больше ничего -- для сетевых карт, есть МК со встроенным уникальным номером) -- большой плюс. Можно предусмотреть, что каждая прошивка будет уникальной и расчитанной на этот уникальный номер. Таким образом можно не допустить производство и программирование "левых" копий приборов на том же производстве. Конечно прошивка может быть дизассемблирована и проверка номера отключена. Тут могут быть разные методы борьбы -- и отложенная валидация целостности, и бутлоадер, который принимает прошивку и дешифрует при уже включенных битах защиты, на электрониксе был топик:
https://electronix …index.php/t111466.html Но в общем случае без поддержки криптографии в МК (а сейчас таких МК просто нет, а не про AES, а про валидацию прошивки) украсть прошивку можно, если есть доступ к изначальному бутлоадеру, к его коду или хексу.
Наконец программа МК может защищать от "подделки" электронной схемы храня в программной памяти, или в EEPROM, некоторые параметры цепей, которые может измерить микроконтроллер. Сопротивление или ёмкость, или напряжение. Например, прошивки аонов "Русь" так защищались от копирования (были привязаны к параметрам телефонной трубки, которые были разные). Конечно профессионалы могут всё промерить и разобраться, что вот тут конденсатор не простой, а NP0 (а у простого будет ёмкость гулять -- подделка), но уже лучше чем ничего. Актуально когда прошивку не защитить от копирования или считывания. Для тех же целей можно использовать "недопрограммированные" ПЗУ с плавающими битами. Тоже в АОНах использовалось. Не знаю, выпускаются ли сейчас такие микросхемы памяти, которые можно недопрограммировать или недостереть и считывание будет через раз. Да и ненадёжно, нет гарантии, что будет работать через год. А аналоговые элементы со стабильными характеристиками (тот же конденсатор) можно использовать в такой роли. Но люди на производстве эти ньюансы могут как раз понимать, им же схемы и спецификации даны.
Сама прошивка может быть защищена от дизассемблирования, ну здесь целая история. По крайней мере я вижу два пути: либо ручное программирование на ассемблере (подходит для малых МК), в основном для CISC-процессоров подходит, что можно сбить автоматический дизассемблер "пересекающимися" инструкциями, при работе из ОЗУ -- самомодифицирующимся кодом, использованием динамически вычисляемых указателей функций. Привязкой к времени исполнения (чтоб по шагам не раскодировали), взаимодействием с периферийными модулями (например DMA) привязанными тоже к времени. Можно просто перемешать набор осмысленных команд с неосмысленным кодом, но это запутывает скорей человека, а IDA размотать структуру кода сможет.
Для больших МК порядочно усложнить работу может использование какого-либо интерпретатора ЯВУ, байткода, наконец использование симулятора другого процессора (правда для последнего может найтись поддержка в IDA). А дизассемблировать байткод какой-то там версии lua, например -- готовых средств нет, а даже если и дизассемблируешь, то до понимания программы там очень далеко.