Моя dll на с++ - hook addNetworkQueue, работает при обычном инжекте. Но на том сервере, где щас играю, какая - то защита, при обычном инжекте сразу бан по hwid. По этому помогите найти другой способ инжекта или разобраться с импортом в клиентские dll.
Пытаюсь сделать импорт dll с помощью Cff Explorer:
захожу в Import Adder
жму Add выбираю мою dll получаю ошибку:
Invalid PE file. Possible reason: no export table present
Тоже самое в LordPe при открытии моей dll и нажатии export. Если все-таки сделать импорт моей dll в dll клиента, то получаю крит клиента (вроде функции которые были в dll клиента исчезают).
//Способ найден, не актуально....
Последний раз редактировалось Sanek2, 27.11.2013 в 22:45.
Причина: Найден другой способ...
Оказалось что дело не в инжекте, а в перехвате API функций (определил методом тыка в виртуалке, слава Снапшотам), при вызове GetProcAdress.
При вызове GetModuleHandleA, Read|WriteProcessMemory бана не наблюдается.
И бан какой - то локальный (не пускает при попытке логина), т.е при инжекта без интернета все-равно бан, решается переустановкой виндовс или откатом с помощью снапшота в виртуалке.
Ок попробую, пока использовал функцию аналог, бан не получаю
Код:
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.
Причина: Добавлено сообщение
1) если размер файла изменяется ( основных типа л2.ехе, енгайн, коре и тп ) - тебя банит автоматом - локальная защита ( размер файла изменяется когда добавляешь через импорт адд)
2) я почти уверен, что твоя хук процедура не будет работать с геймгвардом, ГГ чекает в енгайн длл некоторые адреса, которые нужны для хука