Алгоритм декодирования ресурсов из 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 - это номер блока ресурсов.
И теперь полученным массивом M начинаем декодировать весь блок с ресурсами длиной N процедурой, аналогичной XorT. Причем начинаем использовать массив M также с 1-го значения (не с нулевого(!)) до 255, если ресурс больше 255 символов, то i "переваливает" байтовую границу и уже массив M начинает использоваться с нуля, а не с единицы.
Посмотрим на приведенном выше примере структуру первого из наших декодированных ресурсов:
? длина ресурса (WORD), в нашем примере - 26(0x1A) байт.
? длина логина (WORD), в нашем примере - 10 символов.
? длина пароля (WORD), в нашем примере - 8 символов.
? BYTE, назначение которого пока точно не известно.
? тип хранимого ресурса (BYTE):
1 = NT Domain
2 = NT Server
3 = Shared
4 = MAPI
6 = Dial-Up
18 = NetWare
19 = WWW
Далее располагаются логин, а после него - пароль.
В нашем примере - тип ресурса "Shared", логин "CRISTIAN\D", пароль "hellgate". (Примечание: для Shared-ресурсов запись CRISTIAN\D будет означать следующее: CRISTIAN - имя компьютера, а D - ресурс, предоставленный для общего пользования.)
Далее анализируем текущий блок с ресурсами, пока не перевалили за N, "поглядывая" в таблицу по адресу 0x109, т.к. в PWL-файлах между блоками ресурсов очень часто бывает "мусор" (неисповедимы пути Microsoft), а в этой таблице будет точное указание - в каком блоке сколько ресурсов.