Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Формирование собственного HEX intel файла
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
west329_
Целью задачи защитить прошивку, ход действий был следующий,
прошивка в виде HEX для контроллера атмега64 проходит через шифрующую случайно сгенерированною матрицу 255 байт. Для упрощения пока была взята матрица в 16 бит. Потом шьется через бутлоад а он выполняет обратное преобразование.

Но пока нам не удаётся выйти за пределы компьютера, программа которая должна отправляет HEX находит в нём ошибку.

Для этого на С была написана простенькая программа основываясь на студенческих лабораторках и конспектах для работы с файлом и строками.

Программа работает следующим образом,
-построчно считываю HEX файл,
-потом в считанной строке начиная с 9 бита считываю 32 ASCCI символа,
-объединяю и перевожу их в 16 бит масив
-прогоняю через матрицу.
-перевожу опять в ASCCI 32,
-запись новой строки на место старой.
-определение crc и запись на место последнего байта

Вопрос такой может существуют уже готовые модули для формирования НЕХ ? или более простой способ. Наставьте так сказать на правильный путь, если нету то будим разбираться с этой. Интересует мнение людей которые работали с подобными вещами.
msalov
Можно использовать утилиты hex2bin и bin2hex для преобразования в двоичный файл, а с двоичным уже можно делать любые преобразования
Я как-то в загрузчике делал шифрование при помощи RC4, если надо - могу поделиться.
AHTOXA
Цитата(west329_ @ Nov 17 2008, 14:39) *
-потом в считанной строке начиная с 9 бита считываю 32 ASCCI символа,


Там совершенно необязательно 32 символа. И не все строки являются кодом.

Вот примерчик чтения хекса и заливки его в еепром:
CODE
#define HEX_LINE_DATA (0x00)
#define HEX_LINE_END (0x01)
#define HEX_LINE_BAD (0xFF)


static struct ProgRecord
{
u08 count;
u08 kind;
u16 address;
u08 data[32];
}HexLine;

static u08 csum;

u08 h2b(u08 b )
{
return ((b <= '9') ? (b - '0') : (b - 0x37));
}

u08 read_hex(void)
{
u08 Hb, Lb;

Hb = rs_getchar();
Lb = rs_getchar();

Lb = (h2b(Hb) << 4) | h2b(Lb);
csum += Lb;
return(Lb);
}

u08 read_hex_line(void)
{
u08 i;

// hex line sample:
//:10007B00DFF6804288828C8387F009E0A3B5F036E7

// skip to the ':'
while (rs_getchar() != ':');

csum = 0;

// Number of Bytes.
HexLine.count = read_hex();

if (HexLine.count > 32) goto bad_len;

// Build address Information.
HexLine.address = (u16)read_hex() << 8;
HexLine.address |= read_hex();

// Get Type
HexLine.kind = read_hex();

// Extract the Data Bytes.
for (i = 0; i < HexLine.count; i++)
HexLine.data[i] = read_hex();

// don't forget about the Checksum u08.*/
read_hex();

if (csum) goto bad_cs;

return TRUE;

bad_len:
rs_puts_p("Bad length. Hit esc\r\n");
while (rs_getchar() != 27);
return FALSE;

bad_cs:
rs_puts_p("Bad csum. Hit esc\r\n");
while (rs_getchar() != 27);
return FALSE;
}


void programm_eeprom(void)
{
rs_puts_p("\r\nSend file!\r\n");
while (read_hex_line())
{
if (HexLine.kind == HEX_LINE_END)
{
rs_puts_p("Done!\r\n");
break;
}
if (HexLine.kind == HEX_LINE_DATA && HexLine.count > 0)
if (!at24c256_write(HexLine.address, (u08*)&HexLine.data, HexLine.count))
{
rs_puts_p("Write error\r\n");
break;
}
rs_putchar('.');
}
}
west329_
Цитата(gotty @ Nov 17 2008, 12:54) *
Можно использовать утилиты hex2bin и bin2hex для преобразования в двоичный файл, а с двоичным уже можно делать любые преобразования
Я как-то в загрузчике делал шифрование при помощи RC4, если надо - могу поделиться.

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

Интересует часть создания hex и опредиление CRC


Всем огромное спасибо, что откликнулись.
msalov
Цитата(west329_ @ Nov 17 2008, 11:55) *
Будем очень вам благодарны если поделитесь.

Интересует часть создания hex и опредиление CRC
Всем огромное спасибо, что откликнулись.

Тут я вас разочарую. Если для Вас парсинг hex-файла дремучий лес, обходной вариант я предложил в прошлом сообщении, а пример кода - AHTOXA.
Ну а код для шифрования/дешифрования прилагаю. Ограничения для него - длинна ключа 16 байт (сделано для замены операции "остаток от деления" на "побитовое И").
uriy
Цитата
Целью задачи защитить прошивку, ход действий был следующий, прошивка в виде HEX для контроллера атмега64 проходит через шифрующую случайно сгенерированною матрицу 255 байт. Для упрощения пока была взята матрица в 16 бит. Потом шьется через бутлоад а он выполняет обратное преобразование.
Это что вы, самого себя пытаетесь обмануть? Что мешает просто скопировать прошивку с вашего контроллера. http://www.semiresearch.com/
west329_
Цитата(uriy @ Nov 17 2008, 21:02) *
Это что вы, самого себя пытаетесь обмануть? Что мешает просто скопировать прошивку с вашего контроллера. http://www.semiresearch.com/


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

Кстати существую готовые решения для работы с хекс файлами
кому интересно <iHEX> слово для поиска
uriy
Цитата
каким образом если лок биты установлены ?
smile.gif Зря вы не посмотрели ссылку которую я вам дал. Там есть скриншоты вскрытых чипов китайцы по ним даже электрическую принципиальную схему восстанавливают. Стирать маркировку с корпуса тоже бесполезно. Она видимо у всех есть прямо на чипе. На том же сайте вроде продавался девайс за 12 килобаксов который считывает прошивку и с локбитами. На мой взгляд вскрытие чипа более правдоподобно чем существование такого девайса. Хотя кто знает...
west329_
Цитата(uriy @ Nov 18 2008, 22:43) *
smile.gif Зря вы не посмотрели ссылку которую я вам дал. Там есть скриншоты вскрытых чипов китайцы по ним даже электрическую принципиальную схему восстанавливают. Стирать маркировку с корпуса тоже бесполезно. Она видимо у всех есть прямо на чипе. На том же сайте вроде продавался девайс за 12 килобаксов который считывает прошивку и с локбитами. На мой взгляд вскрытие чипа более правдоподобно чем существование такого девайса. Хотя кто знает...


Ну тогда давайте не лочить контроллеры вобще smile.gif

uriy вы взрослый человек, а в сказки верите, спросите на форуме, хоть один пользователь пользовался такими услугами ?

ИМХО лохотрон, я непредставляю себе как такое можно сделать, да и с таким количеством контроллеров, это как минимум надо чтоб с каждой фирмы микрочип, атмел..., там было по пару первокласных инженеров со всеми закрытыми документациями. И оборудовани не на один 10К$
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.