На основании проведенного анализа был сделан выовод,что одинаковые проекты с разными паролями имеют разницу в полях в 3-х зонах:
- по адресу 162h 163h разные сигнатуры, зависящие от некоторых параметров файла
- в конце файла 4 байта (видимо CRC\контрольная сумма)
- в конце файла есть поля группового пароля состоящие из :
- метки: Variable_Configuration;
- затем после метки заглушка ff ff ff ff;
- после этого следуют поля с значением (длина + 1) групповых паролей (в моем примере 0B=11, поэтому длина 10 символов);
- затем метка 01h, после этого следует зашифрованный пароль;
- паролей для других групп может быть больше, они разделены символом 01h (проверено для codesys 2.3);
- конец поля пароля помечается подписью cd cd cd cd cd cd cd cd;
Пример:
56 61 72 69 61 62 6c 65 5f 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 00 00 09 00 00 00 ff ff ff ff 00 00 0b 00 00 00 01 94 97 96 91 90 93 92 9d 9c 95 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 08 00 00 00 00 00 00 cd cd cd cd cd cd cd cd
Где: 0b - длинна пароля 01 - метка начала пароля 94 97 96 91 90 93 92 9d 9c 95 - пароль в закодированом формате
Кодирование пароля заключается в проведении операции XOR A5h на шестнадцатиричном значении символа ASCII. Соответсвенно для декодирования необходимо провести XOR на каждом байте пароля, для получения его кода в таблице ASCII
Данный скрипт позволяет извлечь пароли для всех групп непосредствено из файла проекта .pro