Расшифровка пароля Outlook? (дизасм)

Тема в разделе "WASM.RESEARCH", создана пользователем test555, 8 июл 2010.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Есть аутлуки, в и-нете ходят программки, которые показывают сохраненный в реестре пароль.
    Место то нашел, но вот алгоритм шифрования не известен.
    Была идея открыть и посмотреть, что делает с прочтенными данными аутлук.. Но он недостатка опыта так и не смог найти то место, где проходят операции.

    Кому интересно, или просто заняться нечем, подскажите, как найти то место.
    Я промониторил регмоном сколько раз и какими АПИ читаются тот ключ, поставил бряк, отловил буфер что читается (читался именно тот), поставил на этот буфер мемори-рид-бряк, он остановился когда происходило копирования в какую-то область памяти, туда тоже поставил бряк, в след. раз "очнулся" когда туда записывались какие-то левые данные..

    Вот, вообще как можно узнать алгоритмы? Подобным способом что я описал?
    Интересует только МС аутлуки и АутлукЭкспресс...
     
  2. _w0rm_

    _w0rm_ New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    10
    АутлукЭкспресс -> ProtectedStorage
    МС аутлуки -> CryptUnprotectData

    направление правильное
     
  3. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    Расшифровка Outlook Express из реестра

    //-----------------------------------------------------------------------------
    int DecryptOutlookExpressPass(PCHAR pStrIn,PCHAR pStrOut)
    {
    DWORD dwKey;
    DWORD dwLen;
    PDWORD pdwVal;

    if( pStrIn[0]!=0x01 || pStrIn[1]!=0x01)
    return 1;

    dwKey = 0x14151875; // uniq seed may be changed in future
    dwLen = *(PDWORD)&pStrIn[2];
    pdwVal = (PDWORD)&pStrIn[6];

    for(;(INT)dwLen> 0;dwLen-=4,pStrOut+=4)
    {
    if(dwLen >= 4)
    {
    dwKey ^= *pdwVal++;
    }
    else
    {
    pdwVal = (DWORD*)((BYTE*)pdwVal-(4-dwLen));
    dwKey = (dwKey>>(8*(4-dwLen))) ^ (*pdwVal>>(8*(4-dwLen)));
    }
    *(DWORD*)pStrOut = dwKey;
    }
    return 0;
    }