C++ перехват пакетов - Страница 4 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 27.07.2016, 00:57   #31
Пользователь

По умолчанию Re: C++ перехват пакетов

Цитата:
Сообщение от Zubastic Посмотреть сообщение
Собственно хочу сделать еще одну реинкарнацию пакетхака. На этот раз в виде длл, но возникла большая проблема:
 
DWORD WINAPI InitThread(LPVOID)
{
...
    (FARPROC&)true_UNetworkHandler_OutgoingPacket = FARPROC(addr);
...
}
 
Code: C++
Собственно почему в одном случае все работает, а в другом ошибка?)
В общем, отдебажил так, адрес был левый, забыл ты разыменовать указатель из VMT, строка выше должна быть такой, тогда все нормально работает, даже с куском кода из rGuard.

 
DWORD WINAPI InitThread(LPVOID)
{
...
    true_UNetworkHandler_OutgoingPacket = (UNetworkHandler_OutgoingPacket)(*addr);
...
}
 
void __cdecl UNetworkHandler_OutgoingPacket_hook(unsigned int This, const char *Format, ...)
{	
	unsigned char buf[10240];
	int size = 0, len;
	wchar_t *wstr;
 
	va_list args;
	va_start(args, Format);
 
	while (*Format != 0)
	{
		switch (*Format)
		{
		case 'c':
			*(unsigned char*)(buf + size) = va_arg(args, unsigned char);
			size++;
			break;
		case 'h':
			*(unsigned short int*) (buf + size) = va_arg(args, unsigned short int);
			size += 2;
			break;
		case 'd':
			*(unsigned int*)(buf + size) = va_arg(args, unsigned int);
			size += 4;
			break;
		case 'Q':
			*(unsigned __int64*)(buf + size) = va_arg(args, unsigned __int64);
			size += 8;
			break;
		case 'b':
			len = va_arg(args, unsigned int);
			memcpy(buf + size, va_arg(args, void*), len);
			size += len;
			break;
		case 'S':
			wstr = va_arg(args, wchar_t*);
			if (wstr == 0)
			{
				len = 2;
				*(unsigned short int*) (buf + size) = 0;
			}
			else
			{
				len = wcslen(wstr) * 2 + 2;
				memcpy(buf + size, wstr, len);
			}
			size += len;
			break;
		}
		Format++;
	}
 
	va_end(args);
 
	true_UNetworkHandler_OutgoingPacket(This, "b", size, (int)buf);
}
 
Code: C++
f1redark вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 27.07.2016, 02:01   #32
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: C++ перехват пакетов

Спасибо, все работает. (Так и знал, что где-то маленькая ошибка, которая все руинила -_-). Есть еще пара вопросов, но публиковать их не хочется, если не трудно - скиньте контакты в личку. спасибо.
__________________
Zubastic вне форума Ответить с цитированием
Непрочитано 31.07.2016, 03:36   #33
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: C++ перехват пакетов

		void** UNetworkHandler_AddNetworkQueue = (void**)(hEngine + CalcOffset(0x20554600)); // ?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z 0x20554600 - helios
		void** UNetworkHandler_vftable = (void**)(hEngine + CalcOffset(0x2072E94C));		 // ??_7UNetworkHandler@@6BUObject@@@ 0x2072E94C - helios 0x72D74C
		void** UNetworkHandler_OutgoingPacket = (void**)(hEngine + CalcOffset(0x2072DF98));  // 0x2072DF98 - helios 0x72CD98
		char buf[1024];
		/*
[29384] UNetworkHandler_AddNetworkQueue Offset=0x20554600
[29384] UNetworkHandler_vftable Offset=0x2072e94c
[29384] UNetworkHandler_OutgoingPacket Offset=0x2072df98
		*/
		wsprintfA(buf, "UNetworkHandler_AddNetworkQueue Offset=0x%x", UNetworkHandler_AddNetworkQueue);
		OutputDebugStringA(buf);
		wsprintfA(buf, "UNetworkHandler_vftable Offset=0x%x", UNetworkHandler_vftable);
		OutputDebugStringA(buf);
		wsprintfA(buf, "UNetworkHandler_OutgoingPacket Offset=0x%x", UNetworkHandler_OutgoingPacket);
		OutputDebugStringA(buf);
		(FARPROC&)true_UNetworkHandler_OutgoingPacket = FARPROC(*UNetworkHandler_OutgoingPacket);
		OutputDebugStringA("true_UNetworkHandler_OutgoingPacket!");
		(FARPROC&)UNetworkHandler_OutgoingPacket = (FARPROC)*UNetworkHandler_OutgoingPacket_hook;
		OutputDebugStringA("UNetworkHandler_OutgoingPacket_hook!");
		void** incomming = (UNetworkHandler_vftable + 0x22);
		(FARPROC&)(incomming) = (FARPROC)*UNetworkHandler_IncommingPacket_hook;
		OutputDebugStringA("UNetworkHandler_IncommingPacket_hook!");
