Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
C++ перехват пакетов
#21
Попробуйте пока что вместо вызова оригинальной функции выводить в лог ид пакета, строку Format, чтобы убедиться что вообще вызывается то что нужно с корректными данными.
Ответ
#22
Вроде как идет нормально. Вообще как написать нормально вывод?) А то я в плюсах не особо.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#23
Например так:
PHP код:
<?php 
MessageBoxA
(0, Format, "SendPacket", MB_OK);
Ответ
#24
Zubastic Написал:Собственно хочу сделать еще одну реинкарнацию пакетхака. На этот раз в виде длл, но возникла большая проблема:
[SRC="c++"]
int __cdecl UNetworkHandler_OutgoingPacket_hook(unsigned int This, char *Format, ...)
{
true_UNetworkHandler_OutgoingPacket(This, Format, ...);
return 0;
}
[/SRC]
Собственно почему в одном случае все работает, а в другом ошибка?)

Это кривизна, и я честно не понимаю, как это вообще может скомпилироваться.
Ответ
#25
f1redark Написал:Это кривизна, и я честно не понимаю, как это вообще может скомпилироваться.
Еще раз: это псевдофункция, она и не должна компилиться. Я просто показал, что хочу пробросить пакеты. Как именно это сделать я не знаю (не прибегая к тому способу из ргварда, который описали выше).

Добавлено через 45 секунд
flopix Написал:Например так:
PHP код:
<?php 
MessageBoxA
(0, Format, "SendPacket", MB_OK);
Format выдаст CCCC ну или что-то такое. Мне же содержимое нужно, верно?
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#26
Zubastic;415745 Написал:Format выдаст CCCC ну или что-то такое. Мне же содержимое нужно, верно?

Этого достаточно чтобы понять что приходит то что нужно.
То есть у вас проблема только в вызове оригинала. Как будто бы его адрес сохранен неверно.
Ответ
#27
Так в чем тогда ошибка? Я так и не увидел, как ты вызываешь оригинал.

Добавлено через 17 минут
flopix Написал:И что такая конструкция прям так компилируется с троеточием в аргументах :eek:?
PHP код:
<?php 
true_UNetworkHandler_OutgoingPacket
(This, Format, ...);

Функция sendPacket идет с переменным числом аргументов и есть нюансы. Попробуйте пока вызвать так:
PHP код:
<?php 
//Клиентские пакеты
void __cdecl UNetworkHandler_OutgoingPacket_hook(unsigned int This, 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);
}
Тем более для того что вы делаете это как раз понадобится. На выходе у вас готовый буфер с пакетом.
Этот код рабочий, если с ним не работает, берешь отладчик, ставишь бряк на свою функцию, и смотришь, как вызывается true функция, какие параметры, и что со стеком, ну и где падает конкретно, потому что иначе это гадание все.
Ответ
#28
flopix Написал:Этого достаточно чтобы понять что приходит то что нужно.
То есть у вас проблема только в вызове оригинала. Как будто бы его адрес сохранен неверно.
Там приходит все нормально...

Добавлено через 48 секунд
f1redark Написал:Так в чем тогда ошибка? Я так и не увидел, как ты вызываешь оригинал.
Так и вызываю. Код и ргварда, в итоге крит с ошибкой ревив пакета.
f1redark Написал:Этот код рабочий, если с ним не работает, берешь отладчик, ставишь бряк на свою функцию, и смотришь, как вызывается true функция, какие параметры, и что со стеком, ну и где падает конкретно, потому что иначе это гадание все.
Отлаживал длл, ничего интересного не получалось. Просто захожу в функцию и крит.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#29
Пробуйте с другим патчем. Возможно все таки тут не совсем он чистый и защите не нравится откуда вызывается функция true_UNetworkHandler_OutgoingPacket.
Ответ
#30
Zubastic Написал:Там приходит все нормально...

Добавлено через 48 секунд

Так и вызываю. Код и ргварда, в итоге крит с ошибкой ревив пакета.

Отлаживал длл, ничего интересного не получалось. Просто захожу в функцию и крит.

Как длл в процесс грузишь? В общем, скомпиль и кинь сюда, я гляну.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Свой сниффер и редактор пакетов 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 Гость(ей)