kiltum (kiltum) wrote,
kiltum
kiltum

  • Music:
aspax воспользовался старой идеей и решил дать объявление о работе в ru_root.

Сообщение выглядит очень страшным для незнающих.

9NLFwtXF1NPRIHJvb3Qg0yDHzNXCz8vJzSDazsHOycXNIExpbnV4LCDUxcjOz8zPx8nKIElu
dGVybmV0IMkg0M/Oyc3BzsnFzSBGcmVlQlNEIMkg1sXMxdrBLiDwz8zO2cog0sHCz97JyiDE
xc7YLiDyxdrAzcUg0yDVy8Hawc7Jxc0g1sXMwcXNz8og2i/QIC0gcGF4QHN3LnJ1Cg==

Однако те, кто является "ветераном IT-индустрии"©СтрашноСекретноеМесто™, сразу распознают в нем base64.

Скопируем страшный текст в файл message. И выполним страшную команду:
[multik@kicker multik]$ perl -MMIME::Base64 -ne 'print decode_base64($_)' <message > mes_dec

В итоге мы получим файл mes_dec, который и содержит объявление. Давайте, посмотрим, что в нем.
[multik@kicker multik]$ cat mes_dec
Требуется root с глубоким знанием Linux, технологий Internet и пониманием FreeBSD и железа. 
Полный рабочий день. Резюме с указанием желаемой з/п - pax@sw.ru
Все шикарно и замечательно. Однако я вначале лажанулся.


[multik@kicker multik]$ cat mes_dec
цЄцццццццц root ц цццццццц ццццццц Linux, цццццццццц Internet ц цццццццццц FreeBSD
 ц цццццц. ц°ццццц ццццццц цццц. ц_ццццц ц ццццццццц цццццццц ц/ц - pax@sw.ru
Фигня какая-то, да? Видны только слова Linux, Internet и FreeBSD. И всё.
[multik@kicker multik]$ file mes_dec
mes_dec: UTF-8 Unicode text
Ну, счас мы его раскодируем нафиг.
[multik@kicker multik]$ cat mes_dec | iconv -f utf8 -t koi8
iconv: illegal input sequence at position 0
Оп-п-па. Как это так? Вроде UTF-8 и в то же время нифига не UTF.

Это наверное, это всё тупой линукс. Открываем ворд, в нем выбираем "кодированный текст" и файл с сохраненным сообщением. Получаем:

ôÒÅÂÕÅÔÓÑ root Ó ÇÌÕÂÏËÉÍ ÚÎÁÎÉÅÍ Linux, ÔÅÈÎÏÌÏÇÉÊ Internet É ÐÏÎÉÍÁÎÉÅÍ FreeBSD É ÖÅÌÅÚÁ. ðÏÌÎÙÊ ÒÁÂÏÞÉÊ ÄÅÎØ. òÅÚÀÍÅ Ó ÕËÁÚÁÎÉÅÍ ÖÅÌÁÅÍÏÊ Ú/Ð - pax@sw.ru

Ой, и тут тоже нифего не понятно.

Давайте-ка разберемся, в чем причина.

Для начала закодируем слово привет в utf-8(ru) по версии iconv
00000000 D0 BF D1 80 D0 B8 D0 B2 D0 B5 D1 82
Попрыгав по инету, понимаем, что iconv полностью прав. Ибо в стандарте сказано про D0BF

D0BF CYRILLIC SMALL LETTER PE

или мелкая русская 'п'

А теперь посмотрим на первые байты того, что у нас в файле.
00000000 C3 B4 C3 92 C3 85 C3 82 C3 95 C3 85 C3 94 C3 93
Поищем, что же означает C3B4 в стандарте UTF-8:

C3B4 LATIN SMALL LETTER O WITH CIRCUMFLEX

Смотрим на то, что выдал ворд и понимаем, что первая буква - это оно и есть.

То есть это типа UTF-8, но с "свернутой" кодовой страницей.

Тут я плюнул и пообщался в аське с aspax, удивленный таким подходом к рекрутингу. Тут же стало понятно, что я лажанулся, но где и как ...

Почти тут же стало понятно, что такую мину мне подложил любимый многимиидиотамивысококлассными программерами Perl. Я просто выполнил команду в локали ru_RU.UTF-8. Кому охота, пните меня еще раз - я не люблю Perl. Очень. А я пошел дальше.

Мне просто стало интересно, как у меня русская буква 'Т' сменила свой код с 0xF4 на 0xC3B4. Если применить обычную таблицу перекодировки ASCII без знания русских букв, то получим 0xF4->0xC399; (там фиговинка такая ... эээ .. вычурная. Короче, половинка верхней части знака интеграла. Я чего-то не смог её суда скопировать)

Если подразумевать, что русский однобайтовый перекодируется в русский UTF-8, то должны получить 0xF4->0xD0A2

Смотрим дальше. Шаримся, шаримся и находим алгоритм перевода из UCS в UTF8.
If ud <128 (7F hex) then UTF-8 is 1 byte long, the value of ud.

If ud >=128 and <=2047 (7FF hex) then UTF-8 is 2 bytes long.
   byte 1 = 192 + (ud div 64)
   byte 2 = 128 + (ud mod 64)
....
Достаем калькулятор и начинаем.
0xF4->244
244 div 64 = 3. 3+192=195 -> 0xC3
244 mod 64 = 52. 128+52=180 -> 0xB4

Вот и получаем искомое 0xC3B4.

Вопрос: каким идиотом надо быть, что бы применить такой алгоритм в таком месте? Не, perl'у не место в нормальных системах. Лог там распарсить по колонками - самое оно. В остальном - давить, как пьяных тараканов о стенку ...
P.S.
[multik@kicker multik]$ set|grep LANG
LANG=ru_RU.UTF-8
[multik@kicker multik]$ cat /etc/asplinux-release
ASPLinux release 9 (Ural)

Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 22 comments