В C++ треде все молчат, может тут повезёт.. Есть одна игра, мне нужно сделать так чтобы я имел возможность отклонять неугодные мне данные, как входящие так и исходящие. Пытался сделать это при помощи return 0 в hook'нутой функции WSASend, но оно продолжало спамить этими данными до тех пор пока они не отправятся. Пробовал шаманить с lpCompletionRoutine но ничего не получилось. С WSARecv вообще дичь, при return 0 разрывает соединение с игрой. Как я понял, самым хорошим и разумным решением будет поднятие такого-же сервера (или как это называется я не знаю) в том же процессе и переадресация данных на него, а он уже будет фильтровать и отправлять только то что угодно мне. Только проблема в том что я не знаю как это делается. Пожалуйста, помогите.
>>233571479 (OP) Попробуй так: какой-нибудь прогой-проксификатором заставь игру посылать пакеты на 127.0.0.1, и напиши сервер, который слушает локальный трафик и переотправляет его куда надо, но только с нужной тебе фильтрацией. На питоне такое на изи делается.
>>233574293 Мне нужно понять как поднять свой такой же сервер в том же процессе ( там как-то через WSAStartup вроде и тд ) но я нихуя не понимаю что и для чего.
>>233571479 (OP) Я помню, на третьем курсе у меня был такой залупный препод по схемотехнике, который дрочил за госты оформления, но меня больше всего вымораживало то, что он не принимал имена переменных, в которых есть буквы "I" и "0", потому что по его словам их можно перепутать с цифрами 1 и 0. Я тогда еще думал, каким же надо быть дебилом, чтобы допустить такую ситуацию, когда можно перепутать I и 1. Спасибо, ОП, через десять лет я всё-таки увидел такую ситуацию и примено понял, каким дебилом надо быть, чтобы такое допустить. используй митм, перенаправь все пакеты на другой адрес (скажем, на локалхост), где будет твой сервер принимать пакеты, фильтровать, и отправлять отфильтрованные пакеты куда надо
>>233571479 (OP) Поясни хоть что сделать хочешь, скорее всего твой подход не очень хорош. А так сначала разберись ожидает ли твоя игра какого либо ответа на эти данные, хотя почти все уже научились давненько научились синхронизироваться с сервером и отключать если что то идет не так.
>>233576567 Если ты не будешь перехватывать вызов хуком, а просто создашь свой митм сервер - то можешь абсолютно любым способом открыть сокет на прослушивание и принять подключение от игры.
>>233576567 Какая разница, это же просто функции для работы с сокетами. Взял бы да на питоне написал сервер из 10 строчек, иначе будешь с огромной простыней из говновинапи ебаться >>233576248
>>233576863 Скорее всего не произойдет, потому что тебе еще нужно понять что должно произойти и эмулировать это, а не просто отправить это на свой сервер. А все что тебе нужно что бы поднять "сервер" это начать принимать данные с сокета в который ты их отправляешь.
>>233576863 Оп, поясни чего ты хочешь добиться, потому что ты делаешь какую то хуйню, любая уважающая себя игра пошлет тебя нахуй если ты будешь с пакетами шаманить. Мимо пишу читы уже 10000 лет
>>233577441 У меня УЖЕ получается временно сделать так чтобы пакеты не отправлялись. Есть переменная a, если она true то пакеты не отправляются, но как только она не равна true то пакеты снова отправляются, проблема в том что пакеты те которые были отклонены отправляются до тех пор пока не отправятся.
>>233577734 >уже получается >нихуя не работает Просто блять поясни что ты хочешь сделать, это не так сложно. А по теме анон выше правильно говорил, что тебе нужно понять что игра хочет, может это соединение вообще TCP и оно ждет подтверждение что пакет прошел.
>>233577734 Тогда это таким хуком не делается, т.к с вероятностью 99% вне функции WSAsend происходит проверка на количество отправленных байт и есть некоторая очередь пакетов.
>>233578523 Госпади, хотя бы прочитай документацию на функцию. 0 это то что функция прошла без ошибок, данные она копирует в буфер котоырй вроде как второй аргумент/
>>233578523 Тогда непонятно, что может вызывать спам одним и тем же пакетом. Простая логика предполагает: Отправляем пакет->получаем ответ->если ответ неверный, отправляем ещё раз, иначе отправляем следующий пакет.
>>233578391 О чём и речь. Если там правда UDP и очередь пакетов с проверкой на стороне клиента - подними сервер на сокетах, как тебе посоветовали, на локалхосте и фильтруй их там. >>233578523 У тебя половина аргументов - указатели, в них вся инфа записывается, возвращаемое значение - это код ошибки.
>>233582354 Скорее Вы, сударь, не понимаете что мне нужно. Я уже несколько раз рассказал что мне нужно фильтровать пакеты, а для этого нужен посредник в виде моего сокета.
>>233571479 (OP) Извините, что не по теме, тут просто про программирование говорят. Так вот, смогу ли я получать деньги на жизнь с игры на питоне, или прибыль ток из сайтов можно получать?
>>233582640 В геймдев идут точно не за деньгами, но на жизнь хватит. Ну и обычно именно из применения вытекает стек технологий, непонятно зачем тебе сдался пайтон в играх, если сейчас 95% игр делают или на юнити, или на уе.
Что-то мне говорит о том что сервер отправляет некое подтверждение в ответ на тот пакет который отправляет игра,игра его не получает и дрочит этот пакет пока не получит ответ от сервера
>>233583164 Нет, ты не понял. WSASend (игра) дрочит пакеты, а если WSARecv отменить то сразу разрывает подключение. Мне хотя бы сделать так чтобы игра WSASend не дрочила.
>>233583231 А зачем? Тебя сервер скорее всего кикнет как поймет что данные у него и у тебя стали слишком сильно различаться. лучше в твоем хуке меняй данные которые отсылаются
>>233583440 По моему это ты вообще не понимаешь. я в курсе WSASend это отправка пакетов игрой, А WSARecv принятие пакетов сервера. Мне нужно сделать так чтобы я мог не отправлять некоторые данные по своему желанию, но так чтобы игра думала что они отправились.
>>233583231 Какие у тебя там хуки? Если ты перехватываешь тцп на какой-то из стадий то там может быть любая хуйня вплоть до сырых фреймов В оппосте ты правильно написал про сервер посередине, гугли цпп тцп (/прокси) сервер, настраивай его на обычное эхо, меняй адрес в игре на локальный и адрес сервера на игровой
>>233583703 А без смены адреса как-то не получится просто отправить сразу на тот сокет который я создал? Если я его в том же процессе создал, в той же либе. Хук у меня стоит на WSASend.
>>233583558 >>233583548 В общем смотри. Скорее всего у тебя не получится сделать как ты хочешь без реверса протокола. Почему? Потому что на каждый запрос, вероятнее всего, приходит ответ от сервера или конфирмейшн или ещё какая-нибудь шляпа в зависимости от опыта разрабов и их извращённости. Второе, даже в рамках TCP протокол верхнего уровня может быть с ретрансмитами (зависит от извращённости авторов протокола), поэтому показав что данные ушли поставив свой хук ты не решишь проблему т.к. надо ещё послать ответ, т.е. дёрнуть wsasend с правильным ответом если он должен быть. Третье, проксификатор тебе верно советуют, но С++ тебе тут не нужен, бери питон или Go (лучше go) и пиши на нём. 4. Сессия шифруется? Если да, то ты попал. 5. Вооружайся ваершарком и реверси протокол... Ах да, это было в 1. Я подозреваю что просто взять и дропунть пакет ты не сможешь, но это надо проверять.
>>233583902 Такое уже делал один чувак, но там сервер в exe а не в dll как у меня. Этот сервер служил посредником. У WSASend нет правильного ответа, я смотрел, он всегда возвращает 0.
>>233583959 Потому что он дропает пакет, а внутренняя проверка TCP на то что пакет дошел ахуевает с такого и пытается отправить его еще раз. Вообще странно что у него игра на tcp, их почти всегда на udp делаютнастолько что я только 1 игру на tcp знаю.
Написал пока такой код, попробовал его. В хуке делаю переадресацию на свой сокет. Игра выкидывает с сервера с текстом "when sending on a datagram socket using a sendto call no address was supplied".
>>233571479 (OP) >WSARecv вообще дичь, при return 0 разрывает соединение с игрой Ну конечно клиент охуеет и завершит сессию, лол Куда лезишь-то если совсем долбаеб
>>233584055 А ты все поля заполняешь когда делаешь возврат из WSASend? там же буферы, статусы и т.п. Тоже самое и WSARecv, надо не только 0 вернуть но ещё и буфер верными данными забить и статусы все выставить.
>>233584515 Этого мало. Как минимум lpNumberOfBytesSent надо заполнить равным как минимум тому что было в PWSABUF lpBuffers, DWORD dwBufferCount, Почитай МСД, поймёшь что я имею ввиду. Если есть LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, то надо дёрнуть CompletionRoutine и выдать её правильные параметры.
>>233584571 >lpNumberOfBytesSent A pointer to the number, in bytes, sent by this call if the I/O operation completes immediately. Use NULL for this parameter if the lpOverlapped parameter is not NULL to avoid potentially erroneous results. This parameter can be NULL only if the lpOverlapped parameter is not NULL. Как минимум ты должен выставить сколько отправил байт если условия соблюдены. Ты протрейсилто, что тебе приходит в хук?
>>233584742 Так для тебя заполняют чтобы ты послал данные, лол. Тебе надо реализовать правильную (т.е. как MSDN говорит) обработку вызова WSASend чтобы с той стороны убедились что данные отправились.
>>233584867 Реализовать правильный вызов WSASend для вызывающего приложения так, как если бы это делала система виндовс. Можно погуглить пример кода WSASend hook example (хотя там хуйня какая-то).
>>233584931 Какой у тебя там хук? Ты уверен что вообще понимаешь на какой стадии он выстреливает? По описанию с бесконечной попыткой отправить один и тот же пакет в контексте тцп ты блять где-то фундаментально обосрался так что спасает только имплементация клиента Если ты перехватываешь значения функции до прокидывания их в Send, то очевидно должен вернуть такую же структуру данных для вызова Send
>>233586005 Я так и понял Он стреляет себе в яйца прокидывая тупо 0 в Send, клиент еще до хождения в сеть охуевает и выкидывает какую-то хуйню, игра хендлит это тупо повтором вызова, лол
>>233586245 Боже блять, ебанутый здесь не я, а ты. Я ХУКАЮ ФУНКЦИЮ WSASEND КОТОРАЯ ЗАНИМАЕТСЯ ОТПРАВКОЙ ДАННЫХ, ВОЗВРАЩАЮ НОЛЬ БЕЗ ВЫЗОВА ОРИГИНАЛЬНОГО WSASEND. СХУЯЛИ ОНИ ОТПРАВЛЕНЫ БУДУТ ТО БЛЯТЬ.
>>233586158 0 это нормальный статус возврата. Надо только понять оверлапед функция или нет. Если оверлапед на надо вести как говоирт мсдн >If an overlapped operation completes immediately, WSASend returns a value of zero and the lpNumberOfBytesSent parameter is updated with the number of bytes sent. Но ОП не хочет этого понять.
>>233586630 Эти байтики еще и посчитать нужно чтобы нормально зайфейчить, там же еще всякие хедеры офсеты паддинги и тд Если просто хуйню писать может просто отвалиться
>>233586949 тебе надо понять 0 он или нет. это УКАЗАТЕЛЬ! >>233586829 ты заебал, честно. Это указатель на инт, внутри лежит то сколько байт послала функция WSASend. Ты по сути имплементишь эту WSASend и тебе надо првильно заполнить ВСЕ возвращаемые значения и вызвать все нужные функции.
Я всё равно хочу попробовать, вдруг поможет. lpNumberOfBytesSent не пустой же, значит используется. Только вот как сказал анон выше, я не знаю как их посчитать. sizeof(lpBuffers->buf) не поможет?
>>233587201 радуйся, оно не оврелапед. тебе надо заполнить только lpNumberOfBytesSent (это указатель, гугли что надо сделать чтобы заполнить данные по нему) как я писал выше и должно заработать по идее.
>>233587262 ты английский знаешь? в МСДН написано в каких структурах и что передаётся. тебе надо всего лишь сложить все длины буферов которые передались.
>>233587337 Я с С++ слабо знаком, начал изучать потому что он больше всего подходит для моих задач. Простите за тупость. Для меня сейчас даже то действие которое кажется для Вас, гуру, банальным - сложное.
>>233571479 (OP) >переадресация данных ну то есть тебе нужен proxy/socks server, на первый взгляд. можно воспользоваться уже готовым, если не планируются танцы с бубном т.е. в данном случае попробуй воспользоваться 3proxy. ознакомься с документацией и сделай выводы. про shadowsocks я тактично умолчу)
Мне нужно задать новое значение lpNumberOfBytesSent которое будет равно длине байт которые были переданы в WSASend или приплюсовать к тем что там уже были?
>>233587590 lpNumberOfBytesSent это указатель. тебе надо положить данные по указателю ULONG len = 0 for (int i = 0; i < dwBufferCount; i++) { len += lpBuffers->len; }
>>233587803 Что-то изменилось, я вместе с этим еще в консоли данные выводил, обычно спамило одним пакетом, а тут как будто все ок. Но потом с игры выкинуло..
>>233587878 значит хук работает как надо. тебе же надо дропать определённые пакеты, а ты, видимо, дропаешь все подряд, кек. главнео чтобы оверлапед не было, а то там надо ещё пинать функцию колбэк.
>>233587989 ну так я тебе говорил что надо понимать какие пакеты ходят между серваком и клиентом, т.е. надо реверсить протокол, выбирать какие пакеты дропать, какие нет, и посылать ответы на дропнутые пакеты чем-то что тебе надо.
>>233588106 подумай головой опять, блин. оно работало так, будето у тебя пакет не отправился, а тут оно думает что пакеты отправились, а ответов на них не пришло с сервака и поэтому оно и кикнуло тебя.
>>233588164 ты, блин, понял что ты сделал в WSASend? Заканчивай уже бездумно код писать, это не срабоает. Вот тебе винрарная книга по С http://www.combook.ru/product/1855726/ начини с ней и читай МСДН, там всё написано. Я съебал спать.
>>233571479 (OP) >В C++ треде все молчат, может тут повезёт.. Есть одна игра, мне нужно сделать так чтобы я имел возможность отклонять неугодные мне данные, как входящие так и исходящие. Пытался сделать это при помощи return 0 в hook'нутой функции WSASend, но оно продолжало спамить этими данными до тех пор пока они не отправятся. Пробовал шаманить с lpCompletionRoutine но ничего не получилось. С WSARecv вообще дичь, при return 0 разрывает соединение с игрой. Как я понял, самым хорошим и разумным решением будет поднятие такого-же сервера (или как это называется я не знаю) в том же процессе и переадресация данных на него, а он уже будет фильтровать и отправлять только то что угодно мне. Только проблема в том что я не знаю как это делается. Пожалуйста, помогите.
Ты нихуя не шаришь, нихуя не описал, наворотил какой-то хуйни, полез туда, куда не знаешь, оперируешь терминами которые не знаешь, и просишь блядь о помощи. Ты блядь нахуй нормальный?
Давай долбоеб определимся для начала: 1. что за игра? 2. это клиент-серверная игра? Есть игровой клиент? 3. Сколько игровых серверов в мире, на каком порту сидят? 4. Данные передаются через tcp/ip? 5. Что ты конкретно хочешь сделать? Чит? Бот? Что именно?
Давай только без "ой ну я не знаю что, мне нужно что бы пакеты перекрыть", это нихуя не ответ. Нужно больше деталей. Конкретная цель какая? Инструментария дохуя.
- Спустя 10 лет появились навороченные IDE обмазанные подсветкой, охуенно выправленные и выточенные шрифты. - Далее, какой смысл именовать переменные с 1 и 0, да еще в добавок в середине слова? Тут надо не за 1 и 0 пиздить, а за сам нейминг. - Нехуй писать в больших областях видимости. - Че там за ЯП такой, который позволит использовать переменную, которая не объявлена?
Вообщем стандартная проблема схемотехников учащих пограмированию. У них настолько уебищный кодстайл, что приходится маятся какой то хуйней. Разгребал за парой их хуйню, когда они отъезжали. Проект похож на ведро, в которое срали 10 лет.
>>233590035 1. Minecraft Java 2. Да 3. Бесконечно, на разных 4. TCP 5. Отмена отправки данных таким образом чтобы с сервера не выкинуло с возможностью возобновления отправки других данных
>>233590155 такому долбоебу, как ты легченет, будет в сам jar'ник инжектнуть то, что тебе надо манкипатчингом и прочей хунтой (майнкрафт набыдлокожен, так что там стопроцов сингтон на синглтоне)
небось когда .exe файлик открываешь текстовым редактором, то он тоже зашифрован?)))
с архитектурой подобных приложений я мало знаком, но дженерик идея состоит в том, чтобы данные обрабатывать в два потока. 1 на прием, а другой на передачу
>>233590155 >5. Отмена отправки данных таким образом чтобы с сервера не выкинуло с возможностью возобновления отправки других данных >
Никак. Потому что: > 4. TCP
Ты не понимаешь видимо как это устроено. Что такое пакеты, что такое очередь пакетов, что такое epoll, poll, select, и так далее.
Ты не понимаешь, что такое сервер, даже представления не имеешь. И это трудно для объяснения.
Если кратко: tcp - гарантирует доставку пакета в IP протоколе, по очереди, а не в разнобой.
Другими словами: ну допустим ты через WPE заинжектился в процесс, ну допустим ты смотришь пакеты. И что?
Можешь ли ты манипулировать данными в пакете? Да, можешь. Будут ли они работать, эти манипуляции с УЖЕ СУЩЕСТВУЮЩИМИ ПАКЕТАМИ?
В большинстве случаев - нет не будут.
Почему?
Потому что у пакета есть ID, есть тело пакета. Проверяется на сервере айдишник пакета, и его содержимое. СОдержимое парсится, и снова таки проверяется.
Если айдишник пакета не соответствует известным пакетам которые уже предопределены разработчиком, то этот пакет улетает НАХУЙ, он никак не обрабатывается, и никакой логики нет.
Так как вся твоя игра это банальная реакция на тригеры связанные с пакетами, то соотвественно при появлении аномалий вроде этой, когда ты шлешь непойми что, куда-то, то тебя дисконектнет.
Есть ещё вариант, который скорее всего по умолчанию включен это шифрование данных. Любая манипуляция с такими пакетами - сразу дисконект, потому что это протокол такой. Иначе и быть не может. Ничего ты тут не сделаешь.
Есть ещё вариант: ты хочешь например сделать спидхак какой-то (снова таки ты нихуя не рассказал что ты хочешь сделать). Для этого тебе нужно открыть сокет, т.е. что бы была игра запущена, записать пакет, убедится что ничего не зашифровано, что он один и тот же постоянно, модернизировать как тебе нужно, и отправлять сколько тебе нужно раз.
Если серверная часть написана ебланами - прокатит для разных целей.
Именно так и работают различные боты. Различные читы в разных играх.
=====================
В твоем случае ты не знаешь что ты хочешь, и нахуя. Minecraft очень популярная игра, я уверен, для твоих хотелок уже есть готовые полностью рабочие читы, просто напрягись и поищи, и скорее всего даже безплатные.
Есть всякие zhyk.ru, elitepvpers, и так далее. Смотри там.
>>233590493 и тот поток, который будет исходящим, должен проходить через зендер, накотором уже нужно отслеживать последовательность байтов заголовка того пакета, с которого начнется передача нежелательной цепочки данных>>233590493
>>233590084 Там был не ЯП, а язык описания железа, даже не на высоком уровне типа вхдл или верилога, а на уровне отдельных транзисторов и нетлистов, так что названия типа AddressBus12 (с единичкой в середине, как видишь) достаточно часто встречались для именования двенадцатого проводка в шине.
>>233590084 Алсо > - Спустя 10 лет появились навороченные IDE обмазанные подсветкой, охуенно выправленные и выточенные шрифты. В схемотехнике вообще всё вот совсем не так. Ты видел актуальные версии Виртуозо? Оно выглядит так, словно Каденс живут еще в 90-х, когда вместо ui/ux дизайнеров над этим работали даже не программисты, а те самые схемотехники.
>>233592098 Любой 3д-редактор, видеоредактор, система проектирования, да и ворд с экселем, будут выглядеть также, если вывести одновременно все опции, окна, менюшки и кнопки на экран. Только реально используется 5% от этого.