SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 23/12/2012, 10:59 AM   #41
-Stranger-
Gangsta
 
-Stranger-'s Avatar
 
Join Date: Mar 2010
Location: TCP/IPv4
Posts: 766
Reputation: 40
Default Re: Атака сервера

AirKite, сначала скажите хоть одну причину НЕ удалять управляющие символы из строки диалога?
PS> 50% серверов уязвимы через диалог, типа "000000\nadmin=9999". На нескольких десятков серверов проверял, и причём это были не нубосервера...

Свитч стоит потому что у меня идут ещё и другие замены.

Читами, OnDialogResponse можно вызвать с любым ID игрока, даже 1000
__________________
[Mess with the best, die like the rest]
Помог? - жми на . Тебе один клик, а мне приятно
-Stranger- is offline   Reply With Quote
Old 23/12/2012, 05:27 PM   #42
AirKite
Gangsta
 
AirKite's Avatar
 
Join Date: Feb 2009
Posts: 734
Reputation: 21
Default Re: Атака сервера

Quote:
Originally Posted by DartfoL View Post
в чате и в командах есть, а в диалогах - нет
Серверная сторона или клиент?

Quote:
Originally Posted by -Stranger- View Post
AirKite, сначала скажите хоть одну причину НЕ удалять управляющие символы из строки диалога?
PS> 50% серверов уязвимы через диалог, типа "000000\nadmin=9999". На нескольких десятков серверов проверял, и причём это были не нубосервера...

Свитч стоит потому что у меня идут ещё и другие замены.

Читами, OnDialogResponse можно вызвать с любым ID игрока, даже 1000
Такое ощущение что ответ был дан не на мой пост. Где я хоть слово сказал о управляющих символах?
Что значит свитч потому что идут и другие замены? Я о конкретном диапазоне... Вообще case x...y: где между x и y большой диапозон, юзать не целесообразно. И где я хоть слово сказал об идах? Я это подозревал и проверил ещё почти сразу после выхода версии с диалогами. Никогда даже не принимал ид из OnDialogResponse. Вообще нахрен там сделали ID's если диалог может быть всего 1шт (сразу). Логично ведь что ID будет таким же как и тот что ты отправил последний. (Кроме reconnect случаев, но это уже не актуально). Ах да, ещё и максимальный ид диалога ограничен до 32767 (не критично естественно).

Если это всё был не уход от ответа, и вы действительно хотели бы ответить, то пожалуйста перечитайте внимательнее: http://forum.sa-mp.com/showpost.php?...5&postcount=40
AirKite is offline   Reply With Quote
Old 23/12/2012, 07:12 PM   #43
DartfoL
Gangsta
 
DartfoL's Avatar
 
Join Date: Apr 2012
Posts: 771
Reputation: 75
Default Re: Атака сервера

смысл делать на клиентской стороне, если можно пропатчить клиент, тем самым убрав все проверки и замены?
хорошо, что калкор это осознает
__________________
DartfoL is offline   Reply With Quote
Old 24/12/2012, 03:13 AM   #44
-Stranger-
Gangsta
 
-Stranger-'s Avatar
 
Join Date: Mar 2010
Location: TCP/IPv4
Posts: 766
Reputation: 40
Default Re: Атака сервера

AirKite, такое ощущение, что под Вашим аккаунтом сидит куча народа или вы забываете что пишете.

Quote:
Странно... А в скромном примере убило
case 0x00 .. 0x1F
Это и есть управляющие символы, и что тут Вас так 'убило'?

Quote:
Вообще case x...y: где между x и y большой диапозон, юзать не целесообразно.
Лучше сделать 17 if ?

Quote:
И где я хоть слово сказал об идах?
Quote:
Это вообще реально что бы OnDialogResponse ответил с INVALID_PLAYER_ID или ответил от имени отключенного игрока

Вы, друг мой, сами прочтите что написали и сравните 2 поста...
__________________
[Mess with the best, die like the rest]
Помог? - жми на . Тебе один клик, а мне приятно
-Stranger- is offline   Reply With Quote
Old 24/12/2012, 02:00 PM   #45
AirKite
Gangsta
 
AirKite's Avatar
 
Join Date: Feb 2009
Posts: 734
Reputation: 21
Default Re: Атака сервера

-Stranger-, Да уж, кто то из нас упоролся или мною правят зелёные человечики. Если серьёзно, давайте разберёмся уже в недопонимании

Какое отношение INVALID_PLAYER_ID (playerid - тот от кого был отправлен диалог) имеет к dialogid (ID диалога) DIALOG_ID можно подменить, но причём тут playerid?

