Бред

Ответить в тред Ответить в тред
Аноним # OP 03/02/21 Срд 22:12:56 2393364901
image.png 17Кб, 919x271
919x271
image.png 82Кб, 945x400
945x400
image.png 29Кб, 502x489
502x489
image.png 25Кб, 516x303
516x303
Когда-то давно я создавал тред в котором просил помощи в написании кода для чтения буфера. Как потом выяснилось, игра использовала RSA шифрование из-за которого я не смогу понять какие данные там передаются. Я забил на эту игру. Совсем недавно мне понадобился этот код для вывода байт буфера в консоль. Тогда я тестировал его на WSASend и он работал, но сейчас мне нужно вывести содержимое буфера WSARecv. И по идее это должно работать, но почему-то выводятся нолики. А при обычном cout << lpBuffers->buf << endl выводит просто нихуя. Помогите понять в чем проблема. Игра использует функции WSARecv и recv. Я пробовал перехватывать функцию recv и делать сразу return 0 но игра по прежнему работала, по этому я думаю что главная функция принятия данных это WSARecv. Скриншот API вызовов этих функций и их подробности прилагаю.
Аноним 03/02/21 Срд 22:13:16 2393365242
image.png 25Кб, 516x303
516x303
C++ WinAPI есличо
Аноним # OP 03/02/21 Срд 22:14:12 2393366133
image.png 37Кб, 921x353
921x353
Аноним 03/02/21 Срд 22:14:51 2393366584
b
Аноним 03/02/21 Срд 22:14:56 2393366655
>>239336490 (OP)
Дебич, ты вначале должен вызвать WSARecv чтобы оно данные приняла, а потом их печатать
Аноним # OP 03/02/21 Срд 22:17:29 2393367976
>>239336613
В for изменил lpBuffers на buffer но все так же нули.

>>239336665
Мне нужно данные буфера получить и решить допускать ли их до клиента или нет. Данные уже приняты и находятся в буфере, но почему-то я не могу их вывести.
Аноним 03/02/21 Срд 22:18:48 2393369347
>>239336797
Данные еще не приняты, поэтому у тебя там нули.
Данные принимаются только тогда когда ты вызываешь оригинальный WSARecv
Аноним # OP 03/02/21 Срд 22:20:45 2393370788
>>239336934
Ты прав. Извини, я идиот. Как же быть, если я хочу чтобы данные не дошли до клиента но иметь возможность их прочитать?
Аноним # OP 03/02/21 Срд 22:21:46 2393371739
>>239336934
Данные еще не приняты, поэтому у тебя там нули.
Данные принимаются только тогда когда ты вызываешь оригинальный WSARecv

А с WSASend так же?
Аноним # OP 03/02/21 Срд 22:23:32 23933732210
>>239337078
Если я вызову оригинальный WSARecv а потом например очищу буфер куда записались данные или сделаю lpBuffers->len = 0 будет работать?
Аноним 03/02/21 Срд 22:24:25 23933739411
>>239337078
Вызываешь оригинальный WSARecv
Проверяешь что там в буфере

Потом делаешь что хочешь - модифицируешь буфер или возвращаешь ошибку
Аноним 03/02/21 Срд 22:25:40 23933750312
>>239337173
>А с WSASend так же?
WSASend отправляет данные.
Т.е. в приложении уже есть какой-то буффер с данными которые ты хочешь отправить. Поэтому он не пустой.

А WSARecv получает данные, поэтому буффер изначально пустой
Аноним 03/02/21 Срд 22:26:34 23933758213
>>239337322
Да будет. Но еще зависит от того как приложение обрабатываешь такие ошибки. Может оно вообще не ожидает что такое может случится и вылетит с крэшем
Аноним # OP 03/02/21 Срд 22:29:54 23933785814
>>239337394
А как можно отмодифицировать буфер чтобы игра не крашнулась и посчитала что там нихуя нет?
Аноним # OP 03/02/21 Срд 22:30:52 23933795015
>>239337582
Я попробовал lpBuffers->len = 0, dwBufferCount = 0, lpNumberOfBytesRecvd = 0 но игра все равно работает и читает данные..
Аноним 03/02/21 Срд 22:32:10 23933807116
>>239337950
после вызова оригинальной WSARecv ?
Аноним # OP 03/02/21 Срд 22:33:59 23933825217
Аноним # OP 03/02/21 Срд 22:34:39 23933831318
image.png 13Кб, 916x147
916x147
>>239338071
После вызова WSARecv но до return
Аноним # OP 03/02/21 Срд 22:37:30 23933856319
Подскажите пожалуйста как можно реализовать так чтобы можно было не допустить данные при этом их прочитав.
Аноним 03/02/21 Срд 22:37:36 23933857020
>>239338252
Попробуй только так:
>lpBuffers->len = 0

