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

Обработка исходника программы перед компиляцией

Друзья,

программирую для МК 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 это делать.

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


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

А таких вставок (PROTECT_BEGIN/PROTECT_END) много или всего одна? Если всего одна, то может просто вынести данные между ними в отдельный файл и вместо них вставить #include этого файла. И вашему "шифровальшику" просто указывать путь к файлу с этими данными - тогда по коду ничего искать не придётся. Или сами данные изменять не нужно, просто добавить немого кода вместо PROTECT_BEGIN/PROTECT_END ? Тогда достаточно препроцессора, никакого стороннего самописного софта не потребуется. Можете написать, во что превращается (должен превратиться) ваш пример после обработки вашей программой?

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


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

Зашифровать данные в отдельный бинарный файл. Потом этот файл прилинковать к результирующему образу программы.

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


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

1 hour ago, TOG said:

Подскажите, может есть уже какие-то заточенные под разбор текстов инструменты ?

Это можно делать ПОСЛЕ компиляции, прямо в HEX файле. В заранее известном месте.

Для этого нужно размещать определенные переменные по фиксированным адресах.

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

Я делал некое консольное приложение, которое вызывалось автоматом после успешной сборки проекта, подхватывало только что созданных HEX, правило его, на выходе формировало соотв. файл с нужным мне шифрованием и т.п.

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


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

3 минуты назад, Forger сказал:

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

Это может быть затруднительно, потому как шифрование может увеличить размер данных. Тот же AES.

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


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

2 hours ago, TOG said:

может есть уже какие-то заточенные под разбор текстов инструменты ?

Таких программ 100500. Под любую систему.

Хоть текст, хоть бинарный.

Например sed

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


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

49 minutes ago, jcxz said:

потому как шифрование может увеличить размер данных

У меня шифрование не изменяло размера, т.к. сам размер не плавал и задавался строго фиксированного размера, который конечно можно было менять в параметрах командной строки программы. Равно как и ключ шифрования.

Более того, у меня прошивка имела строго фиксированный размер, равный максимальному размеру флэшки мк. Точнее выходной файл под нее "подгонялся", а пустоты забивались мусором (даже область бутлодера), и уже после этого проводилось шифрование.

В итоге понять что там где из выходного файла без поллитра ну никак. Что собственно мне и нужно было ))

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

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


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

Ждем поддержку директивы #embed в C23 и вставляем любые шифрованные бинарные данные прямо в исходник на Си.

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


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

21 minutes ago, Arlleex said:

Ждем поддержку директивы #embed в C23 и вставляем любые шифрованные бинарные данные прямо в исходник на Си.

Кто не ждёт - лет 15 используют bin2c и вставляют #include "..."

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


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

В 31.08.2022 в 21:56, x893 сказал:

Кто не ждёт - лет 15 используют bin2c и вставляют #include "..."

А кто владеет тайным знанием работы с компоновщиком, :secret: тот и в bin2c не нуждается.

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


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

11 minutes ago, jcxz said:

А кто владеет тайным знанием работы с компоновщиком, :secret: тот и в bin2c не нуждается.

Конечно, но с bin2c каждая кухарка может.

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


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

В 01.09.2022 в 01:34, Arlleex сказал:

Ждем поддержку директивы #embed в C23 и вставляем любые шифрованные бинарные данные прямо в исходник на Си.

А пока можно этим пользоваться: https://github.com/graphitemaster/incbin Один заголовочник, отдельного софта не требует, всё сделано на дефайнах и директиве .incbin ассемблера компилятора.

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


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

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

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

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

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

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

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

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

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

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