Показать сообщение отдельно
Старый 28.11.2013, 23:29   #5
Новичок
 
Регистрация: 19.11.2013
Сообщений: 5
Сказал Спасибо: 4
Имеет 0 спасибок в 0 сообщенях
Sanek2 пока неопределено
По умолчанию

Ок попробую, пока использовал функцию аналог, бан не получаю
Код:
FARPROC _stdcall HideGetProcAddress(HMODULE hModule, char* lpProcName)
{
	ULONG PE;
	PIMAGE_EXPORT_DIRECTORY ED;
	PULONG NamePointerRVA;
	PUSHORT OrdinalTableRVA;
	PULONG AddressTableRVA;

	ULONG ret = 0;
	USHORT hint = 0;
	USHORT index;
	char * name;
	ULONG addr;
	ULONG CNT_FUNC;

	if ((ULONG)lpProcName <= 0xFFFF)// если импорт по ординалу
	{
		hint = (USHORT)lpProcName; // запишем наш ординал
	}

	if (hModule) // если указан модуль откуда грузить
	{
		PE = *(ULONG*)((ULONG)hModule + 0x3C) + (ULONG)hModule;// адрес PE заголовка
		ED = (PIMAGE_EXPORT_DIRECTORY)(*(ULONG*)((ULONG)PE + 0x78) + (ULONG)hModule); // адрес таблицы экспорта

		NamePointerRVA = (ULONG*)(ED->AddressOfNames + (ULONG)hModule); // адрес таблицы имен
		OrdinalTableRVA = (USHORT*)(ED->AddressOfNameOrdinals + (ULONG)hModule); // адрес таблицы ординалов
		AddressTableRVA = (ULONG*)(ED->AddressOfFunctions + (ULONG)hModule); // адрес таблицы адерсов

		// вычесляем наибольшее значение - кол-во функций
		if (ED->NumberOfNames > ED->NumberOfFunctions)
		{
			CNT_FUNC = ED->NumberOfNames;
		}
		else
		{
			CNT_FUNC = ED->NumberOfFunctions;
		}

		// пройдемся по всем функциям
		for (USHORT x = 0; x < CNT_FUNC; x++)
		{
			if (x < ED->NumberOfFunctions) // если есть имя у функции
			{
				name = (char*)(NamePointerRVA[x] + (ULONG)hModule); // запомним имя
				index = OrdinalTableRVA[x]; // запомним ординал
			}
			else // если имени нет
			{
				name = 0; // имени нет
				index = x; // ординал = текущей позиции
			}

			// вычесляем адрес функции 
			addr = AddressTableRVA[index] + (ULONG)hModule;
			if ((hint == index + ED->Base) || // если это наш ординал
				(name && !strcmp(name, lpProcName))) // если есть имя и оно наше
			{
				ret = addr; // нашли адрес
				break; // прекратим обход экспорта
			}
		}
	}

	return (FARPROC)ret; // вернем адрес 
}
Добавлено через 19 часов 18 минут
Хмм, тут защита GameGuard, почитал о ней в википедии, неужели все так безнадежно, как там написанно?

Последний раз редактировалось Sanek2, 28.11.2013 в 23:29. Причина: Добавлено сообщение
Sanek2 вне форума   Ответить с цитированием