Pull to refresh

Comments 54

UFO just landed and posted this here
То же самое хотел написать.
Всегда можно отправить всё что угодно, знающим людям это не составит особого труда.
Расскажите пожалуйста, я действительно не так подкован, каким образом можно отправить какие-то спец символы, если парсер их будет съедать?
1) написать маленький клиент, который будет логиниться к серверу и отсылать спецсимволы.
2) крякнуть клиент, убрав проверку.
для этих целей есть GameGuard, на российском сервере и нашем клиенте еще есть InnovaShild (ShielDConsole.exe).

Сторонние клиенты легко ловятся, о чем говорят еженедельные списки забаненых.

Да и чтобы написать клиента стороннего, надо расшифровывать траффик, это, неочень просто, даже так сказать, сложно…
«Да и чтобы написать клиента стороннего, надо расшифровывать траффик, это, неочень просто, даже так сказать, сложно… „
судя по тому, что существуют пиратские эмуляторы серверов, расшифровка трафика уже произведена. поправьте, если я ошибаюсь
Эмуляторы построены на основе ушедших исходников из NCSoft. Расшифровка уже произведена, но ее найти очень сложно. В любом случае, с клиентом русского оффициального сервера это не прокатит, т.к. я писал программу в которой был код, который искал окно с handle=LineAge II, так представте, игра не давала запускать программу, когда запущена игра, а если программа была запущена до игры, то, при выполнении кода с поиском окна LineAge II программа вылетала с критом, причем я вам 100% даю, что все дело в клиенте, точнее в процессе GameGuard и ShildConsole(от компании Иннова).

Так вот, ловить и отправлять траффик она вам не даст, а если делать off-game клиента, вас забанят, на следующий же день.
UFO just landed and posted this here
Я не говорил что их нет, но вот вам пример:

MadGirl Использование сторонних программ, эмулирующих присутствие игрока.
MuKpO6 Использование сторонних программ, эмулирующих присутствие игрока.
4ltEryGa Использование сторонних программ, эмулирующих присутствие игрока.
ShadowStar Использование сторонних программ, эмулирующих присутствие игрока.
Володяныч Использование сторонних программ, эмулирующих присутствие игрока.
FatalShot Использование сторонних программ, эмулирующих присутствие игрока.
LadyCollection Использование сторонних программ, эмулирующих присутствие игрока.
Roki Использование сторонних программ, эмулирующих присутствие игрока.
deGir Использование сторонних программ, эмулирующих присутствие игрока.
чччГОПНИКччч Использование сторонних программ, эмулирующих присутствие игрока.
Sefirith Использование сторонних программ, эмулирующих присутствие игрока.
Tome Использование сторонних программ, эмулирующих присутствие игрока.
b0nie Использование сторонних программ, эмулирующих присутствие игрока.
MEJIKUU Использование сторонних программ, эмулирующих присутствие игрока.
Tasmit Использование сторонних программ, эмулирующих присутствие игрока.
spiritwar Использование сторонних программ, эмулирующих присутствие игрока.
syndicate Использование сторонних программ, эмулирующих присутствие игрока.
ky3mu4 Использование сторонних программ, эмулирующих присутствие игрока.
пойдупосполю Использование сторонних программ, эмулирующих присутствие игрока.
охоронець Использование сторонних программ, эмулирующих присутствие игрока.
коэльо Использование сторонних программ, эмулирующих присутствие игрока.
масяя Использование сторонних программ, эмулирующих присутствие игрока.
кноупо4ка Использование сторонних программ, эмулирующих присутствие игрока.
мамо4ка Использование сторонних программ, эмулирующих присутствие игрока.
lllaxud Использование сторонних программ, эмулирующих присутствие игрока.
regy Использование сторонних программ, эмулирующих присутствие игрока.
МореуВоу Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
РускаяПальма Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ПродавецУдачи Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
СерыйВолкГерана Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
МисисДаутфаер Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
41 Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
Kronikls Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
OOOOOOOOOOOL Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
Головоломка364 Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
Протокол16 Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ТорговецЩастя Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
Кукабара Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
Каракайша Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ДэвидБлейнн Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
poplia Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
Голопогос Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ICQnoname Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
lCQnoname Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ADENEK Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
АШИХАД Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
zICQnoname Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
кисуния Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
gnomkan Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
garajanka Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
nono55 Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ooICQnoname Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
телефонистка Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
МеГаГиперпакимон Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
МеГаГиПеРадмин Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ПРИВЕТадмину Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ВАМнеНАДОЕЛО Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
ЖивучийБэндер Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
Жизньудалась Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
всемпривет Сообщение в чат о покупке/продаже игровых ценностей за неигровые.
rykmrfkrftkmrfty Сообщение в чат о распространении сторонних программ.
dtnmtdrjntdjnr Сообщение в чат о распространении сторонних программ.
lllfreebotilil Сообщение в чат о распространении сторонних программ.


