Ayao "Alqualos" Kuroyuki (ayao) wrote,
Ayao "Alqualos" Kuroyuki
ayao

Обновление "Дорог России" до версии 5.12

Я тут уже как-то писал про эпопею с обновлением карт "Дорог России" до версии 5.11.

Смысл обновления заключается в замене одного файла другим. Казалось бы. Но это только во времена MS-DOS 6.22 вам бы вручили файл с прилагающимся к нему README.TXT, в котором в двух строках было бы написано, куда вы его должны себе засунуть. Теперь всё "по-новому" - обновление берёт на себя "современная" графическая программа, которая, конечно же, идёт только под виндой, временные файлы (файл!) распаковывает исключительно в системный TEMP, ну и туда же делает резервную копию. А если у вас там для этого недостаточно места, или тем паче, если у вас не винда, а какой-нибудь Linux, к примеру, то такая сложная и высокотехнологичная операция как копирование файла из точки А в точку Б для вас, конечно же, недоступна.

Обновлялка, кстати, идёт под Wine, но устройств, куда надо копировать файл, не видит. Никакой опции типа "указать путь", разумеется, не предусмотрено. Таким образом, обновление доходит до распаковки временного файла, и дальше не идёт. Казалось бы, чего уж там, скопировать этот файл из TEMP ручками куда надо и всего делов-то. С картами 5.11 я так и делал.

С картами 5.12 опять "по-новому". Проделав привычную процедуру обновления, я обнаружил, что навигатор карты не видит. Несколько секунд тупого вглядывания в содержимое файла с картами, и я понял - внимание! - что все биты в файле инвертированы. То есть файл должен выглядеть вот так:
(версия 5.11)
00000000  00 00 00 00 00 00 00 00  00 00 0a 6c 00 00 01 00  |...........l....|
00000010  44 53 4b 49 4d 47 00 02  20 00 00 01 ff 03 00 00  |DSKIMG.. .......|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  10 d4 40 10 04 41 0d 04  41 d8 07 0a 15 06 21 01  |..@..A..A.....!.|
00000040  08 47 41 52 4d 49 4e 00  00 c4 ee f0 ee e3 e8 20  |.GARMIN........ |
00000050  d0 ee f1 f1 e8 e8 2e 20  d0 d4 2e 20 c2 00 01 20  |....... ... ... |
00000060  00 09 04 0b eb e5 f0 f1  e8 ff 20 35 2e 31 31 20  |.......... 5.11 |
00000070  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000080  20 20 20 00 00 00 00 00  00 00 00 00 00 00 00 00  |   .............|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

а выглядел вот так:
(версия 5.12)
00000000  ff ff ff ff ff ff ff ff  ff ff f3 93 ff ff fe ff  |................|
00000010  be ac b4 b6 b2 b8 ff fd  df ff ff fe dc fd ff ff  |................|
00000020  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000030  ef 2b bf ef fb be f2 fb  be 27 f8 f3 e2 f1 cc cb  |.+.......'......|
00000040  f7 b8 be ad b2 b6 b1 ff  ff 3b 11 0f 11 1c 17 df  |.........;......|
00000050  2f 11 0e 0e 17 17 d1 df  2f 2b d1 df 3d ff fe df  |/......./+..=...|
00000060  ff f6 fa 3d 6e 1a 0f 0e  17 00 df ca d1 ce cd df  |...=n...........|
00000070  df df df df df df df df  df df df df df df df df  |................|
00000080  df df df ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000090  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

Вы уже вылезли из-под стола? Нет? Я подожду.

Так вот, написав примитивную программу инвертирования разрядов, я прогнал через неё файл с картами, и засунул результат в навигатор, но он ему вновь не понравился. Пришлось снова глядеть на шестнадцатеричку:
 (версия 5.12 после инвертирования)
00000000  00 00 00 00 00 00 00 00  00 00 0c 6c 00 00 01 00  |...........l....|
00000010  41 53 4b 49 4d 47 00 02  20 00 00 01 23 02 00 00  |ASKIMG.. ...#...|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  10 d4 40 10 04 41 0d 04  41 d8 07 0c 1d 0e 33 34  |..@..A..A.....34|
00000040  08 47 41 52 4d 49 4e 00  00 c4 ee f0 ee e3 e8 20  |.GARMIN........ |
00000050  d0 ee f1 f1 e8 e8 2e 20  d0 d4 2e 20 c2 00 01 20  |....... ... ... |
00000060  00 09 05 c2 91 e5 f0 f1  e8 ff 20 35 2e 31 32 20  |.......... 5.12 |
00000070  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000080  20 20 20 00 00 00 00 00  00 00 00 00 00 00 00 00  |   .............|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

Надпись ASKIMG вместо DSKIMG мне не понравилась, и у меня возникла мысль, что неплохо бы букву A заменить на букву D. Столь идиотское действие должно было оказать должный эффект на столь идиотскую систему обновления. Но тут я здраво рассудил, что пора спать, а наутро зарядил обновление из-под винды, с огромным трудом наскребши нужное свободное пространство на системном диске. После обновления из-под винды всё заработало нормально. Тут я решил сравнить "официально" полученный файл с результатами инвертирования. Как я и подозревал, отличие было в одной этой злополучной букве! То есть если бы у меня было ещё немного времени, всё у меня прекрасно бы получилось.

Что это было? Защита от хакера-дурака? А зачем тогда лицензионный ключ? Для отвода глаз?

Вот так у нас теперь копируют файлы в XXI веке! Несколько мыслей, как эту систему можно было бы "улучшить":

1. Файл должен не распаковываться из дистрибутива, а скачиваться из Интернета. Без сжатия и возможности докачки, разумеется. Там ведь всего-то 600 МБ, что это по современным меркам, особенно для счастливых обладателей старых добрых dial-up модемов!
2. Надо инвертировать не каждый бит, а каждый второй, к примеру. То есть делать XOR по 0x55 или 0xAA. Это круче.
3. После инвертирования надо подправлять не только букву A в начале файла, но и какой-нибудь байт в конце - вдруг туда горе-хакер не додумается заглянуть? В середине не надо, а то сами запутаетесь потом, где подправлять.
4. Вообще, карты надо разбить на кучу файлов. Тогда их труднее будет выковыривать из TEMP. Разумеется, эти файлы должны быть жёстко между собой взаимосвязаны, так чтобы нельзя было обновить карту какой-нибудь Залупозадрипинской области, не обновляя остального.
5. TEMP нужно брать не системный, а тот, который на диске "C:" - тогда у меня, например, это вообще работать не будет, потому что диска "C:" по историческим причинам нет вообще.
6. И вообще, столь сложную операцию, как копирование файлов лучше доверить сервисным центрам! И снабдить их специальными приборами, без которых ничего не получится. Из экономических соображений приборы можно изготавливать из дешёвых пиписьников, на которые должно быть установлено специальное ПО.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments