Девушка с характером

Инвариант
Как утверждает еврейская пословица, "О гору не спотыкаются".

В поисках какого-либо приличного по размеру корпуса русского текста для теста, вспомнил про "Большой Энциклопедический Словарь" - порядка 25 мегабайт. Как водится, скачивал я его несколько раз из разных мест и по разным поводам, и первое, что попалось под руку, оказалось собственно словарем (в текстовом формате) с какой-то кривой оболочкой на Delphi - с большими кнопками.

Рука уже потянулась к F8 - отправить ее в Рай для программ, но зацепился взглядом за файлики в служебной директории:

       Directory of \data\page

      11.11.2012  00:41    <DIR>          .
      11.11.2012  00:41    <DIR>          ..
      03.02.2001  05:54            60 365 010.cd
      03.02.2001  05:55            99 827 020.cd
      03.02.2001  05:55           195 016 030.cd
      03.02.2001  05:55           126 023 040.cd
      03.02.2001  05:55           162 607 050.cd
      03.02.2001  05:55            10 905 060.cd
      03.02.2001  05:55            28 991 080.cd
      03.02.2001  05:55           166 215 090.cd
      03.02.2001  05:56           114 192 100.cd
      03.02.2001  05:56             1 572 110.cd
      03.02.2001  05:56           234 194 120.cd
      03.02.2001  05:56            70 085 130.cd
      03.02.2001  05:56           146 468 140.cd
      03.02.2001  05:56           259 866 150.cd
      03.02.2001  05:57           282 054 160.cd
      03.02.2001  05:57           657 258 170.cd
      03.02.2001  05:57           178 353 180.cd
      03.02.2001  05:57           341 580 190.cd
      03.02.2001  05:57           123 319 200.cd
      03.02.2001  05:58            98 588 210.cd
      03.02.2001  05:58            68 384 220.cd
      03.02.2001  05:58            43 643 230.cd
      03.02.2001  05:58            24 085 240.cd
      03.02.2001  05:58            44 130 250.cd
      03.02.2001  05:58            51 324 260.cd
      03.02.2001  05:59             6 727 270.cd
      03.02.2001  05:59            58 792 310.cd
      03.02.2001  05:59             5 671 320.cd
      03.02.2001  05:59            12 256 330.cd
      04.02.2001  07:52             2 607 sokr.cd
                30 File(s)      3 675 097 bytes
                2 Dir(s)  57 184 563 200 bytes free

Как оказалось, за расширением .cd прятался обычный запароленный ZIP.

И хотя все, что мне было нужно, я уже нашел, любопытство взяло вверх и я запустил программу подбора паролей к ZIP-архивам.

Когда быстренько прожевав короткие - до шести символов - пароли она всерьез задумалась над семибуквенными, я понял, что ребята постарались и перебор не поможет.

Ну, что ж. Схема шифрования ZIP общеизвестна, потрачу еще несколько минут и подсмотрю пароль в отладчике - судя по задумчивости программы при старте, именно в этот момент она и занимается распаковкой.

Для начала, выясняем, по какому смещению находится сам алго шифрования:

Загружаем программу в IDA и запускаем отладчик.

Гм. Опрометчиво. Возможно, отладчик IDA - наихудший выбор из возможных, но дело представлялось мне таким пустяковым, что я даже не задумался об ошибке.

Устанавливаем брэйк на том месте, где в криптомашину передается парольная фраза, запускаем программу и через несколько секунд наслаждаемся видом пароля в рамочке редактора: "123456789".

Чего, собственно, и следовало ожидать от Delphi-программеров.

Закрываю отладчик, захожу в директорию с запароленными файлами, запускаю Rar - Oops! - ошибка контрольной суммы.

Ввожу пароль еще раз, вдумчиво - ошибка контрольной суммы.

И тут меня клинит.

Старательно, одним пальцем, набиваю пароль в третий раз, дважды перечитываю и нажимаю <ENTER> - ошибка контрольной суммы!

Когнитивный диссонанс...

Моей уверенности в себе, в архиваторе Rar и в методах взлома паролей к программам на Delphi нанесен сокрушительный удар.

Поглядев, напоследок, с тоской на монитор со зловещей надписью: "Wrong password or data error.", отправляюсь пить чай.

Перерыв, как обычно, помогает.

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

Возвращаюсь к отладчику. Размер вычисляется строчкой ниже.

Невероятно!

Размер - двадцать (0x14).

Так, смотрим адрес в EAX - 00DD04CC. Бегом туда. Shit!

В действительности, полный двадцатисимвольный (за 100 лет не перебрать) пароль выглядит так: "12345678900987654321".

IDA просто обрезала его при показе под размер окошка тултипа. Засранка...

И я, как последний ламер, об это споткнулся...

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