Это недельный выпуск новостей. Я уже писал, что ботов банят, причем легко.
Вам не кажется, что это количество на неделю — слишком мало? :)

а если делать off-game клиента, вас забанят, на следующий же день.

Знаю людей, использующих ботов с самого начала и до сих пор не забаненных. Не надо нести подобный бред. Просто не боты являются общедоступными.
у меня есть бот — не пользуюсь.

Пишу свой офф гейм.

Просто эта ветка ушла в другое русло. Суть топика была в том, что считает сообщество по поводу этотого недочета, и как бы люди с ним боролись, вместо этого получилось непонятно что…
Вам довольно подробно объяснили, что есть возможность коннектиться к серверу и без помощи клиента. Следовательно делать проверки на официальном клиенте нецелесообразно — кому надо законнектятся своим софтом и прогонят нужные инъекции. Ну отсекается этим какое-то количество, пользующих дыру(если она есть :) ) и все… особой пользы от этой проверки на клиенте не будет.
UFO just landed and posted this here
эта проблема именно на официальных серверах?
ну, неофициальные сервера — это проблемы не NCSoft. поэтому я и спрашиваю, ошибка ли это официального сервера, или пиратского эмулятора сервера?
Всех серверов, я считаю это проблемой клиента. На российском оффициальном сервере, такая же ошибка, которую я использую достаточно часто, т.к. чат загружен достаточно сильно.
в любом случае, это в первую очередь проблема сервера. на клиенте можно дублировать проверку. но ни в коем случае она не заменит проверки на сервере.
Возможно, просто я думаю, этой проверки не сделано, потому что, на 1 сервере игры, только в России ~5000 человек. Из них, 70% чатятся без перерыва. Не говоря о спаммерах и флудерастах.

Чтобы решить проблему хотябы частично, хватило бы и клиента.
Как — никак обрабатывать сообщения от 1го пользователя проще, чем от 3000 пользователей.
UFO just landed and posted this here
Хочу вас огорчить, я играл на европейском оффициальном, на российском оффициальном, также я поднимал разные сервера(пиратские) у себя в локальной сети, проблема эта везде…
И в какой версии l2 такое прокатывает?
Разве пропуск символа переноса строки это sql-инъекция?
нет, но если возможно сделать это, то я вас уверяю можно и инекцию сделать, причем список инъекци на читерских порталах постоянно увеличивается.
SQL-инъекция это внедрение в запрос произвольного SQL-кода. И я думаю наврятли вы там это сделаете.

А тут просто не проверяется входящие символы и не форматируются на выходе, в итоге отдаётся то что прислал клиент без изменений. Что-то типа «XSS» :)
Это осуществляется легко: пишем допустим /friendinvite SQL запрос

Эта команда добавления игрока в друзья, обрабатывается и заносится в базу.

Суть не в том, как это делать, суть в том как сделать, чтоб этого уже никто не делал…
А можно конкретнее пример пожалуйста :)
Насколько я помню, инъекция там была в ingame-форуме («сообщество» он там зовётся).
Аналогично спросить хотел. Автор, Вы уверены что sql injection действительно работает? Приведите примеры, пожалуйста.
Да и их много, и всегда список обновляется, одни перестают работать, находят другие новые… Попробуйте поиск в своем любимом поисковике.
Мне было бы интересно услышать мнения, программистов, кто каким бы образом решил бы эту «дыру».
В любом случае всегда надо делать проверку на стороне сервера, всегда можно отправить от клиента то что человеку захочется.
Со стороны клиента тоже нужны проверки дабы даже если со стороны сервера что-то не то придёт, что бы клиент не реагировал неадекватно.
Пользоваться preparedStatement, не использовать без нужды конкатенацию sql-запросов, экранировать двойные и одинарные кавычки.

И моя любимая картинка


Пример:

Шаблон запроса:

SELECT lineAgeUserId, lineAgeUserPassword
FROM users
WHERE email = 'hackLAwith@me.com'; DROP TABLE users; --'; —

