~ 22 Apr 2010, 03:02
Преди някоя и друга седмица открих един странен бъг в реализацията на WinRAR при ползване на кирилишки пароли (ако ползвате латиница/цифри/пунктоация може да спите спокойно). Цялото нещо се свежда до добре известната поговорка: "Това, че даден софтуер е писан от родолюбив руснак, не значи, че работи безпроблемно с кирилица" :)
Ето и малко подробности за бъга... вие знаехте ли, че може да ползвате пароли на кирилица (или на какъв-да-е друг не-latin език) за RAR-архиви? Е, аз не знаех, но рекох да проверя. Това се случва покрай доразработването на моя RAR-паролотрошач (който ускорих с 10-20% и прочее). За целите на теста, първо тръгнах от най-често ползваната RAR програма - WinRAR. Избрах си 5 файла и ги криптирах с паролата «България», при опция за криене на файловите имена. WinRAR прие паролата ми, след което архивчето се дешифрира успешно със същата парола (и неуспешно с произволна друга). Успешно се дешифрира и при използване на конзолната версия на програмката под cmd.exe прозорец.
Като стъпка две, прехвърлих тестовия RAR под Linux и тествах да го разшифровам там. Този път обаче, даде грешка и не поиска да се разархивира. Много странно — помислих си да не би нещо автора на `unrar' да си е оставил ръцете в кода за превръщането на стринговете към unicode... прекомпилирах програмката в debug и се зарових. За мое учудване, Fedora 11 конзолата прилично подаваше на програмата "utf-8" кодиран стринг, т.е. "България" се състоеше от 16 8-битови char-a + 1 терминиращ NUL. След което низът коректно се обръщаше до wchar_t. Всъщност, терминалната `unrar' програмка под Linux работеше съвсем коректно! Зарових се още малко в Windows-а, и открих, че в cmd.exe терминал, като въвеждам кирилица, всъщност излизат питанки. И всъщност, че въведената парола се интерпретира изцяло като питанки. Сиреч, "България" = "????????".
Къде се оказа проблемът? От настройките на Windows: Control Panel->Regional and Language options->"Language for Non-unicode programs". Като се сложи на "Bulgarian", всичко заспива.
И сега, вече сигурно сте се досетили какъв е бъга. Ако един неподозиращ човек, на който горната Windows настройка не е зададена на "Bulgarian" (както си е всъщност при default инсталация на Windows-а), то той може да си мисли, че въвежда супер здрава парола (например, "ХакерЩрасе"), а всъщност паролата на архива му ще бъде елементарно счупяемата "??????????"!
Тъжното в цялата история е, че в кода на unrar ясно се вижда старанието на руснака да поддържа всячески не-латински символи... и все пак програмата му не е unicode-safe.
Интерпретацията на кирилишката парола като питанки, и приемането й за валидна парола от страна на WinRAR, подсказва и друг, по-общ проблем, със сигурността на паролите: WinRAR би трябвало да засича такива "пословично слаби" пароли, и (поне) да предупреждава потребителя да се замисли за по-яка парола. Така, хващането на такива скрити проблеми ще става от само себе си.