aaarrr 68 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 2 minutes ago, Darth Vader said: Тогда можно определить функцию-пустышку. Чтобы все скомпилировалось и собралось. Оно и так "скомпилируется и соберется". Только работать не будет не на STM. 4 minutes ago, Darth Vader said: Вообще же подход странный: инициализация внутренних потрохов МК должна быть выполнена ДО начала работы с дисплеем. Зачем нужна настройка тактирования внутренностей МК в процессе работы - за гранью моего понимания. Где же она в процессе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 3 minutes ago, aaarrr said: Где же она в процессе? Из фразы "без этого библиотека не работает" я понял, что какая-то библиотечная функция вызывает её (функцию SPL, включающую тактирование шины). Если это не так, и всё собирается без этого - хорошо. Значит надо переписать функции выдачи команд/данных на дисплей под конкретный МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба Какая-то библиотечная функция проверяет наличие аппаратного модуля CRC, тактирование которого предварительно надо самостоятельно включить в RCC. Если модуля нет, то STemWin просто не будет работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 10 минут назад, aaarrr сказал: Какая-то библиотечная функция проверяет наличие аппаратного модуля CRC, тактирование которого предварительно надо самостоятельно включить в RCC. Если модуля нет, то STemWin просто не будет работать. Можно сделать его программную эмуляцию. Если имеется MPU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 1 minute ago, jcxz said: Можно сделать его программную эмуляцию. Если имеется MPU. Если бы я делал подобную защиту, то непременно предусмотрел бы такой вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 1 час назад, jcxz сказал: Можно сделать его программную эмуляцию. Если имеется MPU Это как? Само устройство эмулировать?, и каким образом здесь MPU? На сколь помню - это просто защитный механизм от доступа по заблокированным адресам... 2 часа назад, aaarrr сказал: Какая-то библиотечная функция проверяет наличие аппаратного модуля CRC Остается только найти какая и реверсить... ИМХО по-моему проще граф. движок свой написать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 9 minutes ago, mantech said: На сколь помню - это просто защитный механизм от доступа по заблокированным адресам... Испокон веков подобные механизмы можно было использовать для реализации виртуальной памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 10 минут назад, mantech сказал: Это как? Само устройство эмулировать?, и каким образом здесь MPU? На сколь помню - это просто защитный механизм от доступа по заблокированным адресам... Ну вот и поставить эту защиту на диапазон адресов регистров CRC-вычислителя. На чтение и запись. А в ISR fault-а MPU смотреть - какая команда вызвала fault? Если запись - что писала? В соответствии с записанным изменять режим вычисления CRC или производить операцию над данными (исходя из содержимого регистра CPU из которого должна была идти запись). А на чтение: если чтение регистра данных/результата - возвращать в нужный регистр CPU требуемое значение. Это если делать полную эмуляцию. Но можно сделать сокращённую эмуляцию - только нужных режимов вычислителя CRC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба А потом выяснится, что процедура проверки использует какую-нибудь недокументированную особенность модуля CRC, контролирует время выполнения или еще что-нибудь в этом роде. Да и вообще, так поступать как минимум нехорошо, а если продукт на продажу, так еще и ст.146 УК РФ (или аналогичная в другой юрисдикции) добавляется :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба Я думаю, что с CRC модулем STM32 там все хорошо сделано. Про него пишут: CRC computation done in 4 AHB clock cycles (HCLK) Запретить прерывания, послать в модуль случайные числа и проверить время выполнения по счётчику DWT никакой сложности не представляет. Перехватить с помощью MPU и вычислить программно времени не хватит. Так что, только грубый взлом слом, а это некрасиво Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 23 апреля, 2020 Опубликовано 23 апреля, 2020 (изменено) · Жалоба 4 часа назад, aaarrr сказал: А потом выяснится, что процедура проверки использует какую-нибудь недокументированную особенность модуля CRC Вполне возможно, почему-то выбрали для защиты именно это устройство, плюс стмовцы скорее всего "поделились" более расширенной докой на свое поделье и все в шляпе... Изменено 23 апреля, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 24 апреля, 2020 Опубликовано 24 апреля, 2020 · Жалоба 14 часов назад, Baser сказал: Я думаю, что с CRC модулем STM32 там все хорошо сделано. Про него пишут: CRC computation done in 4 AHB clock cycles (HCLK) Запретить прерывания, Запрещённые прерывания никак не влияют на генерацию MPU-fault-а. Только запрет fault-ов влияет. Но у M3/M4 есть привилегированный режим и юзер-режим, и (хотя я не уверен) вроде для юзер-мода можно запретить запрет fault-ов. Исходя из логики такое должно быть, хотя утверждать не буду. И не буду утверждать есть ли всё это в ядре 1986ВЕ9х. Цитата послать в модуль случайные числа и проверить время выполнения по счётчику DWT никакой сложности не представляет. Так же как никакой сложности не представляет закрыть и область DWT тем же самым MPU и точно так же сэмулировать и его. Цитата Перехватить с помощью MPU и вычислить программно времени не хватит. Почему? Откуда программа знает сколько времени занял расчёт, если и источники времени для неё перехвачены и сэмулированы? Да и не делает она этого всё время наверняка, а скорей всего только при старте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 24 апреля, 2020 Опубликовано 24 апреля, 2020 · Жалоба 2 часа назад, jcxz сказал: Да и не делает она этого всё время наверняка, а скорей всего только при старте. Это-то как раз проверить просто - после успешного инита на СТМ отключить все эти генераторы КС и посмотреть, будет виснуть или глючить - значит там проверок дофига, может в каждой более-менее сложной функции... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 24 апреля, 2020 Опубликовано 24 апреля, 2020 · Жалоба 8 часов назад, jcxz сказал: Так же как никакой сложности не представляет закрыть и область DWT тем же самым MPU и точно так же сэмулировать и его. Откуда программа знает сколько времени занял расчёт, если и источники времени для неё перехвачены и сэмулированы? Возможно вы и правы, и при наличии MPU все это можно сделать. Никогда не применял ни MPU, ни MMU, нет опыта. Но все это интересно только в академическом смысле, по причинам, озвученным мною ранее (есть пути проще с теми же последствиями и результатом). 5 часов назад, mantech сказал: Это-то как раз проверить просто - после успешного инита на СТМ отключить все эти генераторы КС и посмотреть, будет виснуть или глючить - значит там проверок дофига, может в каждой более-менее сложной функции... Это действительно попроще Если будет время, и не забуду - на неделе попробую. Правда я пока добрался только до запуска демок виджетов от Segger-а. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 24 апреля, 2020 Опубликовано 24 апреля, 2020 · Жалоба On 4/23/2020 at 3:57 PM, aaarrr said: Если бы я делал подобную защиту, то непременно предусмотрел бы такой вариант. Да ладно вам... Ну нельзя сделать такую защиту, чтоб человек, у которого есть полный доступ к процессору и капелька мозгов, не мог сломать. Сеггеры это хорошо понимают и особо не заморачивались. В общем, надоели мне местные теоретики - писатели эмуляторов непонятно чего. Взял с сайта ST бинарник с примером для F103, затолкал в гидру, чуток помедитировал... 080433dc 37 48 ldr r0,[FP_CTRL ] = e0002000 080433de 01 68 ldr r1,[r0,#0x0 ]=>DAT_e0002000 080433e0 49 08 lsr r1,r1,#0x1 080433e2 49 00 lsl r1,r1,#0x1 080433e4 01 60 str r1,[r0,#0x0 ]=>DAT_e0002000 080433e6 01 21 mov r1,#0x1 080433e8 35 48 ldr r0,[->Peripherals::CRC ] = 40023000 080433ea 81 60 str r1,[r0,#offset CRC.CRC.CR ] = null 080433ec 35 49 ldr r1,[DWORD_080434c4 ] = F407A5C2h 080433ee 01 60 str r1,[r0,#0x0 ]=>Peripherals::CRC = 080433f0 00 68 ldr r0,[r0,#0x0 ]=>Peripherals::CRC = 080433f2 35 49 ldr r1,[DWORD_080434c8 ] = B5E8B5CDh 080433f4 88 42 cmp r0,r1 080433f6 00 d0 beq LAB_080433fa LAB_080433f8 XREF[1]: 080433f8 (j) 080433f8 fe e7 b LAB_080433f8 Собственно, всё. С вероятностью 99% это единственное обращение к модулю во всей программе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться