А возможно перехватывать пакеты не перхватывая функции из engine.dll, а
перехватывая например send и recv? или я тогда смогу только прослушивать а отправлять не смогу?
если красиво заморочиться, то сможешь и прослушивать, и отправлять, и блокировать прием/отправку некоторых пакетов... только придется решать проблему с шифрацией трафика, а это значительно сложнее, чем написание обычного бота
если красиво заморочиться, то сможешь и прослушивать, и отправлять, и блокировать прием/отправку некоторых пакетов... только придется решать проблему с шифрацией трафика, а это значительно сложнее, чем написание обычного бота
Ну коннект к логин серверу я взял тут готовый и сделал конект к гейм серверу. Наваял формочку с инвентарём, всё показывает, пакеты могу отправлять. Т.е. можно сказать что с шифацией разобрался. Но делать полноценного ООГ бота мне не под силу, да и не зачем - есть волкер.
Я думал о чём-то вроде небольшого плагина для клиента. Перехватывать функции из engine.dll - у меня тоже врятли получится, вот подумал на счёт Send и Recv
Если можешь расшифровать трафик, то влазишь внутрь клиента (любой удобный вид инъекции), и дальше сплайсишь send и recv, причем лучше в библиотеке ws2_32.dll.
C send'ом проще: делаешь сплайс, в своем обработчике получаешь буфер, делаешь с ним все что хочешь и передаешь управление оригинальной функции; с recv чуть сложнее: нужно подменять точку возврата, передавать управление оригинальной функции, дожидаешься окончание ее работы, проверяешь результат (если есть данные, обрабатываешь их), и возвращаешь управление в вызываемую функцию.
Вначале попробуй сделать перехват функций даже без действий, чтобы проверить контролирует ли клиент эти функции или нет, если не контролирует, то развиваешь функционал.
Есть еще прикольный вариант: пишешь свою библиотеку wsock32.dll, по набору экспортируемых функций идентичную оригинальной, которая только передает управление библиотеке из system32, ну и плюс обрабатывает трафик, кое-где такой элементарный трюк работает.
с recv чуть сложнее: нужно подменять точку возврата, передавать управление оригинальной функции, дожидаешься окончание ее работы, проверяешь результат (если есть данные, обрабатываешь их), и возвращаешь управление в вызываемую функцию.
Не бойся, это не так страшно как кажется, к тому же все это описано с учетом различных защит и их проверок, т.е. чтобы быть максимально незаметным, начинать можно с простых конструкций (как у тебя описан new_recv).
Да незаметность мне не важна, я играю на бото-сервере
Просто я не знаю как делаются такие вещи как подмена точки возврата
Если неважна, тогда забудь об этом
Берешь вначале вызываешь оригинальную функцию recv, если она вернула данные, то обрабатываешь их, потом возвращаешь результат вызываемой программе.
Также не забывай учитывать flags = MSG_PEEK, а то будут косяки.