d7d1cd
Участник-
Постов
439 -
Зарегистрирован
-
Посещение
Весь контент d7d1cd
-
Хотя, наверное, то, что я предложил, не получится. Такой вывод делаю из того, что при проверке фьюза программатором, программа в микроконтроллере останавливается.
-
Или пишу в 200, читаю из 1100? Тогда все понятно. Спасибо большое!
-
На сколько я знаю, этого нельзя сделать непосредственно. Можно только соединить необходимое количество портов микроконтроллера с портом JTAG и выполнять проверку так, как это делает программатор (как описано в MSP430 Programming Via the JTAG Interface).
-
Приветствую всех. В даташите на микроконтроллер MSP430F47187 в разделе Memory organization я не совсем понял описание размера памяти RAM. Во первых указано, что всего памяти RAM (Total) 8KB 030FFh-01100h. Тут вроде все ясно: объем памяти 8 килобайт, расположена она по адресам от 1100h до 30FFh. Эта память делится на Extended (объем 6 килобайт, расположение 1900h-30FFh) и Mirrored (объем 2 килобайта, расположение 1100h-18FFh). Тут смутно понимаю. Вроде Extended - это расширенная память, Mirrored - отраженная. Но далее в таблице Memory organization есть еще одна область памяти. Называется RAM (mirrored at 018FFh-01100h), объем 2 килобайта, расположение 200h-9FFh. Как я понимаю, данные по адресам 200h-9FFh копируются (отражаются) соответственно по адресам 1100h-18FFh. Например, пишем байт по адресу 200h, записывается в 2 адреса: 200h и 1100h. Тогда непонятно что будет, если записать байт по адресу 1100h. Он отразится в 200h? Разъясните, пожалуйста...
-
Вы имеете ввиду определить из программы, которая выполняется в этом микроконтроллере?
-
Смотря для кого :) Тиражирование как раз приветствуется. Однако работа программы зависит от лицензии. Чтобы хоть как то защититься от взлома и обхода лицензии надо обфусцировать код для усложнения дизассеблинга.
-
Наверное ничем :). Просто я ничего не знаю об обфускаторах, а запутать код надо. Причем у меня особенность: мой проект написан на ассемблере (около 22000 строк). Поэтому мне нужен либо обфускатор для кода на ассемблере, либо обфускатор для скомпилированной программы (если такой существует).
-
Здравствуйте все! Уважаемые знатоки, подскажите, существует ли обфускатор кода для MSP430?
-
А зачем тогда устанавливаете бит разрешения прерывания на прием? У Вас бит разрешения прерывания на передачу устанавливается один раз (не в основном цикле). На сколько я помню, после выполнения прерывания (после отправки данных), данный бит сбрасывается. То есть, у вас через USART должен отправиться только 1 байт. Вы пишете, что выполняете перезапуск программы. Позвольте уточнить: перезапуск программы в ПК или в МК?
-
Где у вас происходит включение передатчика USART?
-
Я тоже использую программу этого производителя. Все отлично работает. Программатор MSP-FET430UIF.
-
Если такой покупатель найдется, то я думаю, что не буду ему отказывать. Вот только устроит ли его моя цена...
-
Аренда (даже бессрочная) подразумевает возврат устройства. Я не требую возвращать мне устройство. Хотя можно подумать и над этим, но только не требовать, а предлагать вернуть устройство, например за стоимость месяца лицензии.
-
В моей, как тут все выражаются, бизнесс-модели устройство бесплатное. Но оно предоставляется пользователю только при покупке лицензии минимум на месяц.
-
rx3apf, благодарю за поддержку :a14:
-
Начну с того, что изделие сделал я и, представьте себе, я буду диктовать свои условия вне зависимости от того нравится это Вам или нет, считаете Вы меня монополистом или не считаете. Это во-первых. Во вторых, от моего устройства не зависит жизнь и здоровье людей: не купил лицензию - не умрешь от этого. В третьих, нужны устройства или "на фиг не нужны" решать точно не Вам. И в четвертых, не надо брызгать слюной и отправлять меня куда-то "развлекаться". P. S. Следующий раз, когда будете проходить мимо этой темы, проходите мимо...
-
Ну а разве не удобнее задавать в лицензионном ключе время действия в сутках? С учетом того, что я планирую хранить время действия в 2-х байтах, то максимум - это 65535 суток или 179 с лишним лет. Более чем предостаточно! В этом случае нет никакой привязки к дате. Пользователь может купить код и сколь угодно долго не вводить его в прибор. При этом его срок действия не теряется. И это намного проще! При продаже устройства на него будет наносится начальный уникальный ключ (первое число из ПСП). Он и будет выполнять роль серийного номера. При запросе лицензионного ключа, пользователь будет сообщать этот номер (идентификация пользователя). Естественно, при этом надо хранить список всех серийных номеров и количество запросов. Эти данные надо сохранять в архиве на случай сбоя или умирания компа. Если быть вообще параноиком, то можно для каждого проданного устройства сгенерировать ПСП, распечатать ее и зачеркивать использованные коды. В общем, здесь полет фантазии может завести очень далеко.
-
Хорошо, хорошо. Ваша критика верна. В принципе, как я считаю, для этого и нужен форум, где можно изложить свои идеи или задать вопрос, а пользователи укажут тебе где ты не прав или подскажут что-то. У каждого устройства будет серийный номер. Следуя Вашим рекомендациям, я буду определять следующее случайное число для создания лицензионного ключа, по серийному номеру и номеру запроса. При этом все равно надо держать в своем компе список всех серийных номеров и сколько запросов от них было. Или я опять не прав?
-
В общем, как в той сказке: "думал, думал и наконец придумал". А точнее, наверное, решил делать следующим образом. Для каждого устройства будет задан начальный уникальный ключ. Назовем его пароль. С помощью этого пароля будет создан первый лицензионный ключ. При вводе этого ключа в устройство, последнее с помощью имеющегося пароля расшифрует лицензию и, посредством генератора псевдослучайных чисел, сгенерирует следующий пароль. Я, имея параметры генератора псевдослучайных чисел, знаю какой следующий пароль будет сгенерирован. При запросе второго лицензионного ключа я создаю его, используя этот следующий пароль. Пользователь вводит второй ключ в устройство, устройство производит расшифровку, генерирует следующий пароль и т. д. Таким образом, каждый новый лицензионный ключ будет создаваться используя новый пароль, что значительно повышает криптостойкость ключа, я так думаю... Кроме этого, пользователю не нужно передавать мне никаких данных. Теперь у меня следующая головоломка: каким способом, используя пароль от генератора псевдослучайных чисел, мне создавать лицензионный ключ?
-
Baser, у меня проект, где необходимо вычислять CRC, написан на ассемблере. Как я понимаю, это ничего не меняет и настройку линкера, в части вычисления CRC, нужно производить в xcl-файле? Если я все правильно понял, то подскажите, как настроить линкер так, чтобы он вычислял CRC по такому алгоритму: //****** ВЫЧИСЛЕНИЕ ЦИКЛИЧЕСКОГО ИЗБЫТОЧНОГО КОДА ПО ПОЛИНОМУ A001 ******************************************************************************** /* ПАРАМЕТРЫ: R13 - начальное значение ЦИК R14 - адрес начала обсчитываемого массива байт R15 - адрес конца обсчитываемого массива байт (байт по данному адресу не включается в расчет) ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ: R13 - вычисленное значение ЦИК */ CALCULATE_CRC16: // ГЛАВНЫЙ ЦИКЛ РАСЧЕТА ЦИК MOV.B @R14+, R12 ; Определяю очередной байт из массива данных XOR R12, R13 ; Инвертирую биты значения ЦИК по байту массива данных MOV #8, R12 ; Задаю счетчик битов CALCULATE_CRC16_ByteLoop: // ЦИКЛ ОБСЧЕТА БАЙТА CLRC ; Очищаю бит переноса RRC R13 ; Определяю значение очередного бита байта (сдвиг вправо) JNC CALCULATE_CRC16_ByteLoopExit ; Если бит равен 0, то перехожу к декременту счетчика битов XOR #0A001h, R13 ; ...иначе инвертирую биты значения ЦИК по полиному 0xA001 CALCULATE_CRC16_ByteLoopExit: // ПРОВЕРКА УСЛОВИЙ ВЫХОДА ИЗ ЦИКЛОВ DEC R12 ; Уменьшаю счетчик битов JNZ CALCULATE_CRC16_ByteLoop ; Если не все биты обсчитаны, то перехожу к очередному циклу обсчета байта CMP R15, R14 ; Если не весь массив данных обсчитан, то... JNC CALCULATE_CRC16 ; ...перехожу к очередному циклу определения байта массива RET ; Завершаю работу функции
-
У меня другой МК (семейства MSP430), поэтому я перешел несколько по иной ссылке и скачал пример. Там показано как происходит расчет циклического избыточного кода линкером, программно и аппаратно. Для рассчета программным методом есть 2 функции: табличный расчет (быстрый) и без использования таблицы. При запуске в симуляторе и вычислении ЦИК программным методом по табличному расчету, полученное значение совпадает с ЦИК, вычисленным линкером. Когда же ЦИК определяется без использования таблицы, то он не совпадает со значением, вычисленным линкером. Повторю свой вопрос: каким образом линкер вычисляет ЦИК? Кто-то может привести алгоритм вычисления ЦИК, чтобы результат совпадал со значением, которое вычисляет линкер?
-
Здравствуйте все. Мне необходимо, чтобы IAR вычислял циклический избыточный код данных во флеш памяти. И знать как он его вычисляет. Я зашел в опции проекта на вкладку Checksum. Вкладку заполнил так: установил галку Fill unused code memory, Fill pattern = 0xFF, установил галку Generate checksum, Size = 2 byte, Alignment = 2, установил радиокнопку Crc polynomial = 0xA001, Complement = As is, Bit order = MSB first, Init value = 0xFFFF, Checksum init size = 16-bit. При запуске в симуляторе я увидел, что мой код начинается с адреса 0x1102, а по адресу 0x1100 расположен вычисленный IAR-ом циклический избыточный код. Так же по MAP файлу я определил, что CRC вычисляется с адреса 0x1102 по адрес 0xFFFF (я так понимаю, включительно данные по эти адреса). В коде сразу происходит вычисление CRC той же области флешь памяти, что и при автоматическом вычислении линкером (то есть с 0x1102 по 0xFFFF). Вычисление происходит так: char *data = (char*)0x1102; // Адрес начала кода int size = 0xEEFE; // Размер кода int crc = 0xFFFF; // Начальное значение CRC while(size--) { crc ^= *data++; for(int i = 0; i < 8; i++) if(crc & 1) crc = (crc >> 1) ^ 0xA001; else crc = crc >> 1; } В результате CRC, который вычисляет линкер и CRC, вычисляемый моим кодом не совпадают. Я пробовал менять параметры Complement и Bit order, однако совпадения CRC так и не добился. Подскажите, каким образом линкер вычисляет CRC?
-
Разъема в устройстве нет. Сегодня было время подумать над моей задачей и я понял, что варианты, предложенные controller_m30 и slanted мне не подходят. По крайней мере без соответствующих доработок. Все дело в том, что система активации должна быть такой, что код активации должен подходить только к одному устройству и только один раз. У покупателя может быть несколько устройств и код активации должен быть индивидуальным и одноразовым для каждого устройства. Чтобы код активации был индивидуальным и одноразовым для каждого устройства, его необходимо шифровать каждый раз новым ключом. Получается, что этот ключ должно генерировать само устройство, а покупатель будет передавать его мне для генерации нового кода активации. Или можно сделать систему активации так, что новый ключ будет генерироваться по заранее известному алгоритму. При этом, из-за того, что начальное значение ключа в каждом устройстве индивидуально, следующий сгенерированный ключ в данном устройстве с большой долей вероятности не будет иметь такое же значение, как и в другом устройстве. Тем более у одного и того же покупателя. Теперь у меня вопросы: каким образом генерировать новый ключ, какой он должен быть длины и каким образом с помощью этого ключа шифровать код активации?
-
МК после сброса по WatchDog
d7d1cd ответил ListenReality тема в MSP430
Baser, Спасибо за ответ. Он, кстати, был Вашим 1000 по счету. Так что с юбилеем!