• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как защитить свою разработку от копирования

=AK=

New member
Я был о Вас лучшего мнения, но Увы с вами беседу заканчиваю.
Отвечать вам на этом форуме не буду .
Этим вы меня крайне обяжете. Мне надоело реагировать на ваши бредовые возражения. Особенно по причине вашей паскудной привычки подтирать свои посты, когда до вас доходит, какой бред вы несли.
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
А при желании имя сервера легко "размазать" по коду защищенного ключа. К тому же читать время не обязательно с одного сервера.
Смысла нет в этом. Все выходы в интернет перехватываются на раз роутером и прописываются имена в файл hosts у него же. Всё. Теперь сервером времени будет роутер. Или любой комп в сети. И так надо проделать только при активации. Пират сделает легко 100500 рабочих копий чипа.
 

=AK=

New member
Смысла нет в этом. Все выходы в интернет перехватываются на раз роутером и прописываются имена в файл hosts у него же. Всё. Теперь сервером времени будет роутер. Или любой комп в сети. И так надо проделать только при активации. Пират сделает легко 100500 рабочих копий чипа.
Пират может сделать сколько угодно копий, но активировать устройство должен пользователь. Если пират будет продавать заранее активированную копию, это нетрудно обнаружить софтом, с которым устройство взаимодействует. Например, при активации в память прописывается не только время активации, но и имя пользователя и MAC адрес хоста.
 

AllXXX

New member
Здравствуйте.
Тоже немного был огорчен что нет защит от копирования, особенно после прочтения данной ветки форума (ID и MAC одинаковые).
Набросал небольшую программку
Код:
#include <ESP8266WiFi.h>
void setup() {
  Serial.begin(115200);
}
void loop() {
  Serial.println();

  Serial.print("Vcc: ");
  Serial.println(ESP.getVcc());

  Serial.print("Free Heap: ");
  Serial.println(ESP.getFreeHeap());

  Serial.print("Chip ID: ");
  Serial.println(ESP.getChipId());

  Serial.print("Core Version: ");
  Serial.println(ESP.getCoreVersion());

  Serial.print("Sdk Version: ");
  Serial.println(ESP.getSdkVersion());

  Serial.print("BootVersion: ");
  Serial.println(ESP.getBootVersion());

  Serial.print("Boot Mode: ");
  Serial.println(ESP.getBootMode());

  Serial.print("Cpu FreqMHz: ");
  Serial.println(ESP.getCpuFreqMHz());
 
  Serial.print("ESP8266 MAC: ");
  Serial.println(WiFi.macAddress());

  Serial.print("Flash ID: ");
  Serial.println(ESP.getFlashChipId());
  Serial.print("Flash Real Size: ");
  Serial.println(ESP.getFlashChipRealSize());
  Serial.print("Flash Size: ");
  Serial.println(ESP.getFlashChipSize());
  Serial.print("Flash Speed: ");
  Serial.println(ESP.getFlashChipSpeed());
  Serial.print("Flash Mode: ");
  Serial.println(ESP.getFlashChipMode());
  delay(5000);
}
и злил на две ESP-01(куплены на али одним заказом)
Vcc: 65535
Free Heap: 51432
Chip ID: 6841590
Core Version: 2_4_2
Sdk Version: 2.2.1(cfd48f3)
BootVersion: 5
Boot Mode: 0
Cpu FreqMHz: 80
ESP8266 MAC: 84:F3:EB:68:64:F6
Flash ID: 1335429
Flash Real Size: 1048576
Flash Size: 524288
Flash Speed: 40000000
Flash Mode: 0

Vcc: 65535
Free Heap: 50552
Chip ID: 6840270
Core Version: 2_4_2
Sdk Version: 2.2.1(cfd48f3)
BootVersion: 5
Boot Mode: 0
Cpu FreqMHz: 80
ESP8266 MAC: 84:F3:EB:68:5F:CE
Flash ID: 1335429
Flash Real Size: 1048576
Flash Size: 524288
Flash Speed: 40000000
Flash Mode: 0

проверьте свои быть может не все так печально.
 

AllXXX

New member
проблема в том что флешка внешняя и в ней нет защиты
поэтому берем сдуваем флешку и копируем из нее
на ESP8285 еще можно что-то придумать а на ESP8266 нечего ловить
можно лишь кодировать какие-то внешние интерфейсы
Да в общем то вопрос не в возможности скопировать.
А в привязке написанной программы к конкретному устройству без возможности клонировать.
Допустим делаем запрос ID (ESP.getChipId()) и сравниваем с сохраненным в программе, если не совпадают крутимся в цикле или ребут.
Конечно можно можно воспользоваться реверс инженерном, но думаю проще написать заново.
При использовании Многофункциональное устройство с памятью для совместной работы с процессором можно в нее записывать свой ID и его использовать для создания keygen и разблокирования программы скажем СМС или письмом с клюем.
 

Andrey

New member
Для совсем не понимающих объясняю:

Попробуйте прочитать адрес, к примеру 0x00000100. :)

Получите аппаратное прерывание “протектед”. Вот тоже самое поставлю на чтение области OTP, но вектор ошибки обращения по защищенному адресу впишу подстановку кода с вашим MAC к примеру в боот-лоадер...

Когда ваша вумная защита попытается считать MAC– то она его считает именно тот, который я ей дам из вашего модуля.
Т.е. даже смотреть что там написано у вас в прошивке не буду :p
И это не единственное автоматическое решение... Автоматическое, значит делается программой на автомате, при считывания исходной flash с вашего модуля и изготовления копии для дублей.
Замерять время исполнения команды через таймер. Если оно больше чем надо значт его перехватили. Главное чтобы разрешение таймера хватило.
 