Плюс lpNumberOfBytesRecvd это указатель, вначале нужно проверить если не ноль, а потом *lpNumberOfBytesRecvd = 0
03/02/21 Срд 22:38:36 23933866221
>>239336613
тебя не смущает что ты должен вызвать _WSARecv, который запишет ответ в lpBuffers и сохранив ретурнавалюа, а потом выводить lpBuffers?
или ты ебанутый и целевой буффер до заполнения хочешь смотреть?
Аноним # OP 03/02/21 Срд 22:39:10 23933870922
>>239338662
Я уже так сделал, прочитай ниже
Аноним 03/02/21 Срд 22:39:18 23933871923
unnamed.jpg 22Кб, 465x348
465x348
>>239336665
>Дебич, ты вначале должен вызвать WSARecv чтобы оно данные приняла, а потом их печатать

в голос с этого господина, который пытается кс1,6 хакнуть
03/02/21 Срд 22:39:48 23933875324
>>239338709
мы блять не успеваем ответ тебе писать
че тогда тебе унжно?
Аноним # OP 03/02/21 Срд 22:40:04 23933877425
>>239338570
lpBuffers->len = 0; не получается
Или надо со звездочкой?
Аноним # OP 03/02/21 Срд 22:40:43 23933884326
>>239338753
Иметь возможность вывести буфер в консоль до того как игра увидит эти данные и если надо не допустить их до игры
Аноним # OP 03/02/21 Срд 22:41:27 23933890127
>>239338570
*lpNumberOfBytesRecvd = 0; моментальный дисконнект
Аноним 03/02/21 Срд 22:41:29 23933890528
>>239338774
lpBuffers оставь как есть, а lpNumberOfBytesRecvd со звездочкой, только вначале проверь что оно не ноль
Аноним # OP 03/02/21 Срд 22:42:32 23933898329
image.png 3Кб, 280x92
280x92
>>239338905
Так или тоже со звездочкой?
Аноним 03/02/21 Срд 22:43:46 23933906830
>>239338983
на картинке все правильно
Аноним # OP 03/02/21 Срд 22:44:07 23933909931
Аноним # OP 03/02/21 Срд 22:44:42 23933914032
>>239339068
Я видел что после WSARecv вызывается select, может есть возможность выдрать новые данные там?
Аноним 03/02/21 Срд 22:45:24 23933920133
>>239339099
значит в твоем приложении не предусмотрен вариант того что какой-то пакет не дойдет до него
Аноним # OP 03/02/21 Срд 22:46:13 23933926134
>>239339201
Но как оно вообще понимает что до него сейчас что-то должно дойти если я перехватываю вызов функции принятия?
Аноним 03/02/21 Срд 22:46:43 23933930735
>>239339140
>select
эта функция просто проверяет готовы ли сокеты на чтение или запись. Никаких данных ты там не увидишь
Аноним # OP 03/02/21 Срд 22:47:46 23933940036
>>239339307
Там вроде в readfds можно что-то указать, или например как-то из WSARecv высчитать сколько данных получил и выдрать как-то из самого сокета при вызове select (хз можно ли так вообще)
Аноним 03/02/21 Срд 22:48:25 23933944537
>>239339261
Ну представь себе что ты писал это приложение.
Ты выделяешь буффер под пакет из сети, вызваешь функцию чтения из сокета, а на выходе нихуя. Ну ты такой ладно, дисконнектим, завершаем всю хуйню
03/02/21 Срд 22:50:43 23933964438
>>239338843
тогда не делай это >>239338983 >>239338901 >>239338774
нужно определитсья как ты не хочешь "не допустить" пакет до игры
1. ты можешь вернуть удобный для тебя еррор код - https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsarecv#return-value
2. ты можешь вызывать не
_WSARecv(...lpBuffers)
а подготовить свой tmplpBuffers (подготовить память по размерам исходного lpBuffers и в конце еще освобождать будеьш) и подставлять его в _WSARecv
и если данные пропускаешь - копировать tmplpBuffers в lpBuffers
Аноним 03/02/21 Срд 22:53:39 23933990139
>>239339644
>ты можешь вызывать не
>_WSARecv(...lpBuffers)

Если вызов WSARecv идет в цикле, то ты дожен вызвать оригинальный _WSARecv, иначе на следующий вызов тебе придет "какбы" предыдущий ответ _WSARecv
Аноним # OP 03/02/21 Срд 22:55:10 23934000340
>>239339644
>2. ты можешь вызывать не
_WSARecv(...lpBuffers)
а подготовить свой tmplpBuffers (подготовить память по размерам исходного lpBuffers и в конце еще освобождать будеьш) и подставлять его в _WSARecv
и если данные пропускаешь - копировать tmplpBuffers в lpBuffers

