Привет всем. Пробую расшифровать пароль от FF (3.5). Покопал разные сорцы декрипторов, что-то такое сделал, но ... не работает. Для примера возьмем логин (они с паролем расшифровываются одинаково): MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECCZ75mS/2HwhBAj+/bq+5rbwnA== Я пока не стал подгружать все дллки, а попросту запускаю свой файл из директории FF Директорию с профилями я пока тоже не стал определять (через profiles.ini), а сделал ее фиксированной. Вот что я написал: Код (Text): format PE GUI 4.0 entry main include 'win32a.inc' section '.data' data readable writeable hello db 'hello', 0 configDir db 'C:\Documents and Settings\1nck\Application Data\Mozilla\Firefox\Profiles\7v7dud8r.default', 0 password db 'MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECCZ75mS/2HwhBAj+/bq+5rbwnA==', 0 keySlot dd ? hToken dd ? struct TSECItem SECItemType dd ? SECItemData dd ? SECItemLen dd ? ends eSECItem TSECItem dSECItem TSECItem bufer rb 100 mask db 'Password: %s', 0 section '.code' code readable executable main: invoke NSS_Init, configDir invoke PK11_GetInternalKeySlot mov [keySlot], eax invoke PK11_Authenticate, keySlot, 1, 0 invoke lstrlen, password invoke NSSBase64_DecodeBuffer, 0, eSECItem, password, eax invoke PK11SDR_Decrypt, eSECItem, dSECItem, 0 invoke wsprintf, bufer, mask, dSECItem invoke MessageBox, 0, bufer, hello, MB_OK invoke PK11_FreeSlot, keySlot invoke NSS_Shutdown invoke ExitProcess, 0 section '.idata' import data readable writeable library kernel32, 'kernel32.dll',\ user32, 'user32.dll',\ advapi32, 'advapi32.dll',\ nss3, 'nss3.dll' import nss3,\ NSS_Init, 'NSS_Init',\ PK11_GetInternalKeySlot, 'PK11_GetInternalKeySlot',\ PK11_Authenticate, 'PK11_Authenticate',\ NSSBase64_DecodeBuffer, 'NSSBase64_DecodeBuffer',\ PK11SDR_Decrypt, 'PK11SDR_Decrypt',\ PK11_FreeSlot, 'PK11_FreeSlot',\ NSS_Shutdown, 'NSS_Shutdown' include 'api\kernel32.inc' include 'api\user32.inc' include 'api\advapi32.inc' Но в тех сорцах есть проверка, что возвращает NSS_Init и если это 0, то выполнение продолжается. У меня же возвращает -1 =/ Даже не пойму в чем тут дело. Вроде все делаю как надо. Вот описание параметра NSS_Init: Тоесть все указываю как надо. Не подскажите? Спасибо.
Ах да забыл, расшифрованный текст по идее должен содержаться в элементе SECItemData структуры dSECItem (здесь я поставил dSECItem только для экспериментов )
а вот во многих примерах делфи есть тип pchar. это указатель на строку. а как мне аналог такого же типа в структуре задать? или как сейчас dword нормально?
e4key PCHAR это на символ, тоесть на один байт указатель. Указатель на Asciiz-строку(нуль в конце) это PSTR. В масме: PSTR typedef DWORD.
хм, но во всех примерах используется именно pchar =/ вот структура из тех самых примеров декрипторов: Код (Text): TSECItem = packed record SECItemType: dword; SECItemData: pchar; SECItemLen: dword; end; я сделал следующую структуру: Код (Text): struct PSECItem SECItemType dd ? SECItemData dd ? SECItemLen dd ? ends в принципе все работает, но почему-то в конец строки добавляются разного рода символы. например я сохранил в фф пароль (с запасом ): глянул в бд, получилось следующее: расшифровываю... получается: хотя бывает, что гораздо большие пароли нормально отображает. бывает, что дописываются непонятные символы (как и сейчас). что-то я уже не понимаю =/
wsprintf же вставляет в конец нулл-байт. странно. вот пароль: ilikethisismypassword12345!@#$%haha его как ни странно обрабатывает нормально
e4key PChar на делфе это указатель на байт, а за ним может быть еще байт и еще байт и так далее до нулевого байта. Но изначально это указатель на байт, хотя чаще используется как строка оканчивающаяся нулем.