Elecktron, так проблема же не найти сенд, а правильно вызвать.
Вот здесь
Код:
void _cdecl SendPacket_Hook(void* obj, char* format, ...)
{
if(lpSendPacketObject == 0)
lpSendPacketObject = obj;
va_list args;
va_start(args, format);
printf("Format: %s\n", format);
SendPacket_Detour->Remove(); //Снял хук
SendPacket(obj, format, args); //<-- волнующий меня момент
SendPacket_Detour->Apply(); //Поставил хук
}
Собственно, а что же конкретно находится в args? На попытку вызвать оригинальную функцию сервер отвечает мне дисконектом, значит я ему передаю какую-то фигню.
А какие плагины? У меня оля с сод/фантом в лучшем случае просто зависает, в худшем краш
Добавлено через 5 часов 42 минуты
Экспериментальным путем выяснил, что все параметры в порядке, тогда почему функция отказывается работать.
Зашел на сервер, выбрал чара, после этого активировал хук, начал клацать скилы и пытаться ходить. В логе видно, что хук срабатывает, в args лежит указатель на правильный пакет, но никаких действий не происходит
Последний раз редактировалось Sinn3r, 03.03.2013 в 08:41.
Причина: Добавлено сообщение
Sinn3r, а где запихивание в ecx указателя на объект unetworkhandle перед вызовом сенда? (правд могу и ошибаться что sendpacket это метод класса unetworkhandle, не баловался с ним)
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти
Morfik, вроде-бы не надо, объект идет первым параметром.
Кстати, если поставить хук в vtable, а вызывать оригинал джампом непосредственно из того места куда указывала таблица, то все вроде работает, но сцуко, это кошмарная реализация
cdecl
Основной способ вызова для Си (отсюда название, сокращение от «c-declaration»). Аргументы передаются через стек, справа налево. Очистку стека производит вызывающая программа. Это основной способ вызова функций с переменным числом аргументов (например, printf(…))
то есть твой объект идет параметром - передается в стек, а должен быть передан в регистр ecx
могу и ошибаться, но поменять 2 строки с ручным запихиваетм объекта в ecx не долго
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти
за идею c UNetworkHandler.Init спасибо, а то я как дурак хукал адднетворк что бы получить объект.
Остальное уже сделано, и к моей проблеме не относится...вроде бы
такой вопрос можно ли каким то образом послать пакет 0000000000000 ????
зы скиньте что-ли чудо ольку которая вм протек обходит(у меня ни с оли адвансер ни с фантомом ни с чем не обходит даже ис дебагер персент в вм протекте хе хе))) +
кс если получить послать пакет 0000000000 то можно снять любую защиту в 2 щета, изначально послать ключик 00000000 и пакет 00000000 и тогда получим чистый ключ которым все шифруется не снимая вм протект и прочую лабуду сейчас над этим и работаю
Последний раз редактировалось Deadly, 04.03.2013 в 14:26.
Ну что же, апнем старую тему, подскажет кто как найти адрес функций Encrypt\Decrypt в клиенте Епизод? Да и вообще как их можно найти через туже ольку... Сенд пакет можно найти вручную в любом из Request пакетов, я всегда ищу в RequestAutoSoulShot вроде в eax(точно не помню), а как можно найти крипт и декрпт?