Я не понял.. Можно прям как для дегенерата?
Аноним # OP 03/02/21 Срд 22:56:54 23934015241
>>239339445
>Ты выделяешь буффер под пакет из сети, вызваешь функцию чтения из сокета, а на выходе нихуя.

Но ведь может быть так что у игры в данный момент нет что она могла бы отдать. Разве нет?
Аноним 03/02/21 Срд 22:59:26 23934036842
>>239340152
Если вызывается WSARecv значит приложение в большинстве случаев уже знает что на сокет что-то пришло.
Обычно это делают как раз select-ом
Аноним # OP 03/02/21 Срд 23:01:07 23934049443
>>239340368
Так. А в select где-то можно узнать какие данные пришли?
03/02/21 Срд 23:01:37 23934053544
>>239339901
он и будет вызывать его просто не с оригинальным указателем куда запишется ответ, а со своим временным, обработает его и решит - нужно скопировать в целевой или нет

>>239340003
просто ты создаешь временный контейнер который подставишь вместо lpBuffers
Аноним # OP 03/02/21 Срд 23:01:59 23934056245
>>239340368
И какой функцией тогда принимаются данные и для чего WSARecv?
Аноним 03/02/21 Срд 23:02:24 23934060146
>>239340494
>к. А в select где-то можно узнать какие данные пришли?
Можно узнать только пришли данные или нет, а какие нельзя
Аноним 03/02/21 Срд 23:03:26 23934068247
>>239336490 (OP)
>2к21
>быть байтаебом
Проиграл с мани.
мимо enterprise-разраб
Аноним 03/02/21 Срд 23:04:13 23934075148
>>239340682
>Проиграл с мани.
>мимо enterprise-разраб

300к-в-месяц-байтоеб обоссал форпошлепа
Аноним 03/02/21 Срд 23:05:19 23934084249
>>239340562
>И какой функцией тогда принимаются данные и для чего WSARecv?
Данные принимаются WSARecv
Аноним # OP 03/02/21 Срд 23:07:24 23934102950
image.png 18Кб, 910x245
910x245
Аноним # OP 03/02/21 Срд 23:10:47 23934129451
>>239341029
Я не понимаю как выделить ей память если я не знаю что в буфере
Аноним # OP 03/02/21 Срд 23:12:08 23934140952
image.png 19Кб, 907x241
907x241
>>239341294
Сделал, сейчас буду тестить но вангую дисконнект
Аноним # OP 03/02/21 Срд 23:14:19 23934158553
>>239341409
Я либо что-то сделал не так, либо я вообще нихуя не понимаю. Я зажал боковую кнопку мыши но данные в клиент все равно грузятся..
03/02/21 Срд 23:14:23 23934159054
>>239341029
нет, это ошибочный код - ты на си с памятью умеешь работать или просто макака?

>>239341409
в этом коде ничего не изменилось тк ты просто взял указатель и сохранил в другую переменную - в итоге результат запишется в тоже место что и раньше

>>239341294
изучай приходящие dwBufferCount, lpBuffers - это массив WSABUF
я так поянл игра готовит под них память и подставляет в эту функцию - нужно сздать такую же
Аноним # OP 03/02/21 Срд 23:16:24 23934175155
>>239341590
Я в С++ мало понимаю, помоги пожалуйста с выделением памяти
Аноним # OP 03/02/21 Срд 23:19:12 23934195756
>>239341590
>я так понял игра готовит под них память и подставляет в эту функцию - нужно создать такую же

Но ведь это разве не будет то же самое что просто перезаписать этот ->buf нулями? Я пытался перезаписывать и меня дисконнектило
Аноним # OP 03/02/21 Срд 23:19:42 23934200157
>>239341957
Если я решу не записывать данные в lpBuffers
Аноним 03/02/21 Срд 23:20:38 23934206558
>>239341294
Так у тебя же известен размер получаемого. Просто выдели память malloc, void* в помощь.
03/02/21 Срд 23:22:15 23934218159
>>239341751
тогда ты не сможешь решить свою задачу
посмотри екземпл код по ссылке - там есть массив чаров, его пихают в WSABUF структуру, а её отправляют по указателю через & (представь это как массив с 1ой структуркой внутри), но на деле этих структур может быть больше 1 и каждая со своим массивом и длиной
https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsarecv#example-code

поэтмоу тебе и нужно изучить что на вход подает игра\приложение и дальше решать что будет
если там всегда dwBuffercount = 1 то можешь обойтись
WSABUF buf; DWORD cnt = 1;
buf.len = origbuf->len;
buf.buf = new char[buf.len]; // не забудь потом delete buf.buf
_WSARecv(...., &buf, &cnt,...)