Grem_line

New member
Считывается Flash и вперед - вписывается точка остановки по обращению к области MAC и отдаются значения, считанные с вашего модуля.
Это все легко обходится. Конечно, если я буду читать МАС адрес в лоб, например так:
int A = (*((volatile uint32_t *)0x3ff5a004));
Вы легко найдете эту точку и подмените на нужное значение. Ну а если усложнить задачу:
int A = (*((volatile uint32_t *)B));
Адрес регистра с МАС-адресом помещен в переменную B. Что найдет ваш анализатор?
Если нужный адрес я буду формировать в переменной B в несколько этапов, например, суммируя в ней числа? А если расставлю в программе еще десяток ложных изменений этой переменной?
Чтобы понять, где и как я читаю MAC-адрес, вам придется полностью дизассемблировать весь проект и понять, как он работает. А это нереально.
Так что на любую хитрую ж... найдется болт с левой резьбой :)
 

nikolz

Well-known member
предлагаю такой способ защиты
берем ESP8285
пишем в него прошивку
припаиваем разъем для датчиков
и заливаем эпоксидкой с черным красителем все,
кроме антенны и разъема
желающие могу попытаться вскрыть.
Желаю удачного вскрытия.
 

pvvx

Активный участник сообщества
предлагаю такой способ защиты
берем ESP8285
пишем в него прошивку
припаиваем разъем для датчиков
и заливаем эпоксидкой с черным красителем все,
кроме антенны и разъема
желающие могу попытаться вскрыть.
Желаю удачного вскрытия.
Скажите что она делает и через пару дней будет аналог.
 

Grem_line

New member
есть сомнение, что @Grem_line вас понял :)
А Вы не сомневайтесь, конечно понял :)
Только и от JTag существует защита. С его помощью вы найдете место обращения исполняющейся программы в тот момент, когда она будет это делать. Но она может проверять себя на взлом не только в начале работы, но и в процессе работы в определенных ситуациях, которых вы можете и не получить...
Зачем все это нужно? Поясню: Предположим, вы разработали некий уникальный алгоритм, реализующий особую функцию на стандартной железке. После этого вы еще многие годы доводили его до совершенства, и вот наконец получили уникальный прибор, не имеющий аналогов. Естественно, этот прибор будет стоить на порядок дороже той железки, на которой он сделан. Надеюсь, не надо пояснять, почему?
Естественно, у ваших конкурентов появляется желание производить этот прибор по себестоимости железа не вкладываясь в разработку и отладку софта. Вот для этого и разрабатываются всевозможные средства защиты.
 

nikolz

Well-known member
А Вы не сомневайтесь, конечно понял :)
Только и от JTag существует защита. С его помощью вы найдете место обращения исполняющейся программы в тот момент, когда она будет это делать. Но она может проверять себя на взлом не только в начале работы, но и в процессе работы в определенных ситуациях, которых вы можете и не получить...
Зачем все это нужно? Поясню: Предположим, вы разработали некий уникальный алгоритм, реализующий особую функцию на стандартной железке. После этого вы еще многие годы доводили его до совершенства, и вот наконец получили уникальный прибор, не имеющий аналогов. Естественно, этот прибор будет стоить на порядок дороже той железки, на которой он сделан. Надеюсь, не надо пояснять, почему?
Естественно, у ваших конкурентов появляется желание производить этот прибор по себестоимости железа не вкладываясь в разработку и отладку софта. Вот для этого и разрабатываются всевозможные средства защиты.
Мечтать не вредно, но бесполезно.
Приведите хотя бы один пример такого уникального алгоритма на который ушли годы и который умещается в таком железе .
 

Grem_line

New member
Скажите что она делает и через пару дней будет аналог.
Да вы, батенька, просто гений, как я посмотрю :)
Господь мир создавал целых шесть дней, а вы за пару дней управитесь?o_O
Мечтать не вредно, но бесполезно.
Приведите хотя бы один пример такого уникального алгоритма на который ушли годы и который умещается в таком железе .
Ну, в таком железе - не приведу (просто не знаю). А вот немного в другом железе - пожалуйста.
Система видеосчитывания CYCLOPS.
 

nikolz

Well-known member
Да вы, батенька, просто гений, как я посмотрю :)
Господь мир создавал целых шесть дней, а вы за пару дней управитесь?o_O

Ну, в таком железе - не приведу (просто не знаю). А вот немного в другом железе - пожалуйста.
Система видеосчитывания CYCLOPS.
Если возьмете железо на за 20 копеек то в нем есть средства защиты.
Вы же хотите взять железо за копейки и годами разрабатывать для него алгоритм.
Вы батенька не просто мечтатель, а мечтатель - утопист -провокатор.
 

Grem_line

New member
Вы батенька не просто мечтатель, а мечтатель - утопист -провокатор.
Может быть, Вы поясните свою мысль?
Может быть, я и мечтатель, но в первую очередь программист-практик. Я привел пример изделия, "железо" в котором стоит действительно копейки, а продается оно за тысячи $ по всему миру. В его разработке я сам принимал деятельное участие. И если бы не оригинальная защита, уж поверьте, оно было бы давным-давно скопировано. Жаль, что наши конкуренты не знали о вашем существовании, а то бы непременно обратились для разработки аналога :)
Всего-то что требуется - по изображению с видеокамеры определить, на какой номер выпал шарик на рулетке в реальном времени! Дня два, наверное?
 
Сверху Снизу