OnDialogResponse(playerid, dialogid, response, listitem, inputtext)
[данные от клиента (их можно подменить) - грубо говоря SAMP CONNECT ID (архитектура не позволяет его подменить)]

Идём дальше: О case 0x00...0x1F я говорил опять таки не о самих символах 0x00 и 0x1F а о switch и нецелесообразности юзать большой диапазон в switch > case. Ваш способ при компиляции условно создаёт 17 case. Если делать через if достаточно сделать одного условия if(inputtext[itr] >= 0x00 && inputtext[itr] <= 0x1F).

Для того что бы вы поняли о чём речь, попробуйте скомпилировать любой скрипт с диапазоном в case 0...99999999: (Не поленитесь и проверьте, надеюсь это вам поможет).
AirKite is offline   Reply With Quote
Old 24/12/2012, 02:18 PM   #46
eakwarp
High-roller
 
Join Date: Feb 2007
Posts: 1,905
Reputation: 131
Default Re: Атака сервера

Quote:
Originally Posted by AirKite View Post
-Stranger-, Да уж, кто то из нас упоролся или мною правят зелёные человечики. Если серьёзно, давайте разберёмся уже в недопонимании

Какое отношение INVALID_PLAYER_ID (playerid - тот от кого был отправлен диалог) имеет к dialogid (ID диалога) DIALOG_ID можно подменить, но причём тут playerid?

OnDialogResponse(playerid, dialogid, response, listitem, inputtext)
[данные от клиента (их можно подменить) - грубо говоря SAMP CONNECT ID (архитектура не позволяет его подменить)]

Идём дальше: О case 0x00...0x1F я говорил опять таки не о самих символах 0x00 и 0x1F а о switch и нецелесообразности юзать большой диапазон в switch > case. Ваш способ при компиляции условно создаёт 17 case. Если делать через if достаточно сделать одного условия if(inputtext[itr] >= 0x00 && inputtext[itr] <= 0x1F).

Для того что бы вы поняли о чём речь, попробуйте скомпилировать любой скрипт с диапазоном в case 0...99999999: (Не поленитесь и проверьте, надеюсь это вам поможет).
switch - в павне if based, делайте выводы.
__________________
More than 10 years of development, more than 40 mb(sic! 1 kk lines+) of source code, more than a two hundred units and more than 35k revisions(upd. aug 2017). Valakas Roleplay - choose your role.

Как правило, то, что делаю я, лишь через годы начинают делать другие, но потом, обязательно мне ставят в укор, "ой, да это уже у всех есть"...



[Gamemode] Valakas Trucker Roleplay (Russian).
eakwarp is online now   Reply With Quote
Old 24/12/2012, 02:53 PM   #47
-Stranger-
Gangsta
 
-Stranger-'s Avatar
 
Join Date: Mar 2010
Location: TCP/IPv4
Posts: 766
Reputation: 40
Default Re: Атака сервера

AirKite, всё-же я настаиваю на том, что playerid в OnDialogResponse подменить можно, используя бота.
Но смысл не в том, как это можно сделать, а в том что это можно сделать, и добиться, как минимум вызова playerid, которого не существует на сервере в данный момент.
По мне лучше перестраховаться, и проверить как на IsPlayerConnected, так и на INVALID_PLAYER_ID.
Данная проверка хуже серверу ну никак не сделает. А вот пользу может принести.

На счёт switch > case. Тут больше дело вкуса, но ради интереса сделаю тесты и выложу в эту тему.
__________________
[Mess with the best, die like the rest]
Помог? - жми на . Тебе один клик, а мне приятно
-Stranger- is offline   Reply With Quote
Old 24/12/2012, 03:02 PM   #48
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,751
Reputation: 138
Default Re: Атака сервера

Quote:
Originally Posted by -Stranger- View Post
AirKite, всё-же я настаиваю на том, что playerid в OnDialogResponse подменить можно, используя бота.
Но смысл не в том, как это можно сделать, а в том что это можно сделать, и добиться, как минимум вызова playerid, которого не существует на сервере в данный момент.
По мне лучше перестраховаться, и проверить как на IsPlayerConnected, так и на INVALID_PLAYER_ID.
Данная проверка хуже серверу ну никак не сделает. А вот пользу может принести.

На счёт switch > case. Тут больше дело вкуса, но ради интереса сделаю тесты и выложу в эту тему.
playerid сугубо внутрисерверная переменная и подменить её со стороны клиента нельзя.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 24/12/2012, 03:23 PM   #49
AirKite
Gangsta
 
AirKite's Avatar
 
Join Date: Feb 2009
Posts: 734
Reputation: 21
Default Re: Атака сервера