Code: C++
Вот еще одна проблемка, код выполняется, но никакого перехвата нет и в помине, однако если пытаюсь сделать так:
		void** incomming = (UNetworkHandler_vftable + 0x22);
		*incomming = (void*)UNetworkHandler_IncommingPacket_hook;
Code: C++
Получаю зависание при старте и соответственно ничего не работает. Где ошибка не могу понять, при этом на хф код работает нормально такой.
__________________
Zubastic вне форума Ответить с цитированием
Непрочитано 31.07.2016, 10:47   #34
Пользователь

По умолчанию Re: C++ перехват пакетов

Цитата:
Сообщение от Zubastic Посмотреть сообщение
		void** UNetworkHandler_AddNetworkQueue = (void**)(hEngine + CalcOffset(0x20554600)); // ?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z 0x20554600 - helios
		void** UNetworkHandler_vftable = (void**)(hEngine + CalcOffset(0x2072E94C));		 // ??_7UNetworkHandler@@6BUObject@@@ 0x2072E94C - helios 0x72D74C
		void** UNetworkHandler_OutgoingPacket = (void**)(hEngine + CalcOffset(0x2072DF98));  // 0x2072DF98 - helios 0x72CD98
		char buf[1024];
		/*
[29384] UNetworkHandler_AddNetworkQueue Offset=0x20554600
[29384] UNetworkHandler_vftable Offset=0x2072e94c
[29384] UNetworkHandler_OutgoingPacket Offset=0x2072df98
		*/
		wsprintfA(buf, "UNetworkHandler_AddNetworkQueue Offset=0x%x", UNetworkHandler_AddNetworkQueue);
		OutputDebugStringA(buf);
		wsprintfA(buf, "UNetworkHandler_vftable Offset=0x%x", UNetworkHandler_vftable);
		OutputDebugStringA(buf);
		wsprintfA(buf, "UNetworkHandler_OutgoingPacket Offset=0x%x", UNetworkHandler_OutgoingPacket);
		OutputDebugStringA(buf);
		(FARPROC&)true_UNetworkHandler_OutgoingPacket = FARPROC(*UNetworkHandler_OutgoingPacket);
		OutputDebugStringA("true_UNetworkHandler_OutgoingPacket!");
		(FARPROC&)UNetworkHandler_OutgoingPacket = (FARPROC)*UNetworkHandler_OutgoingPacket_hook;
		OutputDebugStringA("UNetworkHandler_OutgoingPacket_hook!");
		void** incomming = (UNetworkHandler_vftable + 0x22);
		(FARPROC&)(incomming) = (FARPROC)*UNetworkHandler_IncommingPacket_hook;
		OutputDebugStringA("UNetworkHandler_IncommingPacket_hook!");
Code: C++
Вот еще одна проблемка, код выполняется, но никакого перехвата нет и в помине, однако если пытаюсь сделать так:
		void** incomming = (UNetworkHandler_vftable + 0x22);
		*incomming = (void*)UNetworkHandler_IncommingPacket_hook;
Code: C++
Получаю зависание при старте и соответственно ничего не работает. Где ошибка не могу понять, при этом на хф код работает нормально такой.


Не понятно, что значит на хф работает? А где не работает?

Добавлено через 3 минуты
Хелиос надо отдельно смотреть, нужна анпакнутая engine.dll, и т п

Последний раз редактировалось f1redark; 31.07.2016 в 10:51. Причина: Добавлено сообщение
f1redark вне форума Ответить с цитированием
Непрочитано 31.07.2016, 11:25   #35
Пользователь

По умолчанию Re: C++ перехват пакетов

Начиная с хроник InfinityOdissey в экспорте engine.dll нет функций класса UNetworkHandler.
flopix вне форума Ответить с цитированием
Непрочитано 31.07.2016, 11:37   #36
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: C++ перехват пакетов

Цитата:
Сообщение от f1redark Посмотреть сообщение
Не понятно, что значит на хф работает? А где не работает?

Добавлено через 3 минуты
Хелиос надо отдельно смотреть, нужна анпакнутая engine.dll, и т п
Есть клиент рпг клаба, на котором я тренировался. Захукал отправку и прием. Все перехватывается, можно пилить. Сейчас сделал тоже самое для хелиоса, однако клиент просто виснет.

Добавлено через 1 минуту
Цитата:
Сообщение от flopix Посмотреть сообщение
Начиная с хроник InfinityOdissey в экспорте engine.dll нет функций класса UNetworkHandler.
Это понятно, поэтому я просто ищу по смещению. engine.dll анпакнута. Сравнивал оффсеты моей функции и той, что я получаю вычислением - адреса совпадают. Т.е. я получаю именно то, что мне нужно. Но при попытке записи туда - зависание.
__________________

Последний раз редактировалось Zubastic; 31.07.2016 в 11:38. Причина: Добавлено сообщение
Zubastic вне форума Ответить с цитированием
Непрочитано 31.07.2016, 12:00   #37
Пользователь

По умолчанию Re: C++ перехват пакетов

Цитата:
Сообщение от Zubastic Посмотреть сообщение
поэтому я просто ищу по смещению. engine.dll
а где гарантия что смещения в HF и в новых хрониках совпадают. В класс UNetworkHandler в любом случае были добавлены новые методы.
flopix вне форума Ответить с цитированием
Непрочитано 31.07.2016, 13:14   #38
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Re: C++ перехват пакетов

Цитата:
Сообщение от flopix Посмотреть сообщение
а где гарантия что смещения в HF и в новых хрониках совпадают. В класс UNetworkHandler в любом случае были добавлены новые методы.
Я их вычислил самостоятельно. Все совпадает
__________________
Zubastic вне форума Ответить с цитированием
Непрочитано 31.07.2016, 13:49   #39
Изгнанные

По умолчанию Re: C++ перехват пакетов

А можно поинтересоваться почему вы так привязаны к внедрению в движок игры, для ловли пакетов ?

Можно же на более низком уровне ловить их, по TCP,UDP, раскодировать их тем же самым способом, и тогда не нужно быть привязанным к разным адресам хроник.
luslighter вне форума Ответить с цитированием
Непрочитано 31.07.2016, 13:56   #40
Аватар для Persy
Пользователь

По умолчанию Re: C++ перехват пакетов

luslighter, Зачем выдирать посылку из почтового вагона на ходу, когда проще получить ее в почтовом отделении в распакованном виде?)

Правда, в абстрактное почтовое отделение приходится пробираться через форточку подвала
Persy вне форума Отправить сообщение для Persy с помощью Skype™ Ответить с цитированием
Ответ


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

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват и подмена пакетов Smiler ArcheAge 27 13.01.2023 04:12
Шифровка пакетов SiriusED Blade & Soul 8 23.07.2015 00:21
Подмен пакетов katanasmil Программирование / Programming 4 16.06.2014 19:24
Отправка пакетов(C#) Tezarius ArcheAge 6 13.03.2014 01:28
Перехват пакетов конкретного приложения под win32 Redvain Курилка / Yak floor 0 28.05.2009 12:46


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 22:40. Часовой пояс GMT +3.

Вверх