Криптография - статьи



Алгоритм декодирования ресурсов из PWL-файла с правильным паролем


  • После нахождения правильного пароля прогоняем функцию XorT с индексами не 1...33, а 33...63. Таким образом мы декодируем 15 адресов блоков с ресурсами. Должны получиться значения типа 0x292, 0x294 и т.д. Как мы помним, адрес 1-го блока всегда равен 0x290. Таким образом, у нас будет массив Res[17] типа WORD, в первое значение - 0x290, далее 15 декодированных адресов, а последний WORD - это размер файла (в примере выше это будет значение 0x2DC).
  • Далее следует цикл на 16 (проверка блоков с ресурсами), в начале его вычисляем разницу между соседними адресами N - если разница между ними равна 2, то переход на следующий адрес.
  • Если N > 2, то данный i-й блок содержит ресурсы.
  • Формируем новый массив X (размером 64 байта) следующим образом:
  • 0xFFFFFFFF (DWORD)
  • Логин в верхнем регистре
  • 0x0 (1 байт)
  • CryptoSeed[i] (DWORD) - это значение берем из массива по адресу 0x20C, причем i - это номер блока ресурсов.
  • 0x80 (1 байт)
  • 0x0 (по адрес 0x37 включительно)
  • По адресу 0x38 записываем (0x48 + (длина логина << 3)) (DWORD)
  • 0x0 (до конца массива)
  • Выполняем MD5 (массив X), получаем массив Cnt (16 байт), т.е. производим свертку логина с нужным CryptoSeed.
  • Формируем массив Z (размером 64 байта) следующим образом:
  • Пароль
  • 0x0 (1 байт)
  • Cnt (16 байт)
  • 0x80 (1 байт)
  • 0x0 (по адрес 0x37 включительно)
  • По адресу 0x38 записываем (0x88 + (длина пароля << 3)) (DWORD)
  • 0x0 (до конца массива)
  • Выполняем MD5 (массив Z), получаем массив Key (16 байт), т.е. производим свертку пароля.
  • Выполняем RC4, используя в качестве ключа Key.
  • И теперь полученным массивом M начинаем декодировать весь блок с ресурсами длиной N процедурой, аналогичной XorT. Причем начинаем использовать массив M также с 1-го значения (не с нулевого(!)) до 255, если ресурс больше 255 символов, то i "переваливает" байтовую границу и уже массив M начинает использоваться с нуля, а не с единицы.
  • Посмотрим на приведенном выше примере структуру первого из наших декодированных ресурсов:

    0290: .. .. .. .. .. .. 1A 00 0A 00 08 00 01 03 43 52 |..............CR




    Содержание  Назад  Вперед