На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> помогите раскрыть алгоритм , авторизация на удалённом устройстве через modbus? (АСУТП)
    Приветствую,

    Есть устройство с удалённым доступом через интернет. Клиентское приложение написано под Windows и позволяет мониторить текущие данные оборудования без возможности сохранения логов. Возникла идея написать свою утилитку, которая бы писала нужные логи. Заказать нужные изменения не представляется возможным (продавец оборудования отказывается это делать). Поэтому, как всегда, пытаемся разобраться своими силами.

    Итак, поснифив запросы/ответы удалось выяснить следующее:
    1. клиентское приложение всегда отправляет запрос размером в 16 байт
    2. в запросе клиента всегда меняются первые два байта и последние четыре, остальные данные статичны
    3. второй байт в запросе клиента всегда лежит в диапазоне 00 - 03 (hex)

    пример запроса:
    ExpandedWrap disabled
      xx xx 00 00 00 0A F7 43 00 64 00 56 xx xx xx xx


    где xx - меняющиеся значения.

    4. Если запрос верный, то устройство возвращает ~250 байт с данными.
    5. Благодаря наличию в ответе текста выяснилось, что ответ зашифрован каким-то странным алгоритмом: меняются местами последовательно 2-й и 4-й, 4-й и 6-й, 6 и 8-й байты и т.д. в последовательности. Например, текст asutp будет выглядеть так: a.uspt
    6. для работы в клиентском приложении необходимо ввести ip-адрес устройства и пароль (любая строка, требований и ограничений по длине нет). клиентское приложение пароль не отправляет (не похоже чтобы отправляло), а вот устройство отправляет пароль в ответе со смещением, как указано в п.5
    7. если длина запроса не 16 байт, то устройство ничего не отвечает.
    8. если длина запроса 16 байт, но он неверный, то устройство всегда в ответе возвращает 9 байт первые два из которых всегда равны первым двум из запроса, что очень похоже на crc. Остальные байты всегда одинаковы и не меняются, что позволяет сделать вывод что ответ содержит что-то типа "Ошибка авторизации".
    9. "Ошибку авторизации" мы получаем всегда при неверном пароле в клиентском приложении.
    10. первые 2 байта в запросе всегда дублируются и равны первым двум байтам в ответе.

    11. Разрыв соединения не требует повторной авторизации на устройстве. После успешной авторизации (когда указан правильный пароль) приложение открывает окно с текущими параметрами устройства. Если это окно не закрывать, то обновление данных производится всегда по клику на соответствующую кнопку в приложении. Таким образом, я сделал вывод о том, что нет никакой сессии и её срока действия между приложением и устройством. Вся соль только в первых 2-х и последних 4-х байтах запроса.

    Моя задача сгенерировать правильный запрос. Точно известно, клиентское приложение писал один программист. Не думаю, что он сильно заморачивался по поводу шифрования. Скорее всего, использовались известные алгоритмы CRC.
      Цитата bur80 @
      Заказать нужные изменения не представляется возможным (продавец оборудования отказывается это делать).

      А поделиться протоколом обмена он тоже отказывается?

      Цитата bur80 @
      Моя задача сгенерировать правильный запрос.

      Накапливайте массив данных запрос-ответ-отображение.

      Цитата bur80 @
      После успешной авторизации (когда указан правильный пароль) приложение открывает окно с текущими параметрами устройства.

      Авторизация - в приложении или на приборе?
        Цитата Akina @
        Цитата bur80 @
        Заказать нужные изменения не представляется возможным (продавец оборудования отказывается это делать).

        А поделиться протоколом обмена он тоже отказывается?

        Цитата bur80 @
        Моя задача сгенерировать правильный запрос.

        Накапливайте массив данных запрос-ответ-отображение.

        Цитата bur80 @
        После успешной авторизации (когда указан правильный пароль) приложение открывает окно с текущими параметрами устройства.

        Авторизация - в приложении или на приборе?

        1. Протокол обмена не доступен.
        2. Накапливаем. Что делать с накопленными данными?
        3. Приложение в запросе пароль не передаёт. Пароль передаёт в открытом виде прибор, в нем он в настройках прописывается. И, если пароль из приложения соответствует полученному из прибора, то приложение вроде как прошло авторизацию (если это можно так назвать) и дальше открывается окно с текущими данными прибора.

        Добавлено
        Есть предположение, что защита паролем нужна только для безопасности приложения, так как прибор успешно отдает данные приложению даже если приложение не обращалось к прибору несколько часов.
          Прочитал вопрос дважды. Прошелся поиском по странице. При чем тут modbus из заголовка сообщения? Вроде тут не тытруба, за лишние просмотры денег не платят...
            Цитата Dushevny @
            Прочитал вопрос дважды. Прошелся поиском по странице. При чем тут modbus из заголовка сообщения? Вроде тут не тытруба, за лишние просмотры денег не платят...

            В приложении есть такое диковенное слово. Я написал исходя из того, что это может как-то помочь.
              Цитата bur80 @
              Я написал исходя из того, что это может как-то помочь.
              Помочь что? Загуглить это слово, залезть хотя бы в википедию и сравнить за вас ваши посылки с описанием протокола modbus? Дык, "чтение документации из интернета вслух - 100 евро/час".
                Цитата bur80 @
                Что делать с накопленными данными?

                Анализировать, ясен пень. Искать соответствия между пакетом и дешифрованными данными. перестановку букв-то сыскали - вот и всё остальное так же.
                Сообщение отредактировано: Akina -
                  bur80
                  Из памяти программы данные вытаскивать не вариант?
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0283 ]   [ 15 queries used ]   [ Generated: 28.03.24, 21:23 GMT ]