Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #58, СЕНТЯБРЬ 2005 г.

Как скрытое становится явным

Bad_guy

Спецвыпуск: Хакер, номер #058, стр. 058-016-2


Как показывает скриншот, ключи Behavior и Item Data содержат данные, явно относящиеся к паролям, содержащимся в защищенном хранилище, однако самих паролей в открытом виде все равно нет.

Пишем "расшифровщик"

Мысль написать расшифровщик была как раз первой пришедшей в голову, когда я увидел данные, содержащиеся в ключах Behavior и Item Data. Но, попроверяв изменение данных при смене пароля от ящика в OE, я понял, что это будет непростой задачей. Необходимо посмотреть, как же сам Outlook Express расшифровывает эти данные. При помощи отладчика и дизассемблера начался разбор, поведавший мне, что сам по себе Outlook Express не работает с этими ветвями реестра: существует некая системная библиотека pstorec.dll для непосредственной работы с защищенным хранилищем. У этой библиотеки есть все необходимые экспортируемые функции, которые выдают программе, использующей библиотеку, все возможности по работе с защищенным хранилищем: чтение, запись, стирание данных и отображение хранящихся в нем записей.

Поискав что-нибудь о "pstorec.dll" в Google и Яndex, я нашел пару мест, где об этом что-то было, но информация была очень скудной: например из MSDN, которая фактически не давала никаких возможностей самостоятельно реализовать алгоритм использования функций библиотеки. Также попался какой-то левый Visual Basic-исходник, перековерканный web-парсингом (примерно вот в таком же виде - http://progg.net.ru/dir13/p3291.htm, только здесь на C++) и никак не компилировавшийся.

Попробовал реализовать алгоритм на Delphi - началась долгая и упорная работа по разбору алгоритма. Выяснилось, к примеру, что библиотеку pstorec.dll нужно обработать прежде всего при помощи tlibimp.exe из комплекта Delphi (командная строка: "tlibimp.exe pstorec.dll"), полученные файлы (PSTORECLib_TLB.dcr, PSTORECLib_TLB.pas) подключаются в Delphi, как новый компонент. В реализации же самого алгоритма на Delphi сильно помог опыт крэкера: дизассемблирование упомянутой выше программы (Protected Storage PassView) принесло необходимые результаты, и в итоге был получен рабочий алгоритм (см. врезку).

ListBox1.Clear;

StatusBar1.SimpleText := DateToStr(Date)+' @ '+TimeToStr(Time);

hMod := LoadLibrary('pstorec.dll');

PStoreCreateInstance := GetProcaddress(hMod, 'PStoreCreateInstance');

if @PStoreCreateInstance = nil then ShowMessage('PStoreCreateInstance not found');

hRes := PStoreCreateInstance(@spPStore, 0, 0, 0);

hRes := spPstore.EnumTypes(0,0,spEnumTypes);

while spEnumTypes.Next(1,typeGUID,c1) = S_OK do

Назад на стр. 058-016-1  Содержание  Вперед на стр. 058-016-3