Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет redrat ([info]redrat)
@ 2008-09-20 03:20:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Не подумайте, что я сошёл с ума...
Просто иногда мне хочется странного. Например, потратить несколько часов своей единственной, и оттого бесценной жизни, на разгадку какой-нибудь совершенно бесполезной пустяковины. А если к этому добавить мой патологический перфекционизм (начав дело, я уже не могу его бросить, пока не доведу до конца), то становится понятным, почему зачастую единственным результатом этого процесса оказывается только тренировка ума, без какой-либо практической пользы.

Ну вот, отмазку я придумал, теперь можно переходить к практическим результатам. ;-)

Уже довольно долго я пользуюсь наборами кодеков от K-Lite (чего, кстати, и вам советую). Однажды в процессе вивисекции Виндов мне понадобилось выяснить, какие ключи реестра прописывет WMlite при установке, однако хитрые разработчики не захотели делиться этой информацией с миром, и потому защитили свой дистрибутив паролем. Вот тут-то меня и клинануло...

В общем, представляю вам один из методов взлома защищённых паролем дистрибутивов Inno Setup.

1. Для начала нам понадобятся три вещи: распаковщик innounp (берём тут), декомпилятор ROPS (берём там же), и собственно сам дистрибутив (в нашем случае - wmlite240.exe). Сразу хочу пояснить, что после наездов одной очень мелкомягкой фирмы дистрибутив wmlite был убран с официального сайта, так что если захотите повторить мои исследования - ищите его в Сети, и да обрящите!

2. Натравив innounp на дистрибутив сразу же выясняем, что все файлы в нём защищены паролем, и следовательно - не могут быть извлечены. Но здравый смысл нам подсказывает, что пароль должен храниться где-то внутри дистрибутива! Что ж, беглый взгляд на документацию подсказывает, что у innounp есть нужный нам ключик "-m", который позволяет извлекать "internal embedded files". Проверяем:

D:\Work>innounp.exe -v -m wmlite240.exe
; Version detected: 5102
Size        Time              Filename
--------------------------------------
    221184  2002.08.29 03:41  {sys}\msadds32.ax
    278559  2003.11.20 22:48  {sys}\wmv8ds32.ax
    258048  2003.11.20 22:50  {sys}\wmvds32.ax
         <...>
      2184  2008.09.20 01:16  embedded\InfoBefore.rtf
     14139  2008.09.20 01:16  embedded\CompiledCode.bin
     52574  2008.09.20 01:16  embedded\WizardImage.bmp
      4158  2008.09.20 01:16  embedded\WizardSmallImage.bmp
       223  2008.09.20 01:16  embedded\en.isl
     15622  2008.09.20 01:16  install_script.iss
--------------------------------------
Очевидно, что единственным подходящим кандидатом на роль хранителя пароля является скрипт установки CompiledCode.bin, вот его-то мы и вытащим из дистрибутива (по очевидным причинам он не запаролен).

D:\Work>innounp.exe -x -m wmlite240.exe embedded\CompiledCode.bin
3. Вдумчивое разглядывание содержимого файла CompiledCode.bin приводит нас к мысли, что найти пароль в этой мешанине символов будет довольно затруднительно. Самое время воспользоваться второй утилиткой - декомпилятором установочных скриптов Inno Setup.

D:\Work>disasm CompiledCode.bin CompiledCode.txt
Вот, теперь стало немного понятнее! Совсем немного... Где-то внутри полусотни килобайт этого текста прячется пароль, но где именно? Тут есть два пути: честный и быстрый. Честный - это сесть и внимательно просмотреть весь исходник скрипта, прокручивая в голове логику его работы и пытаясь найти функцию, которая отвечает за подстановку пароля. Но мы пойдём другим путём™!

4. Где-то на просторах Интернета я отыскал пароль к старому дистрибутиву K-Lite версии 2.70, теперь оставалось только найти сам этот дистрибутив (eMule рулит!) и применить к нему три вышеописанные операции.

Не буду вас томить: нужная нам функция называется CURPAGECHANGED. Конечно, она делает много разных вещей, но если внимательно просмотреть в ней все присваивания переменных вида ASSIGN Base[1], то кандидатов на роль пароля окажется не так уж и много. В частности, для klcodec270b.exe им оказался 'WizardForm', а для wmlite240.exe - '2f6e8aa144908b174504d788e1a51d77b47ae704'.

P.S. Собственно, на этом можно было и успокоиться, если бы не одно "но": в новых версиях дистрибутивов K-Lite разработчики отказались от паролей-констант, и теперь они вычисляются в момент инсталляции по некоему довольно простому алгоритму. Что ж, пытливому уму это не помеха: находим в листинге номера двух функций, которые содержат в своём названии слово password, потом ищем код, где они выполняются. Чуть выше этого места должен быть вызов функции, формирующей переменную со строкой пароля. Вот, собственно, и всё.


(Читать комментарии) - (Добавить комментарий)


[info]aleks1958@lj
2008-09-20 09:56 (ссылка)
Круто... Ломка это хорошая тренировка ума.Да и знания приобретенные при ломке - пригодятся обязательно

(Ответить) (Ветвь дискуссии)


[info]redrat@lj
2008-09-20 15:42 (ссылка)
Ну, назвать это ломкой - это грубо польстить. Другое дело, что нынешняя жизнь не даёт много пищи для ума, приходится питаться эрзацами... ;-)

(Ответить) (Уровень выше)


(Читать комментарии) -