Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2017, 00:49   #1
Midont
 
Регистрация: 07.02.2011
Сообщений: 8
По умолчанию Подмена значения в DLL

Имею в наличие exe и dll, по запуску exe тянет за собой эту dll

имея код в плюсах:
Memory::Write((void *)0xFAF0, (DWORD)347);
- данный код заменяет по адресу 0xFAF0 у ехе приложения на значение 347 (это все нормально работает)

и тут вопрос, как делать подмену значений не у ехе приложения, а у самой DLL..
Midont вне форума Ответить с цитированием
Старый 10.07.2017, 01:37   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Что делает Memory::Write ??

Потому что указаный адрес явно не верный. Вообще, нужно брать адрес загрузки модуля (по-моему это и есть его HANDLE), и от него вести расчет, с учетом, что смещения на диске и в памяти разные (если вы получали адрес поиском по диску).
Читайте формат PE - там все описано, что и где.
alexzk вне форума Ответить с цитированием
Старый 10.07.2017, 10:01   #3
Midont
 
Регистрация: 07.02.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Что делает Memory::Write ??

Потому что указаный адрес явно не верный. Вообще, нужно брать адрес загрузки модуля (по-моему это и есть его HANDLE), и от него вести расчет, с учетом, что смещения на диске и в памяти разные (если вы получали адрес поиском по диску).
Читайте формат PE - там все описано, что и где.
Данный адрес я к примеру написал, сейчас конкретно тогда распишу, данная функция делает подмену в запущенном ехе приложение:





Например я хочу заменить значение 256 на 357, в IDA переходим в HEX вкладку:




Если посчитать смещение, то конкретный адрес получится:
  • 679DE6 и внедряем туда DWORD значение (4-х байтовое) на нужное к примеру 357.
  • Имеем два оригинальных файла EXE, DLL, к ЕХЕ прикручиваем самописную вторую DLL на плюсах, в ней данный запрос (см. ниже) - все отлично работает, как переделать функцию под то, чтобы подмена происходила не в оригинальной ехе файле, а в оригинальном DLL файле, к примеру world.dll (за помощь поощрю без проблем.)

функция имелась ввиду:
  • WriteMemoryDWORD(0x679DE6, (DWORD)357);

.h
Код:
void WriteMemoryDWORD(UINT64 Address, DWORD Value, LPBYTE OrgBytes = NULL);
.cpp
Код:
void WriteMemoryDWORD(UINT64 Address, DWORD Value, LPBYTE OrgBytes)
{
	if(Address)
	{
		SIZE_T Size = sizeof(DWORD);
		if(ValidOrgBytes(Address, OrgBytes, Size))
		{
			if(TryWrite(Address, Size))
			{
				DWORD dwOldProtect = NULL;
				SIZE_T BytesWritten = NULL;
				HANDLE 	hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessId());
				if(hProcess)
				{
					if(!VirtualProtect((LPVOID)Address, Size, PAGE_EXECUTE_READWRITE, &dwOldProtect))
					{ 
						ShowMessage("Hook Manager", "Failed to set new protection with VirtualProtect at address [%p]!", Address);
					}
					if (WriteProcessMemory(hProcess, (LPVOID)Address, &Value, Size, &BytesWritten))
					{
						Write(Address, Size);
					}else
					{
						ShowMessage("Hook Manager", "Failed to write process memory at address[%p]!", Address);
						ExitProcess(0);	
						return;
					}
					if(!VirtualProtect((LPVOID)Address, Size, dwOldProtect, &dwOldProtect))
					{ 
						ShowMessage("Hook Manager", "Failed to set old protection with VirtualProtect at address [%p]!", Address);
					}
					CloseHandle(hProcess);
				}else
				{
					ShowMessage("Hook Manager", "Failed to get process handle!");
					ExitProcess(0);
					return;
				}

			}
		}
	}
}

Последний раз редактировалось Midont; 10.07.2017 в 10:05.
Midont вне форума Ответить с цитированием
Старый 11.07.2017, 21:32   #4
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Ну точно так же, только адрес по другому считать, с учетом адреса загрузки длл, который, скорее всего, и есть ее HANDLE.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция для сборки приложений на Qt в один exe без зависимостей от libstdc++-6.dll, libgcc_s_dw2-1.dll, Qt5Core.dll и т.д. 8Observer8 Qt и кроссплатформенное программирование С/С++ 12 25.06.2015 03:18
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
Экспорт/Подмена DLL (Brain->Вынос) coNsept Общие вопросы C/C++ 1 26.07.2011 01:53
Подмена dll (OpenGL) coNsept Общие вопросы C/C++ 11 22.07.2011 01:56
Подмена IP ? KAKTYC PHP 2 28.10.2008 00:14