TOG 0 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба Друзья, программирую для МК STM32 и во все программы вставляется защита от клонирования (шифрование данных по UID). Сейчас настройка этой защиты делается вручную, что очень долго, а главное я постоянно косячу с ее настройкой и защита постоянно затирает что-то лишнее. В итоге отладка занимает по несколько дней. Я хотел бы сделать как-то так: В исходном тексте программы вставляю пору комментариев (PROTECT_BEGIN), (PROTECT_END) указывая между ними какие данные нужно шифровать. Потом перед компиляцией запускается моя прога, которая находит в исходниках данные, которые нужно шифровать и сама вставляет в исходник весь нужный код для работы защиты. Потом как обычно вызывается компилятор. // PROTECT_BEGIN uint8_t data1[] = {12, 13, 14, 15}; uint8_t data2[] = {16, 17, 18, 19}; ... uint8_t data99[] = {20, 21, 22, 23}; // PROTECT_END Подскажите, может есть уже какие-то заточенные под разбор текстов инструменты ? Пока, что я планирую на C это делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 17 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба А таких вставок (PROTECT_BEGIN/PROTECT_END) много или всего одна? Если всего одна, то может просто вынести данные между ними в отдельный файл и вместо них вставить #include этого файла. И вашему "шифровальшику" просто указывать путь к файлу с этими данными - тогда по коду ничего искать не придётся. Или сами данные изменять не нужно, просто добавить немого кода вместо PROTECT_BEGIN/PROTECT_END ? Тогда достаточно препроцессора, никакого стороннего самописного софта не потребуется. Можете написать, во что превращается (должен превратиться) ваш пример после обработки вашей программой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 226 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба Зашифровать данные в отдельный бинарный файл. Потом этот файл прилинковать к результирующему образу программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 1 hour ago, TOG said: Подскажите, может есть уже какие-то заточенные под разбор текстов инструменты ? Это можно делать ПОСЛЕ компиляции, прямо в HEX файле. В заранее известном месте. Для этого нужно размещать определенные переменные по фиксированным адресах. Разумеется, придется написать руками прогу, которая будет открывать готовый файл и там менять нужные поля. На чем угодно. Я делал некое консольное приложение, которое вызывалось автоматом после успешной сборки проекта, подхватывало только что созданных HEX, правило его, на выходе формировало соотв. файл с нужным мне шифрованием и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 226 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 3 минуты назад, Forger сказал: Разумеется, придется написать руками прогу, которая будет открывать готовый файл и там менять нужные поля. На чем угодно. Это может быть затруднительно, потому как шифрование может увеличить размер данных. Тот же AES. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 2 hours ago, TOG said: может есть уже какие-то заточенные под разбор текстов инструменты ? Таких программ 100500. Под любую систему. Хоть текст, хоть бинарный. Например sed Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 49 minutes ago, jcxz said: потому как шифрование может увеличить размер данных У меня шифрование не изменяло размера, т.к. сам размер не плавал и задавался строго фиксированного размера, который конечно можно было менять в параметрах командной строки программы. Равно как и ключ шифрования. Более того, у меня прошивка имела строго фиксированный размер, равный максимальному размеру флэшки мк. Точнее выходной файл под нее "подгонялся", а пустоты забивались мусором (даже область бутлодера), и уже после этого проводилось шифрование. В итоге понять что там где из выходного файла без поллитра ну никак. Что собственно мне и нужно было )) Бутлодер конечно знал где что читать и как декодировать и поэтому все понимал с полубайта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 166 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба Ждем поддержку директивы #embed в C23 и вставляем любые шифрованные бинарные данные прямо в исходник на Си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 21 minutes ago, Arlleex said: Ждем поддержку директивы #embed в C23 и вставляем любые шифрованные бинарные данные прямо в исходник на Си. Кто не ждёт - лет 15 используют bin2c и вставляют #include "..." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 226 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба В 31.08.2022 в 21:56, x893 сказал: Кто не ждёт - лет 15 используют bin2c и вставляют #include "..." А кто владеет тайным знанием работы с компоновщиком, тот и в bin2c не нуждается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 11 minutes ago, jcxz said: А кто владеет тайным знанием работы с компоновщиком, тот и в bin2c не нуждается. Конечно, но с bin2c каждая кухарка может. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 17 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба В 01.09.2022 в 01:34, Arlleex сказал: Ждем поддержку директивы #embed в C23 и вставляем любые шифрованные бинарные данные прямо в исходник на Си. А пока можно этим пользоваться: https://github.com/graphitemaster/incbin Один заголовочник, отдельного софта не требует, всё сделано на дефайнах и директиве .incbin ассемблера компилятора. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться