Доброго времени суток! У опытных людей прошу совета. Вопрос возможно несколько странный, но мне нужны ваши точки зрения. Есть браузерная игра. Заметил, что во время ведения боя, данные не отсылаются на сервер, то есть весь процесс боя лежит на "локальном" движке. Как думаете реально ли сделать подмену нужного значения атаки (для примера) на свое? Учитывая, что сам клиент игры зашифрован (скрыта EP, еще возможно какие-то шифровки секции импорта и т.п). Зарание благодарен за помощь..
Derec На счет именно браузерных игр ничего не знаю,но вообще Если игрушка запакована,распакуй так как в тьюторах говорят и напиши трейнер - такой ерунды в сети навалом.
Уважающая себя браузерная игра (да и вообще сетевая) ничего отсылать, кроме действий игрока, не должна. Все расчеты должны происходить на сервере. Иначе естественно можно сфальсифицировать данные. Поэтому, может потому и заметили, что ничего не отсылается? Зато в обратную сторону, с сервера, присылается наверняка
Спасибо за отклик! Вот такая ситуация: Я начинаю бой. На серевер отсылается пакет, в нем ID моба, мое ID, и хеш функция для аутентификации боя. Потом, выделяется отдельный Thread по бой и никаких пакетов на сервер не отсылается.. Ну то есть я наношу удар, а клиент ничего не отсылает. Лично я пришел к выводу, что это просто в клиенте хитро зашифрованы адреса, ведь есть какие-то неявные вызовы? Вот еще нюанс: нахожу значение очков жизни у моба. Изменяю его на нулевое. Моб пропадает, а мне продолжают наноситсья удары. Все такие это может быть связано с сервером или в клиенте можно это реализовать так?
FatMoon Вообще-то можно прислать с сервера начальное значение для генератора псевдослучайных чисел, который будет использовкаться для выбора ответной стратегии и/или вычисления размера выигрыша за раунд/удар, а в конце боя просто отослать на сервер выбранные игроком ходы, чтобы сервер мог их проверить(или можно отдать их на проверку нескольким другим клиентам). Недостаток тут только в том, что клиент может проверить несколько стратегий боя и выбрать наилучшую, но в некоторых играх это может и не дать существенных бонусов.
Да. ) Если вычисления происходят тока на твоем компе. ID моба отсылается, чтобы потом, если твой персонаж его победил, удалить его с локации для других игроков. Сервер ждет окончания боя и потом записывает результат в БД по твоему ID. По -моему, так. А как на деле, не знаю.
Это понятно. Видите в чем загвоздка, что когда я изменяю значения в игре, урон, жизни моба я их могу видеть, но потом они становятся такими как были ( словно по таймеру). Казалось бы сервер проверяет и их правит, однако снифер говорит что ничего не принимается и не отправляется... 100% , что под бой выделяется отдельный поток, в нем все вычисления происходят. Когда дизассамблировал заметил, что адреса инструкций все время меняются... Есть способы это побороть? или весьма проблематично?
Black_mirror Теоретически наверно возможно. Но...: Derec Ну и фиг с потоками, раз вы не знаете, что там происходит В момент, когда по вашему уже ничего не передается, выдерните витую пару из сетевой карты - дешево и сердито. Если бой продолжится, значит что-то вроде теории Black_mirror. А если таймаут и "сервер не отвечает", то все-таки во втором потоке что-то передается на сервер, просто вы это не поймали. В 1-м случае есть отличные от 0 шансы исполнить желание
Потому что ты по сути его и прячешь. У него жизней нет, а события смерти тоже не было. Событие смерти - скорее всего уменьшение здоровья с ненулевого значения до нулевого (именно событие изменения значения). Попробуй сопернику поставить минимально возможное здоровье (1 например) и потом вынести одним ударом. Если поможет - значит я прав. Если нет - надо копаться.
В той или иной степени получить определённое преимущество в любой сетевой игре посредствам читерства (будь то взлом клиента, патчинг каких то параметров, и.т.д и.т.п, вобщем чего угодно) можно. Вопрос лишь в том сколько времени будет потрачено на реверс клиента, изучение протокола, выявление багов\уязвимостей и.т.п, и насколько весомое преимущество это в конечном итоге даст. В 50% случаев игра просто не стоит свеч. Ну а если поломать и внаглую зачитерить не получится, то на крайняк чтобы уж не обламываться можно автоматизировать процесс прокачки написав бота. Или забить нафиг на игру и не тратить своё время попусту
Можно предположить, что код отвечающий за бой идентичный у клиента и у сервера. И если для инициализации рандома использовать одно и тоже число, то отсылать данные нет никакой необходимости. Можно делать вид, что всё общитывается на клиенте. В общем, смотреть надо. Хотя данная схема тоже уязвима.... Значит не то, что надо нашли.... Посмотрите на код, не так уж и сложно должно быть.
Я уже сталкивался с подобным. при созданнии боя финал уже известен. т.е. клиент на сервер свой ид и моба а сервер в ответ добро на бой и то кто выиграет, а на стороне клиента идет бой результат которого уже занесен в базу данных на сервере. ну вот как то так) короче ищите другие способы