Упс, отправилось :(.

Шаблон запроса:SELECT lineAgeUserId, lineAgeUserPassword
FROM users
WHERE email = '{1}'

Например, для восстановления пароля используется такой дебильный запрос, где вместо {1} подставляется e-mail, введенный пользователем.

Пример использования:SELECT lineAgeUserId, lineAgeUserPassword
FROM users
WHERE email = 'killme@somebody.please'


А что будет, попробовать написать что-то необычное вместо адреса почты, например:
hackLAwith@me.com'; DROP TABLE users; —

получем запрос:SELECT lineAgeUserId, lineAgeUserPassword
FROM users
WHERE email = 'hackLAwith@me.com'; DROP TABLE users; --';


Как видите, в адресе почты «невалидная кавычка» закрыла значение параметра, точка с запятой закрыла запрос на SELECT ид пользователя и пароля. Затем идет коварный запрос на удаление таблицы с пользователями. Его так же закрывает наша точка с запятой, а два последних минуса «комментят» остаток запроса, написанного программистом.
Таким образом, сначала будет найден или не найден пароль, а затем будет удалена таблица users.

1.
SELECT lineAgeUserId, lineAgeUserPassword
FROM users
WHERE email = 'hackLAwith@me.com';

2.
DROP TABLE users;

3.
--'; Коммент.

Естественно, такая хрень давно не прокатывает, а поиск инъекций — адский труд.
Вся клиентская валидация — туфта, потому что все, что оказывается на клиенте — будет тут же сломано (ну или через какое-то непродолжительное время).
Да, в общем случае, надо еще бороться со
слешами: \, /,
математическим операторами: +-=*%,
точками с запятыми: ;,
знаками больше и меньше: <>.

Но на самом деле, это не всегда возможно.
Ну если перенести суть проблемы в обычное вэб-приложение, то выглядит это так:

Пользователь заполняет некую форму на сайте (логин/пароль)
Данные не фильтруются.
Для аутентификации используется база данных.
Пользователь может сделать SQL-инекцию.

Вопрос: Поможет ли в данном случае валидация на клиенте? (Javascript)
Нет. Так и в случае с LA2

Вот, это считаю для меня первым, нормальным комментарием в теме. Спасибо.
А теперь посмотрите на самый первый комментарий в топике :) И увидите, что он о том же.
SQL инъекции тут нет. Это программисты на PHP думают что все на свете в строке формируют SQL запрос, и посылают его на сервер. Нормальные (а тем более высокопроизводительные) приложения пишуться на хранимых процедурах/predefined queries. В них SQL-injection-а нет.

Кроме того, офф сервер уже со всех сторон «кул хацкеры» излазили, особенно утекший C4 бинарник, так что уверяю вас, таких простых проблем там нет.

Ну а L2J — бесплатному продукту в зубы не смотрят, там быги постоянно новые то там то сям, но это нормально :-)

PS. Сам пишу на PHP и формирую запрос в строчке c mysql_real_escape ;-)
Теперь о шифровании — расшифровывать трафик L2 и менять пакеты на лету — относительно легко. Есть масса утилит для этого. И обнаружить это невозможно, пока не начинают ботоводить / пытаться сделать что-то некорректное.

Так оно и есть. Но использование процедур не всегда желательно, т.к. это существенно снижает возможность переползания с одной БД на другую.
В проектах такого уровня вопрос смены БД не стоит обычно :-)
Согласен, таких мегагигапроектов — нет.
На самом деле, мне кажется, что это мелочь, если бы вы знали какие баги таят в себе другие вещи от крупных компаний, вы бы пришли в неописуемый ужас. Мне недавно сказали, что на самом деле Windows не должен работать, это такой баг :)
Мне кажется парсить на стороне клиента и слепо доверять ему как минимум недальновидно. Намного занятнее вопрос почему на стороне сервера не использовать надёжный метод, гарантирующий вне зависимости от инпута его вывод один в один без всякого дальнейшего с ним взаимодействия начиная с \n и заканчивая инжектами. Склонен верить что после пары (десятков) таких проколов все серверные приложения будут на защищены от таких явных ошибок
Как и в любом клиент-серверном приложении проверка должна быть на стороне клиентов, так и на стороне сервера. Да все как в вебе (= JavaScript Validation + проверка на стороне сервера абсолютно всех входных значений.
Вот вот, мне вот интересно, почему тот же вконтакте, выводит все как ему напишешь, будь то код, или обычный текст, все как есть выводит, так почему в игре так нельзя сделать было?
Угу, уже понял что не прав. Стучалово в репу помогло, спасибо.
Sign up to leave a comment.

Articles