Quote:
Originally Posted by eakwarp View Post
switch - в павне if based, делайте выводы.
Да выводы уже были давно сделаны и не только мной, switch работает быстрее if, только вот нужно учитывать то, что проверки по диапазону в switch не может быть. т.е. case 0...9999 по своей сути как макрос, который создаёт case 0:, case 1:, case 2:, case 3:, и в некоторых ситуациях целесообразней использовать if соответственно.

Quote:
Originally Posted by -Stranger- View Post
AirKite, всё-же я настаиваю на том, что playerid в OnDialogResponse подменить можно, используя бота.
Но смысл не в том, как это можно сделать, а в том что это можно сделать, и добиться, как минимум вызова playerid, которого не существует на сервере в данный момент.

По мне лучше перестраховаться, и проверить как на IsPlayerConnected, так и на INVALID_PLAYER_ID.
Данная проверка хуже серверу ну никак не сделает. А вот пользу может принести
Даже у бота есть свой ID, и он никак не равен INVALID_PLAYER_ID. Ты конечно прав, что лучше перестраховаться. Однако я себе представлял немного иную архитектуру SAMP. Если playerid было бы возможно подменить, это уже бы давно делали. В любом случае твоя проверка не защитит от мистической подмены playerid, ибо по идее playerid создаётся по факту подключения, а если он есть то и IsPlayerConnected вернёт true... в прочем не будем холиварить, я исходных кодов последних версий samp не видел, как и вы

Quote:
Originally Posted by -Stranger- View Post
На счёт switch > case. Тут больше дело вкуса, но ради интереса сделаю тесты и выложу в эту тему.
На самом деле всё зависит сугубо от ситуации. Пример:
pawn Code:
new tick, lol = 5000;
tick = GetTickCount();
for(new i; i < 100000; i++) {
    switch(lol) {
        case 0..10000: {
            // code
        }
    }
}
printf("SWITCH: %d ms", GetTickCount()-tick);
tick = GetTickCount();
for(new i; i < 100000; i++) {
    if(lol >= 0 && lol <= 10000) {
        // code
    }
}
printf("SWITCH: %d ms", GetTickCount()-tick);
покажет:
Code:
SWITCH: 771 ms
SWITCH: 20 ms
Однако для диапазона в 17, всё же switch будет чуток быстрее.
pawn Code:
new tick, lol = 17;
tick = GetTickCount();
for(new i; i < 100000; i++) {
    switch(lol) {
        case 0..17: {
            // code
        }
    }
}
printf("SWITCH: %d ms", GetTickCount()-tick);
tick = GetTickCount();
for(new i; i < 100000; i++) {
    if(lol >= 0 && lol <= 17) {
        // code
    }
}
printf("SWITCH: %d ms", GetTickCount()-tick);
Code:
SWITCH: 15 ms
SWITCH: 20 ms
p.s. Вспомнил тему где спрашивалось о том, как сделать case 0..∞:
AirKite is offline   Reply With Quote
Old 24/12/2012, 03:28 PM   #50
dimonml
Gangsta
 
dimonml's Avatar
 
Join Date: Oct 2008
Location: Russia, Moscow
Posts: 688
Reputation: 28
Default Re: Атака сервера

Злостный оффтоп: читая дискуссию вспомнилось.

Я сейчас ковыряюсь с united 1.2 и там обнаружилась интересная вещь. В Юнайтеде добавили педов (ид добавленных педов более 300), они без особых проблем подхватились сампом, за исключением колбека OnPlayerSpawn. Не смотря на то, что номер Skin является серверной переменной и кроме как самим сервером никак не выставляется, в обработчике rpc сампа стояла проверка и если SkinId был >= 300, то обработка прекращалась Вполне возможно, что это радумент, но сейчас выглядит довольно смешно.

Так и тут: если удалось подменить player_id, то злоумышленник способен отсылать rpc вызовы от имени любого игрока и вся архитектура шифрования сессий RakNet уже скомпрометирована: наличие дополнительной проверки сервер уже не спасет
__________________
dimonml is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Взлом сервера! Ghost~Ride Русский/Russian 7 11/12/2012 04:31 PM
SA-MP 0.3e R2 обновление сервера Stepashka Русский/Russian 20 17/11/2012 01:37 PM
Атака сервера stabker Русский/Russian 22 08/09/2012 01:59 PM
Зависание сервера RoAChik Русский/Russian 7 30/07/2012 03:03 PM
Вылетаение сервера serpip Русский/Russian 43 11/05/2012 06:10 PM


All times are GMT. The time now is 05:40 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.