![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Сегодня делал функцию обыска друзей в игре, и наткнулся на мысль, что это будет достаточно просто взломать.
Смысл функции такой: игрок щелкает по изображению друга в игре, при этом дом друга можно обыскать. То есть сервер выдает определенное количество денег, которые разбрасываются по дому в хаотичном порядке. И игрок как бы водит фонариком и находит их за определенное время. Когда нашел деньги, они ему добавились. Обыскать одного и того же друга более, чем раз в сутки нельзя. С этим проблем нет. Но проблема в том, что в запрос можно подставить не id друга, а любых других игроков, и таким образом набить себе много денег. Образец запроса достаточно легко просмотреть, тем же фиддлером, к примеру, а потом просто менять id и отправлять заново. Так вот отсюда вопрос, как это лучше обойти? У кого какие идеи? Думал на счет подписи запроса, но опять же. Подпись тоже можно другую подставить. Даже если ее каким-то хитроумным способом генерировать на клиенте, а потом проверять на сервере, то все равно флешку можно декомпильнуть и посмотреть что там и как формируется. Единственный вариант который пока пришел в голову - это ограничить количество обыскиваемых в день друзей. Но такой вариант тоже не самый лучший, так как игрокам не особо понравится |
|
|||||
|
Допустим, есть игрок A. У него есть друзья B и C. И есть игроки E и F, которые друзьями A не являются. Может ли сервер выяснить (через API соц. сети, например) кто является другом A, а кто нет?
|
|
|||||
|
Регистрация: Jan 2011
Сообщений: 200
|
Ну разве только хранить дополнительно связи на сервере, что не совсем хорошо.
С другой стороны опять же посомтрите с другой стороны. Юзер делает 20 акков, добавляет их к себе в друзья и обыскивает их. Даже подменять ничего не надо ![]() |
|
|||||
|
Это сделать сложнее, чем просто подменить пару цифр в запросе и выполнить его снова. Fiddler позволяет это сделать легко. Да и 20 - 30 акков - это не тысячи. Плюс к тому, если постоянно не сидеть в игре с определенного аккаунта, он перестает приносить деньги.
Сейчас пока решил вопрос созданием подписи запроса, которая формируется с учетом почти всех параметров запроса, но это защитит только от ленивого хакера, который не захочет создать такой же механизм формирования подписи. Можно еще конечно дополнительно усложнить задачу, например зашиванием секретного ключа в несколько уровней встроенных swf, да еще и с какими-нибудь конкатенациями и доп. вычислениями, чтобы нельзя было просто выдернуть строку через хекс. Но, опять же, если кто-то докопается до истины)) и создаст прогу, которая будет формировать эту подпись, то все накроется медным тазом) Раньше над этим не задумывался, но похоже такая уязвимость есть в большинстве игр, с возможностью обыскивать, или передавать что-либо друзьям. Надо попробовать хакнуть пару игр самому, чтобы убедиться |
|
|||||
|
А что мешает хранить id друзей на сервере? Ведь какой-то функцией игрок добавляет определенный id себе в друзья. Сохранять его в этот момент. При попытке "обыска" проверять наличие отправляемого id в списке и соотв. производить обыск или нет.
__________________
interplanety |
|
|||||
|
Ничего не мешает. Но так же и читеру ничего не мешает таким образом отправить несколько тысяч запросов с id пользователей, не являющихся его друзьями, и они сохранятся на сервере как его друзья. То есть смысла в этой манипуляции вообще ноль.
|
|
|||||
|
На фейсбуке была такая штука: third_party_id - уникальный ID пользователя. В отличие от обычного ID, этот уникален не только для каждого пользователя, но и для каждого приложения (зашифрованная версия обычного ID)
Поймать его при передаче можно, но угадать айди левого человека - нет. Интерес в том, что при получении тысячи сгенерированных зашифрованных third_party_id их можно проверить на адекватность простым запросом на существование игрока с этим ID (хотя так убиться можно - на сервере проверять существование тысяч игроков). Мне кажется ВК тоже что-то подобное должно быть. ---- Погуглил - видимо нет. Но можно делать на сервере свой third_party_id простым SHA-2 по ID пользователя + закрытый ключ (Это не нарушит законы РФ о криптографии?). Но блин, в таком случае получается, что придется переделывать существующую систему сохранения прогресса. Кстати, а обыскивать можно тех, кто еще не играет в игру? Последний раз редактировалось KumoKairo; 08.01.2014 в 18:28. |
|
|||||
|
Цитата:
Для вк я проблему решил. Там метод friends.get открытый и легко выполняется с сервера. Поэтому я могу просто проверить есть ли такой id в списке друзей. И если пользователь 2 раза попытается обыскать не друга, то его аккаунт автоматически банится. Подпись запроса тоже добавил, чтобы просто так не получалось от руки вписать новый айди. А вот для одноклассников проблема пока еще актуальна. Но, думаю тоже решу. О результатах отпишусь тут. |
|
|||||
|
Т.е. друзья не взаимные? Тогда вообще в чем смысл понятия "друг"? Я так понимаю, что при добавлении в друзья друг должен тоже добавить игрока. Только тогда сохраняется его id как друга в базе. И по этим id уже проверять.
__________________
interplanety |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|