Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Ковырялся тут по теме защиты от «тиражирования»

  1. #1
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,401

    По умолчанию Ковырялся тут по теме защиты от «тиражирования»

    Вроде были вопросы о том, как сделать программу работоспособной только на одном/нескольких контроллерах, то есть предотвратить её выполнение на других контроллерах той же модели с той же прошивкой. Консенсус был таков, что уникальных ключей у идентичных контроллеров нет, и нужно использовать внешний (аппаратный) ключ.

    Но кажется, у меня получилось организовать чисто программную проверку заводского MAC-адреса ПЛК серий 110 и 160. Вкратце: заводской MAC-адрес обнаружился по адресам 2069CD2E у ПЛК160 и 2060E5B0 у ПЛК110-32.

    Подробнее... Я поставил задачу найти заводской MAC-адрес в оперативной памяти ПЛК после того, как адрес в файле local_addres.dat был изменён (естественно, не натыкаясь на константы в своей же программе). На коленке был написан вот такой сканирующий память код:
    Код:
    VAR
    	i, g, c: DWORD;
    	go: BOOL;
    	mac0: ARRAY[0..5] OF BYTE;
    END_VAR
    VAR CONSTANT
    	MAC: ARRAY[0..5] OF BYTE := 16#6A, 16#77, 16#00, 16#00, 16#00, 16#F8;
    END_VAR
    
    IF go THEN
    	g := i + 2000;
    	FOR i := i TO g DO
    		SysMemCpy(ADR(mac0), i, SIZEOF(mac0));
    		go := NOT(mac0[0] = MAC[0] AND mac0[1] = MAC[1] AND mac0[5] = MAC[5] AND i <> ADR(MAC));
    		IF NOT go THEN
    			c := i;
    			i := i + 1;
    			EXIT;
    		END_IF
    	END_FOR
    END_IF
    В константах записан заводской адрес контроллера с изменёнными 4 и 5 байтами. Программа ищет совпадение в памяти по первому, второму и шестому байтам. Если при нахождении адреса мы наблюдаем в mac0 заводской адрес, и после перезагрузки результат получается тот же самый, то можно из своей программы удостоверяться в подлинности контроллера по этому адресу. Что-то вроде genuine := SysMemCmp(16#2060E5B0, ADR(MAC), SIZEOF(MAC)) = 0; Конечно, в боевой программе MAC-адрес лучше хранить не в открытом виде как показано выше, а хэшем константы с солью, чтобы исключить атаку тупой подменой байтов в бинарнике с пересчётом контрольной суммы. Обход такой защиты уже может оказаться нетривиальным и оттого нецелесообразным.

    Дальше исследовать способ предлагаю заинтересованным в защите лицам.

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,403

    По умолчанию

    У меня ПЛК160, версия прошивки 2.15.3
    Захват-1.png
    Ваша программа ничего не находит. Затыкается, причем на разных "i".
    Захват-2.png
    Захват-3.png
    Захват-4.png

    После чего происходит перезагрузка контроллера.
    Чтение по адресу 16#2069CD2E всегда дает 00:00:00:00:00:00
    26 лет деятельности в области промышленной безопасности

  3. #3
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,401

    По умолчанию

    Близко к началу берёте. Там, судя по всему, недопустимые диапазоны — у меня тоже крэшилось. Попробуйте от 16#20000000 до 16#20900000 просканировать. И не забудьте предварительно в local_addres.dat что-нибудь левое прописать и перезагрузиться, чтобы ложных совпадений в районе 20300000 не было. И прошивки у меня от 2011 года — там адреса другие, видимо.
    Последний раз редактировалось Yegor; 16.09.2015 в 14:27.

  4. #4
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,403

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Близко к началу берёте. Там, судя по всему, недопустимые диапазоны — у меня тоже крэшилось. Попробуйте от 16#20000000 до 16#20900000 просканировать. И не забудьте предварительно в local_addres.dat что-нибудь левое прописать и перезагрузиться, чтобы ложных совпадений в районе 20300000 не было. И прошивки у меня от 2011 года — там адреса другие, видимо.
    Получилось.
    Для версии прошивки 2.15.3 в ПЛК160 адрес заводского MAC обнаружился по адресу 16#2056E959.
    В local_addres.dat оригинальный МАС изменил, ПЛК перезагружал.
    Однако возникает вопрос, ведь ПЛК я перепрошил, а если при перепрошивке я бы указал другой МАС, отличный от заводского то, что бы я получил по адресу 16#2056E959? Оригинальный заводской или тот, что укажу при перепрошивке.
    Для справки МАС, указанный в local_addres.dat нашелся по адресу 16#203801A0
    26 лет деятельности в области промышленной безопасности

  5. #5
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,401

    По умолчанию

    Если перепрошивка меняет этот адрес, то тема объявляется закрытой

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,662

    По умолчанию

    мне кажется нужно искать тогда не мак адрес, а например серийник процессора, правда не представляю как узнать настоящий, не разглядывал разобранный плк
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,401

    По умолчанию

    Ну, метод можно обобщить и, вооружившись двумя-тремя одинаковыми ПЛК, искать хоть что-нибудь уникальное. Только для удобства надо будет снять как можно более полный дамп.

  8. #8

    По умолчанию

    Итак, товарищи пионеры.
    С одной стороны Вы копаете в верном направлении.
    С другой на другой версии ПЛК/ПО значение MAC будет в другом адресе. Т.ч. защита без модификации работает только на одной модели (включая модификацию) и одной версии прошивки.
    И наконец, зачем такие сложности, если можно просто почитать local_addres.dat?

    P.S. Серийника на этих процессорах нет
    P.P.S. Т.к. файл в открытом доступе - ломается на раз. Гораздо надёжнее читать файл с паролем изнутри запароленного ПЛК.
    Тролль-наседка, добрый, нежный и ласковый

  9. #9
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,633

    По умолчанию

    Все предлагают разные способы защиты, а где производители, почему молчат? Им ведь проще проработать данный вопрос.

  10. #10
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,401

    По умолчанию

    С другой на другой версии ПЛК/ПО значение MAC будет в другом адресе.
    Ну, предполагается, что заинтересованная в защите сторона найдёт время всякий раз отыскивать новый адрес.
    читать файл с паролем изнутри запароленного ПЛК
    А пароль спасёт от всяких plc_io и прочих поделок типа моего самопального шелла? Завтра попробую.

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. Вопросы по теме метрология и сертификация
    от Феоктистов М.В. в разделе Метрология сертификация
    Ответов: 124
    Последнее сообщение: 02.12.2019, 14:26
  2. Ответов: 0
    Последнее сообщение: 28.05.2015, 12:53
  3. Windows zver Извините, что не по теме
    от Vitamin в разделе Трёп (Курилка)
    Ответов: 26
    Последнее сообщение: 11.02.2015, 16:26
  4. Ответов: 3
    Последнее сообщение: 01.02.2012, 11:54
  5. P––2 — работа в режиме защиты от превышения темпе
    от Котельщик в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 03.02.2007, 12:37

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •