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



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


  • Считываем из исходного PWL-файла по смещению 0x24C - CheckSeed (DWORD).
  • -//- по смещению 0x252 - CryptoSign (16 байт).
  • -//- по смещению 0x262 - CheckSign (16 байт).
  • Формируем массив X (размером 64 байта) следующим образом:
  • 0xFFFFFFFF (DWORD)
  • Логин в верхнем регистре
  • 0x0 (1 байт)
  • CheckSeed (DWORD)
  • 0x80 (1 байт)
  • 0x0 (по адрес 0x37 включительно)
  • По адресу 0x38 записываем (0x48 + (длина логина << 3)) (DWORD)
  • 0x0 (до конца массива)
  • Выполняем MD5 (массив X), получаем массив Cnt (16 байт), т.е. производим свертку логина.
  • Формируем массив Y (размером 64 байта) следующим образом:
  • Логин в верхнем регистре
  • 0x0 (0x11 байт)
  • 0x80 (1 байт)
  • 0x0 (по адрес 0x37 включительно)
  • По адресу 0x38 записываем (0x88 + (длина логина << 3)) (DWORD)
  • 0x0 (до конца массива)
  • Формируем массив Z (размером 64 байта) следующим образом:
  • Пароль
  • 0x0 (1 байт)
  • Cnt (16 байт)
  • 0x80 (1 байт)
  • 0x0 (по адрес 0x37 включительно)
  • По адресу 0x38 записываем (0x88 + (длина пароля << 3)) (DWORD)
  • 0x0 (до конца массива)
  • Выполняем MD5 (массив Z), получаем массив Key (16 байт), т.е. производим свертку пароля.
  • Выполняем RC4, используя в качестве ключа Key.
  • Копируем во временный буфер Temp (32 байта):
  • CryptoSign (16 байт)
  • CheckSign (16 байт)
  • Выполняем процедуру XorT (массив M, массив Temp), получаем модифицированный массив Temp.
  • Копируем первые 16 байт из массива Temp в буфер Y с адреса (длина логина + 1)
  • Выполняем MD5 (массив Y), получаем массив TempKey (16 байт).
  • Сравниваем 16 байт массива TempKey и вторые 16 байт из массива Temp и если они не равны, то инкремент пароля и возврат на пункт 7, иначе - пароль верный!



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