>>239341957
если ты заполняешь нулями - это все равно результат просто с нулями, прилжение прочитает и поймет что ты хуйню прислал - я тебе говорил что возможно нужно давать int ответ что ошибка какая-либо по кодам ошибок wsarecv
ты блять определись как ты хочешь отвечать приложению чтобы не дать ему данные
Аноним # OP 03/02/21 Срд 23:22:18 23934218860
image.png 23Кб, 897x296
897x296
>>239342065
Я не знаю как это делается. Так не прокатит?
03/02/21 Срд 23:23:39 23934231161
>>239342065
ага для этого ему придется пройтись циклом по массиву из структур WSABUF, подготовить для каждой копию внутреннего buf размером len ну или собрать сумму + с учетом размера поля len и зааллокетить байт буфер который потом кастануть к WSABUF*, но оп даже не знает как работать с памятью в си
03/02/21 Срд 23:24:21 23934236062
>>239342188
это почти тоже самое - теперь ответ запишется туда же потому что buf под одним указателем (читай - В ОДНОМ МЕСТЕ ПАМЯТИ что и исходный)
Аноним # OP 03/02/21 Срд 23:24:39 23934238363
03/02/21 Срд 23:27:03 23934257964
>>239342383
ну если всегда один то вернись к >>239342188
test.buf = new byte[lpBuffers->len];
test.len = lpBuffers->len;
тогда они будут смотреть на разную область памяти и ты не затронешь оригинал который пришел в функцию
если захочешь чтобы результат применился сделаешь
memcpy из test.buf в lpBuffers->buf
в конце не забудь delete test.buf;
Аноним # OP 03/02/21 Срд 23:29:40 23934281465
>>239342579
Я немного не могу понять в чем разница между тем что я прошелся for по lpBuffers->buf и выставил нолики и тем что я сделал как пишешь ты.
03/02/21 Срд 23:29:41 23934281666
>>239342383
но опять таки я тебе напоминаю что это махинации с данными и ты соснешь хуй тк приложение ждет свои данные - дать ему нулевой результат - быть посланым нахуй
чтобы отказать ей в получении может нужно делать
int res = _WSARecv(...);
if(оп решил что не давать данные)
return WSAETIMEDOUT
else
return res;
03/02/21 Срд 23:31:55 23934300467
>>239342814
в том что ты ставил *lpBuffers = 0 это фактически записать в память по адресу число 0, т.е. там лежит WSABuf и твоя запись запишет в WSABuf::len поле 0, массив при этом останется с данными, ну ты его тоже можешь нулями заполнить но приложение примет это все равно за данные с нулями внутри где в пакете сказали что вроде длина 0 но как обработается - на усмотрение приложения, это не ошибка и не отказ от выдачи ответа
03/02/21 Срд 23:32:34 23934305968
Как же ты заебал. Когда ты уже книжку прочитаешь по С?
Аноним 03/02/21 Срд 23:32:43 23934307569
>>239336490 (OP)
>игра использовала RSA шифрование
И че? Для тебя проблема сбрутить ключ?
Аноним 03/02/21 Срд 23:32:49 23934308470
>>239342311
Бля, ну если оп не бум бум в памяти и в си, то зачем вообще лезть в хуки.

Оп, а ты можешь конкретно сформулировать актуальную задачу? Что тебе нужно сделать?
Аноним # OP 03/02/21 Срд 23:34:12 23934319371
>>239343084
Сервер шлет данные. Данные не зашифрованы и мне нужно иметь возможность не допускать до клиента неугодные мне данные таким образом чтобы не выкинуло с сервера / крашнуло. Как будто их не было.
Аноним # OP 03/02/21 Срд 23:34:47 23934323772
Аноним # OP 03/02/21 Срд 23:35:21 23934329873
>>239343004
Я говорил про lpBuffers->buf = 0, т.е заполнить нулями массив char
03/02/21 Срд 23:36:12 23934337174
>>239343193
ты должен знать как реагирует сервер на ответ
ты не можешь не допустить просто так чтобы не выкинуло
он делает запрос - под запрос получает ответ
ты не можешь в ответе написать хуй и чтобы он это принял за валидный ответ
Аноним 03/02/21 Срд 23:40:50 23934371675
>>239343193
А ты знаешь, что за данные в пакетах? Просто может быть такое, что просто из-за того, что пакет не придет с какой-то инфой, то клиент решит, что соединение потеряно.
Но ты вроде на верном пути.
Хук норм тема. Попробуй менять данные и отправлять после хука в клиент какую-то нибудь поебень. Ну то есть данные ты не можешь отправить. Если дашь ошибку, то клиент попробует сделать реконнект. Попробуй найти пакет, который не несёт какого-либо смысла, но сервер его отправляет. Очень большой вопрос, что отправить нужно, чтобы не было реконнекта и прогу не крашнуло.
Настройки X
Ответить в тред X
15000
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов