| 
		
	
	
	
		
	Сообщений: 78 
	Тем: 0 
	Зарегистрирован: May 2015
	
 Репутация: 
577 
	
	
		Zubastic Написал:Собственно хочу сделать еще одну реинкарнацию пакетхака. На этот раз в виде длл, но возникла большая проблема:[SRC="c++"]
 DWORD WINAPI InitThread(LPVOID)
 {
 ...
 (FARPROC&)true_UNetworkHandler_OutgoingPacket = FARPROC(addr);
 ...
 }
 [/SRC]
 Собственно почему в одном случае все работает, а в другом ошибка?)
 
В общем, отдебажил так, адрес был левый, забыл ты разыменовать указатель из VMT, строка выше должна быть такой, тогда все нормально работает, даже с куском кода из rGuard.
 
[SRC="c++"] 
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); 
} 
[/SRC]
	 
	
	
	
		
	Сообщений: 5,862 
	Тем: 105 
	Зарегистрирован: Sep 2010
	
 Репутация: 
13,014 
	
	
		Спасибо, все работает. (Так и знал, что где-то маленькая ошибка, которая все руинила -_-). Есть еще пара вопросов, но публиковать их не хочется, если не трудно - скиньте контакты в личку. спасибо.
	 
	
	
	
		
	Сообщений: 5,862 
	Тем: 105 
	Зарегистрирован: Sep 2010
	
 Репутация: 
13,014 
	
	
		[SRC="c++"]		void** UNetworkHandler_AddNetworkQueue = (void**)(hEngine + CalcOffset(0x20554600)); // ?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z 0x20554600 - heliosvoid** 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!");[/SRC]
 
 Вот еще одна проблемка, код выполняется, но никакого перехвата нет и в помине, однако если пытаюсь сделать так:
 [SRC="c++"]		void** incomming = (UNetworkHandler_vftable + 0x22);
 *incomming = (void*)UNetworkHandler_IncommingPacket_hook;[/SRC]
 
 Получаю зависание при старте и соответственно ничего не работает. Где ошибка не могу понять, при этом на хф код работает нормально такой.
 
![[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]](http://klikr.org/4e38c909fcd08c5fcdf363b54a62.png)  
	
	
	
		
	Сообщений: 78 
	Тем: 0 
	Зарегистрирован: May 2015
	
 Репутация: 
577 
	
		
		
		07-31-2016, 10:47 AM 
(Сообщение последний раз редактировалось: 07-31-2016, 10:51 AM   f1redark.)
		
	 
		Zubastic Написал:[SRC="c++"]		void** UNetworkHandler_AddNetworkQueue = (void**)(hEngine + CalcOffset(0x20554600)); // ?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z 0x20554600 - heliosvoid** 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!");[/SRC]
 
 Вот еще одна проблемка, код выполняется, но никакого перехвата нет и в помине, однако если пытаюсь сделать так:
 [SRC="c++"]		void** incomming = (UNetworkHandler_vftable + 0x22);
 *incomming = (void*)UNetworkHandler_IncommingPacket_hook;[/SRC]
 
 Получаю зависание при старте и соответственно ничего не работает. Где ошибка не могу понять, при этом на хф код работает нормально такой.
 
Не понятно, что значит на хф работает? А где не работает?
Добавлено через 3 минуты 
Хелиос надо отдельно смотреть, нужна анпакнутая engine.dll, и т п
	 
	
	
	
		
	Сообщений: 561 
	Тем: 44 
	Зарегистрирован: Sep 2011
	
 Репутация: 
412 
	
	
		Начиная с хроник InfinityOdissey в экспорте engine.dll нет функций класса UNetworkHandler.
	 
	
	
	
		
	Сообщений: 5,862 
	Тем: 105 
	Зарегистрирован: Sep 2010
	
 Репутация: 
13,014 
	
		
		
		07-31-2016, 11:37 AM 
(Сообщение последний раз редактировалось: 07-31-2016, 11:38 AM   Zubastic.)
		
	 
		f1redark Написал:Не понятно, что значит на хф работает? А где не работает?
 Добавлено через 3 минуты
 Хелиос надо отдельно смотреть, нужна анпакнутая engine.dll, и т п
 Есть клиент рпг клаба, на котором я тренировался. Захукал отправку и прием. Все перехватывается, можно пилить. Сейчас сделал тоже самое для хелиоса, однако клиент просто виснет.
Добавлено через 1 минуту flopix Написал:Начиная с хроник InfinityOdissey в экспорте engine.dll нет функций класса UNetworkHandler. Это понятно, поэтому я просто ищу по смещению. engine.dll анпакнута. Сравнивал оффсеты моей функции и той, что я получаю вычислением - адреса совпадают. Т.е. я получаю именно то, что мне нужно. Но при попытке записи туда - зависание.
	 
	
	
	
		
	Сообщений: 561 
	Тем: 44 
	Зарегистрирован: Sep 2011
	
 Репутация: 
412 
	
	
		Zubastic;416094 Написал:поэтому я просто ищу по смещению. engine.dll а где гарантия что смещения в HF и в новых хрониках совпадают. В класс UNetworkHandler в любом случае были добавлены новые методы.
	 
	
	
	
		
	Сообщений: 5,862 
	Тем: 105 
	Зарегистрирован: Sep 2010
	
 Репутация: 
13,014 
	
	
		flopix Написал:а где гарантия что смещения в HF и в новых хрониках совпадают. В класс UNetworkHandler в любом случае были добавлены новые методы. Я их вычислил самостоятельно. Все совпадает    
	
	
	
		
	Сообщений: 57Тем: 0
 Зарегистрирован: May 2016
 
	
	
		А можно поинтересоваться почему вы так привязаны к внедрению в движок игры, для ловли пакетов ?
 Можно же на более низком уровне ловить их, по TCP,UDP, раскодировать их тем же самым способом, и тогда не нужно быть привязанным к разным адресам хроник.
 
	
	
	
		
	Сообщений: 185 
	Тем: 4 
	Зарегистрирован: Sep 2012
	
 Репутация: 
1,372 
	
	
		luslighter, Зачем выдирать посылку из почтового вагона на ходу, когда проще получить ее в почтовом отделении в распакованном виде?)
 Правда, в абстрактное почтовое отделение приходится пробираться через форточку подвала :redlol:
 |