Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
C++ перехват пакетов
#31
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]
Ответ
#32
Спасибо, все работает. (Так и знал, что где-то маленькая ошибка, которая все руинила -_-). Есть еще пара вопросов, но публиковать их не хочется, если не трудно - скиньте контакты в личку. спасибо.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#33
[SRC="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!");[/SRC]

Вот еще одна проблемка, код выполняется, но никакого перехвата нет и в помине, однако если пытаюсь сделать так:
[SRC="c++"] void** incomming = (UNetworkHandler_vftable + 0x22);
*incomming = (void*)UNetworkHandler_IncommingPacket_hook;[/SRC]

Получаю зависание при старте и соответственно ничего не работает. Где ошибка не могу понять, при этом на хф код работает нормально такой.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#34
Zubastic Написал:[SRC="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!");[/SRC]

Вот еще одна проблемка, код выполняется, но никакого перехвата нет и в помине, однако если пытаюсь сделать так:
[SRC="c++"] void** incomming = (UNetworkHandler_vftable + 0x22);
*incomming = (void*)UNetworkHandler_IncommingPacket_hook;[/SRC]

Получаю зависание при старте и соответственно ничего не работает. Где ошибка не могу понять, при этом на хф код работает нормально такой.



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

Добавлено через 3 минуты
Хелиос надо отдельно смотреть, нужна анпакнутая engine.dll, и т п
Ответ
#35
Начиная с хроник InfinityOdissey в экспорте engine.dll нет функций класса UNetworkHandler.
Ответ
#36
f1redark Написал:Не понятно, что значит на хф работает? А где не работает?

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

Добавлено через 1 минуту
flopix Написал:Начиная с хроник InfinityOdissey в экспорте engine.dll нет функций класса UNetworkHandler.
Это понятно, поэтому я просто ищу по смещению. engine.dll анпакнута. Сравнивал оффсеты моей функции и той, что я получаю вычислением - адреса совпадают. Т.е. я получаю именно то, что мне нужно. Но при попытке записи туда - зависание.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#37
Zubastic;416094 Написал:поэтому я просто ищу по смещению. engine.dll
а где гарантия что смещения в HF и в новых хрониках совпадают. В класс UNetworkHandler в любом случае были добавлены новые методы.
Ответ
#38
flopix Написал:а где гарантия что смещения в HF и в новых хрониках совпадают. В класс UNetworkHandler в любом случае были добавлены новые методы.
Я их вычислил самостоятельно. Все совпадает Smile
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#39
А можно поинтересоваться почему вы так привязаны к внедрению в движок игры, для ловли пакетов ?

Можно же на более низком уровне ловить их, по TCP,UDP, раскодировать их тем же самым способом, и тогда не нужно быть привязанным к разным адресам хроник.
Ответ
#40
luslighter, Зачем выдирать посылку из почтового вагона на ходу, когда проще получить ее в почтовом отделении в распакованном виде?)

Правда, в абстрактное почтовое отделение приходится пробираться через форточку подвала :redlol:
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Свой сниффер и редактор пакетов SiriusED 0 473 03-22-2024, 03:28 AM
Последний пост: SiriusED
  Реконструкция пакетов из WSARecv\WSASend ANZO 3 2,495 04-17-2016, 08:34 PM
Последний пост: Necroz-Team
  Подмен пакетов katanasmil 4 3,094 06-16-2014, 07:24 PM
Последний пост: PROGRAMMATOR
  Опкоды пакетов при хуке Mifesto 3 2,438 07-09-2013, 04:18 PM
Последний пост: Mifesto

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)