Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 03.03.2013, 08:41   #21
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

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 вне форума   Ответить с цитированием
Старый 03.03.2013, 12:57   #22
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

Sinn3r, а где запихивание в ecx указателя на объект unetworkhandle перед вызовом сенда? (правд могу и ошибаться что sendpacket это метод класса unetworkhandle, не баловался с ним)
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти

служба поддержки 4gay - ICQ 642274822
Morfik вне форума   Ответить с цитированием
Старый 03.03.2013, 14:47   #23
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Morfik, вроде-бы не надо, объект идет первым параметром.
Кстати, если поставить хук в vtable, а вызывать оригинал джампом непосредственно из того места куда указывала таблица, то все вроде работает, но сцуко, это кошмарная реализация
Sinn3r вне форума   Ответить с цитированием
Старый 03.03.2013, 15:06   #24
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

Sinn3r, это у тебя да?
Код:
__declspec( naked ) void _cdecl jmpSendPacket(void* obj, char* format,...)
{
	_asm jmp lpSendPacket_Original
}
Цитата:
cdecl
Основной способ вызова для Си (отсюда название, сокращение от «c-declaration»). Аргументы передаются через стек, справа налево. Очистку стека производит вызывающая программа. Это основной способ вызова функций с переменным числом аргументов (например, printf(…))
то есть твой объект идет параметром - передается в стек, а должен быть передан в регистр ecx

могу и ошибаться, но поменять 2 строки с ручным запихиваетм объекта в ecx не долго
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти

служба поддержки 4gay - ICQ 642274822
Morfik вне форума   Ответить с цитированием
Старый 03.03.2013, 22:50   #25
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Сделал так
Код:
lpOriginalSend = *(DWORD*)((DWORD)SendPacket + 1) + 5 + (DWORD)SendPacket;
SendPacket_Detour = new Detour(SendPacket, jmpSendPacket);
SendPacket_Detour->Apply();

__declspec( naked ) void _cdecl jmpSendPacket(void* This, char* format,...)
{
	_asm jmp [lpOriginalSend]
}
работает. А вот так
Код:
SendPacket_Detour = new Detour(SendPacket, SendPacket_Hook);
SendPacket_Detour->Apply();

void _cdecl SendPacket_Hook(void* obj, char* format, ...)
{
	va_list args;
	va_start(args, format);
	SendPacket_Detour->Remove();
	SendPacket(obj, format, args);
	SendPacket_Detour->Apply();
}
нет.

До этого пробовал ложить объект в ecx, но ничего не вышло, ибо это cdecl, а не thiscall
Sinn3r вне форума   Ответить с цитированием
Старый 03.03.2013, 23:01   #26
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

Sinn3r, методы классов как раз таки и должны быть thiscall... как бы
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти

служба поддержки 4gay - ICQ 642274822
Morfik вне форума   Ответить с цитированием
Старый 03.03.2013, 23:03   #27
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

Так выглядит лог пакетов в игре

но при этом никаких действий не совершается, хук срабатывает, но оригинал не вызывается

Добавлено через 1 минуту
Morfik, осмелюсь предположить, что это функция, а не метод
Цитата:
Сообщение от GoldFinch Посмотреть сообщение
Этот метод передает формат пакета и его данные в неэкспортируемую функцию отправки пакета
void __cdecl SendPacket(UNetworkHandler*,char*,...) .

Последний раз редактировалось Sinn3r, 03.03.2013 в 23:05. Причина: Добавлено сообщение
Sinn3r вне форума   Ответить с цитированием
Старый 04.03.2013, 12:41   #28
Новичок
 
Регистрация: 06.12.2010
Сообщений: 18
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Sinn3r пока неопределено
По умолчанию

за идею c UNetworkHandler.Init спасибо, а то я как дурак хукал адднетворк что бы получить объект.
Остальное уже сделано, и к моей проблеме не относится...вроде бы
Sinn3r вне форума   Ответить с цитированием
Старый 04.03.2013, 14:15   #29
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 46
Сказал Спасибо: 0
Имеет 14 спасибок в 9 сообщенях
Deadly пока неопределено
По умолчанию

такой вопрос можно ли каким то образом послать пакет 0000000000000 ????
зы скиньте что-ли чудо ольку которая вм протек обходит(у меня ни с оли адвансер ни с фантомом ни с чем не обходит даже ис дебагер персент в вм протекте хе хе))) +

кс если получить послать пакет 0000000000 то можно снять любую защиту в 2 щета, изначально послать ключик 00000000 и пакет 00000000 и тогда получим чистый ключ которым все шифруется не снимая вм протект и прочую лабуду сейчас над этим и работаю

Последний раз редактировалось Deadly, 04.03.2013 в 14:26.
Deadly вне форума   Ответить с цитированием
Старый 12.04.2015, 07:57   #30
Новичок
 
Регистрация: 21.12.2012
Сообщений: 3
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
[ Mifesto ] пока неопределено
По умолчанию

Ну что же, апнем старую тему, подскажет кто как найти адрес функций Encrypt\Decrypt в клиенте Епизод? Да и вообще как их можно найти через туже ольку... Сенд пакет можно найти вручную в любом из Request пакетов, я всегда ищу в RequestAutoSoulShot вроде в eax(точно не помню), а как можно найти крипт и декрпт?
[ Mifesto ] вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

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


Часовой пояс GMT +4, время: 21:35.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!