Защита сэйвов
Защита сэйвов
Mod note: тут было заспамлено
Last edited by serger on Thu Apr 08, 2010 02:11, edited 3 times in total.
Re: Хочется даже в офф-лайне избежать тактики "s/l"
Такой метод не защищен от подделки записи в реестре.serger wrote: Алгоритм предлагается следующий:
- есть функция получить тек. состояние игры CurrentStatus()
- есть функция сохранить в реестре ключ RegSave( NameOfMap, CurrentStatus() )
Если вы пополнее опишете, что именно вы хотите проконтролировать/запретить, то возможно, будет найдено более защищенное решение.
2Lost:
Да, согласен. Хитрый геймер весь реестр заново поднимет, лишь бы продолжить с нужного места...
Что хочется: чтобы люди, которым дан сейв, проходили его один раз. Чтобы нельзя было "сыграть 20 дней и вернуться к 8-му". Но могли отложить игру, сохранившись. И потом именно с этого места продолжить.
Однако, способ который сейчас предлагается на турнирных серверах "мы, парень, тебя грузим в мультике с паролем, и играй всю ночь, потому что второй раз ты загрузиться без нас не сможешь" - неудобен. Можно долго развивать тему, чем именно неудобен, не суть.
Надеюсь на Вашу ловкость закрыться от хитрого геймера.
P.S. По первому вопросу тоже ничего?
Да, согласен. Хитрый геймер весь реестр заново поднимет, лишь бы продолжить с нужного места...
Что хочется: чтобы люди, которым дан сейв, проходили его один раз. Чтобы нельзя было "сыграть 20 дней и вернуться к 8-му". Но могли отложить игру, сохранившись. И потом именно с этого места продолжить.
Однако, способ который сейчас предлагается на турнирных серверах "мы, парень, тебя грузим в мультике с паролем, и играй всю ночь, потому что второй раз ты загрузиться без нас не сможешь" - неудобен. Можно долго развивать тему, чем именно неудобен, не суть.
Надеюсь на Вашу ловкость закрыться от хитрого геймера.
P.S. По первому вопросу тоже ничего?
Я пока не вижу как это можно правильно ограничить Надо подумать.serger wrote:2Lost:
Да, согласен. Хитрый геймер весь реестр заново поднимет, лишь бы продолжить с нужного места...
Что хочется: чтобы люди, которым дан сейв, проходили его один раз. Чтобы нельзя было "сыграть 20 дней и вернуться к 8-му". Но могли отложить игру, сохранившись. И потом именно с этого места продолжить.
В смысле? Счетчик сейвов/лоадов есть, но он считает только общее количество, а не количество сейвов/лоадов за ход.P.S. По первому вопросу тоже ничего?
Он зашифрован и зашит в сейв. Расшифровкой занимается специальная программа.serger wrote:Замечательно! Этого достаточно. Я после каждого хода (мыла) его буду просматривать. Где/как его можно наблюдать?Счетчик сейвов/лоадов есть, но он считает только общее количество, а не количество сейвов/лоадов за ход
Скажем так, полузакрытая.serger wrote:А почему так скупо? Это закрытая инфа?
Программа пока находится только у меня и у устроителей турниров. Я пока не уверен, что выкладывание ее в свободный доступ не скомпрометирует оффлайновые турниры.Просто не понимаю
Если "нет", так нет.
Если "надо подождать", то подождем.
Если "да", то где скачать программу, как пользоваться, подробнее, пожалуйста.
Тем более, что с багами не все в порядкеLost wrote:Программа пока находится только у меня и у устроителей турниров. Я пока не уверен, что выкладывание ее в свободный доступ не скомпрометирует оффлайновые турниры.
CMEPTb, Little Angel of Death
"Если ничто другое не помогает, прочтите, наконец, инструкцию."
- Аксиома Кана.
"Если ничто другое не помогает, прочтите, наконец, инструкцию."
- Аксиома Кана.
...Так. В этой теме еще не писал.
serger: Если игра будет вести лог действий игрока (по которым можно судить, честно ли он играет) и записывать его в сейв, это бы устроило? Например:
19:42:56 load
19:43:07 Hero "Gem" [105,74]: move to [109:66]
19:43:08 Hero "Gem" [109:66]: battle with Harpies [111:65]
19:45:32 load
19:45:37 Hero "Gem" [105,74]: move to [109:66]
19:45:39 Hero "Gem" [109:66]: battle with Harpies [111:65]
19:45:41 load
19:45:44 Hero "Gem" [105,74]: move to [117:56]
19:45:44 Hero "Gem" [117:56]: pick up Treasure [118:57]
и т.д...
serger: Если игра будет вести лог действий игрока (по которым можно судить, честно ли он играет) и записывать его в сейв, это бы устроило? Например:
19:42:56 load
19:43:07 Hero "Gem" [105,74]: move to [109:66]
19:43:08 Hero "Gem" [109:66]: battle with Harpies [111:65]
19:45:32 load
19:45:37 Hero "Gem" [105,74]: move to [109:66]
19:45:39 Hero "Gem" [109:66]: battle with Harpies [111:65]
19:45:41 load
19:45:44 Hero "Gem" [105,74]: move to [117:56]
19:45:44 Hero "Gem" [117:56]: pick up Treasure [118:57]
и т.д...
Не совсем. Этот метод хорош для первой задачи ("игра по переписке"), когда я вижу сейв соперника после каждого хода. И если в сейве не так легко вытираются строки "load"Accolon: Если игра будет вести лог действий игрока (по которым можно судить, честно ли он играет) и записывать его в сейв, это бы устроило?
Вторую проблему ("офф- турнир") это совсем не решает. Он воспользуется ранним "чистым" сейвом, и, т.о., офф-лайны опять возвращаются к бесконечному s/l.
Ну, может, хоть первую ...
P.S. И еще мне непонятно желание "закрыться"
Как скомпрометируются турниры? Неясно. Зато пользы - до..рена.
Ведь многие и сингл бы играли с такими же установками. Самому себе-то любимому крутость доказать! Мелочь, а приятно.
P.P.S. Помните, как в III в элите прописывалось "ЧИТЕР!" ?
serger:
Схема: действия по ходу игры можно записать, но их нельзя изменить.
Примечание: S/L/EoT - сокращение для действий Save Game, Load Game, End of Turn.
1. Лог действий. Вводим "прошнурованный" лог S/L/EoT действий игроков (и Устроителя), доступный для чтения и добавления. Помещаем его в save-файл игры. Лог S/L/EoT один - для всех игроков и Устроителя турнира. Он доступен игроку для просмотра в стиле чата, как расшифрованный при Load и добавляемый с каждым Save и заканчиваемый EoT-ом.
2. Сейв игры шифруем при записи. Имея ключ для шифровки и не имея ключа для расшифровки save-файла, игрок самостоятельно загрузить свой же сейв уже не может. Загрузить можно только полученный почтой сейв ("почтовый"), но многократно. При первой же загрузке файла игры происходит обновление лога S/L/EoT => происходит запись игры => происходит перезапись save-файла. Ключ для расшифровки текущего save-файла игры находится у игрока следующего цвета (если записанная игра отсылается ему) или у Устроителя (Гаранта честности) турнира.
3. Турнирный лог. Если необходимо отследить многократную загрузку "почтового" сейва, то в отношении каждого проводимого тура нужно так же вести лог работы самой Экви-программы. Дополнительный ключ для шифровки лога работы Экви-программы дается или соперником или Устроителем или Гарантом. Хранится зашифрованный лог турнира на машине игрока. В сейве игры хранятся все логи турнира. Ведение лога работы Экви-программы активизируется при загрузке турнирного сейва. Записи в логе, отсутствующие на машине игрока и относящиеся к нему, особо отмечаются и, как особливо отмеченные, добавляются к турнирному логу игрока в сейве и на машине.
Схема: действия по ходу игры можно записать, но их нельзя изменить.
Примечание: S/L/EoT - сокращение для действий Save Game, Load Game, End of Turn.
1. Лог действий. Вводим "прошнурованный" лог S/L/EoT действий игроков (и Устроителя), доступный для чтения и добавления. Помещаем его в save-файл игры. Лог S/L/EoT один - для всех игроков и Устроителя турнира. Он доступен игроку для просмотра в стиле чата, как расшифрованный при Load и добавляемый с каждым Save и заканчиваемый EoT-ом.
2. Сейв игры шифруем при записи. Имея ключ для шифровки и не имея ключа для расшифровки save-файла, игрок самостоятельно загрузить свой же сейв уже не может. Загрузить можно только полученный почтой сейв ("почтовый"), но многократно. При первой же загрузке файла игры происходит обновление лога S/L/EoT => происходит запись игры => происходит перезапись save-файла. Ключ для расшифровки текущего save-файла игры находится у игрока следующего цвета (если записанная игра отсылается ему) или у Устроителя (Гаранта честности) турнира.
3. Турнирный лог. Если необходимо отследить многократную загрузку "почтового" сейва, то в отношении каждого проводимого тура нужно так же вести лог работы самой Экви-программы. Дополнительный ключ для шифровки лога работы Экви-программы дается или соперником или Устроителем или Гарантом. Хранится зашифрованный лог турнира на машине игрока. В сейве игры хранятся все логи турнира. Ведение лога работы Экви-программы активизируется при загрузке турнирного сейва. Записи в логе, отсутствующие на машине игрока и относящиеся к нему, особо отмечаются и, как особливо отмеченные, добавляются к турнирному логу игрока в сейве и на машине.
Единственное объяснение - алгоритм уязвим, но принят устроителями турниров в отсутствии лучшего варианта.serger: И еще мне непонятно желание "закрыться"
Я, конечно, не ахти какой спец в защите информации и шифровании, но по-моему, ни одна защита не выдерживает, когда зашифрованный объект и дешифровальная машина находятся в руках взломщика. Это так, не углубляясь в дебри. К примеру, все форматы защиты авторских прав в DVD потерпели жесточайшее поражение. А все потому, что носитель и дешифратор в плеере - в руках хакера.P.S. И еще мне непонятно желание "закрыться"
Если мы хотим предотвратить читинг, то дать в руки читеру инструмент контроля за тем, чтобы он не читил - это все равно, что просто отказаться от инструмента контроля. На это оффлайновые турниры просто не пойдут. А с ними солидарны в первую очередь как раз честные игроки.
Тем не менее, у меня тут родилась одна идея. Если внутреннее обсуждение подтвердит ее жизнеспособность - это будет еще одна возможность программисту с любым языком программирования реально помочь проекту. Если точнее - людям, для которых важна честная игра. Ну и кроме этого, мне кажется, что это неплохая школа выполнения прикладных задач в программировании.
P.S. Сегодня еще один человек получил инструкции по использованию репозитария исходников. Это чтобы совсем не оставалось негатива по поводу нашей "закрытости".
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
2Dalai:
Вы немного не в курсе. Эту проблему человечество уже решило.
Дело в том, что сущностей три, а не две: зашифрованный объект, алгоритм шифрования, ключ (две половинки).
В отличии от ДВД (где все в одном флаконе), вторая половина ключа (т.н. "секретный ключ") у пользователя не хранится
Более того, "алгоритм" не скрывается, его описание можно найти в сети... А вот дешифровать, имея на руках все: файл, алгоритм, публичную половину... никак нельзя.
Простейший (в свободном доступе) алгоритм pgp (скоро 20 лет стукнет) имеет время взлома на 128-битном ключе что-то около 10**8 лет на современном быстродействии
Новый "ГОСТ" (от ФАПСИ) вообще крут невероятно, правда достать сложнее...
2Accolon:
Это все сценарии другой игры
Все!!! Все "потуги защиты" преодолены.
Я тут разговаривал со "спецами" (в определенных областях), так вот, проблема эта известна, и решение (вы будете смеяться) тоже существует. Смысл решения в разделении мест хранения. В момент сейва обновляется не реестр на машине игрока, а реестр на серверной машине. Напр., по мылу. Напр., не каждый комбат, а каждый ход. 30-60 коротких писем на игру даже слабый инет выдержит.
Ответное мыло (с зашифрованным номером хода / статусом игры) от сервера позволяет загрузить игру. Ошибка при "синхронизации" (записи статуса / получении ответного мыла об успехе) в конце хода - невозможность продолжить игру. Вот и все.
Вы немного не в курсе. Эту проблему человечество уже решило.
Дело в том, что сущностей три, а не две: зашифрованный объект, алгоритм шифрования, ключ (две половинки).
В отличии от ДВД (где все в одном флаконе), вторая половина ключа (т.н. "секретный ключ") у пользователя не хранится
Более того, "алгоритм" не скрывается, его описание можно найти в сети... А вот дешифровать, имея на руках все: файл, алгоритм, публичную половину... никак нельзя.
Простейший (в свободном доступе) алгоритм pgp (скоро 20 лет стукнет) имеет время взлома на 128-битном ключе что-то около 10**8 лет на современном быстродействии
Новый "ГОСТ" (от ФАПСИ) вообще крут невероятно, правда достать сложнее...
2Accolon:
Это все сценарии другой игры
Так об этом и речь. Смысл в том, чтобы оставить след от игры где-то еще, кроме сейва. Но реестр или сам сейв не подходит, т.к. грубо, перед началом игры "архивируется весь винчестер", затем делаются ходы, карта изучена,... винт форматируется, и восстанавливается из архива.Если необходимо отследить многократную загрузку "почтового" сейва, то в отношении каждого проводимого тура нужно так же вести лог работы самой Экви-программы
Все!!! Все "потуги защиты" преодолены.
Я тут разговаривал со "спецами" (в определенных областях), так вот, проблема эта известна, и решение (вы будете смеяться) тоже существует. Смысл решения в разделении мест хранения. В момент сейва обновляется не реестр на машине игрока, а реестр на серверной машине. Напр., по мылу. Напр., не каждый комбат, а каждый ход. 30-60 коротких писем на игру даже слабый инет выдержит.
Ответное мыло (с зашифрованным номером хода / статусом игры) от сервера позволяет загрузить игру. Ошибка при "синхронизации" (записи статуса / получении ответного мыла об успехе) в конце хода - невозможность продолжить игру. Вот и все.
Кстати, вот еще что в голову пришло.
Если организаторы турниров, играющие по схеме "старт он-лайн с паролем, затем играй без пауз пока свет не отрубят", думают, что таким способом им удастся не позволить игроку перезагрузиться и перепройти карту "набело", то они опять же заблуждаются.
Отсутствие хранилища где-то еще кроме пользовательской машины не мешает ему сделать дамп памяти, пройти карту, и восстановиться из дампа. Тем более, что такая фича, по слухам, уже встроена в новые винды. А если и не встроена, то заиметь такую программу - пара пустяков.
Если организаторы турниров, играющие по схеме "старт он-лайн с паролем, затем играй без пауз пока свет не отрубят", думают, что таким способом им удастся не позволить игроку перезагрузиться и перепройти карту "набело", то они опять же заблуждаются.
Отсутствие хранилища где-то еще кроме пользовательской машины не мешает ему сделать дамп памяти, пройти карту, и восстановиться из дампа. Тем более, что такая фича, по слухам, уже встроена в новые винды. А если и не встроена, то заиметь такую программу - пара пустяков.
serger: В общем, ты хочешь избежать возможности изучения расклада на карте, и искушения записи лишь удачных ходов и боевок? Тогда с сервера, хранящего всю карту, игроку должна передаваться лишь та часть карты, которую он может изучить за, например, один ход или игровой день. Это позволит игроку изучить карту "на халяву" за один ход или день соответственно - методом архивации и форматирования. Естественно, сервер должен вести лог освоения карты игроками. Кстати, избежать соблазна изучения "критичного" расклада на карте (скиллы, спеллы, артефакты) можно изменив схему выдачи скиллов и спеллов в замках и при levelUp-ах. Хак с артефактами будет возможен даже в случае передачи с сервера одного мув-поинта. Даже если артефакты будут генерится в сокровищницах в момент грабежа.
Да нет же, и про системы с симметричным и асимметричным ключом я слышал.serger wrote:2Dalai:
Вы немного не в курсе. Эту проблему человечество уже решило.
Дело в том, что сущностей три, а не две: зашифрованный объект, алгоритм шифрования, ключ (две половинки).
В отличии от ДВД (где все в одном флаконе), вторая половина ключа (т.н. "секретный ключ") у пользователя не хранится
Более того, "алгоритм" не скрывается, его описание можно найти в сети... А вот дешифровать, имея на руках все: файл, алгоритм, публичную половину... никак нельзя.
Простейший (в свободном доступе) алгоритм pgp (скоро 20 лет стукнет) имеет время взлома на 128-битном ключе что-то около 10**8 лет на современном быстродействии
Новый "ГОСТ" (от ФАПСИ) вообще крут невероятно, правда достать сложнее...
Обобщая - чего-то в цепочке расшифровки у читера быть не должно. На данный момент архитектура решения (во как! ) такова, что есть сэйв и есть приложение, которое все выполняет и все в себе содержит. С такой архитектурой делать приложение открытым, не скомпрометировав всю идею, не представляется возможным.
Но выход есть, дайте только сделать... А лучше - помогите.
А то, как в классике: "Джентельменов дофига, а вот местов нема..."
Так и тут - умных полно, а вот сделать...
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch
Да, все именно так и сделано! Но ты предлагаешь отдать секретный ключ пользователю.serger wrote:Дело в том, что сущностей три, а не две: зашифрованный объект, алгоритм шифрования, ключ (две половинки).
В отличии от ДВД (где все в одном флаконе), вторая половина ключа (т.н. "секретный ключ") у пользователя не хранится
CMEPTb, Little Angel of Death
"Если ничто другое не помогает, прочтите, наконец, инструкцию."
- Аксиома Кана.
"Если ничто другое не помогает, прочтите, наконец, инструкцию."
- Аксиома Кана.
2Dalai, Chameleon:
По 1. Я согласен, что в том варианте, как это есть у вас сейчас, выдавать секр.ключ (видимо, встроенный в программу проверки) нельзя.
Но если выделить ключ, то можно замечательно перейти к технологии двух пар ключей, принятой в деловом док.обороте:
своим секретным можно посмотреть то, что зашифровано твоим публичным, отданным предыдущему игроку. Т.е. в сейве два кусочка инфы, каждый их которых закрыт своим ключем. Пары ключей создаются игроками независимо на своих компах (алгоритм-то открытый!), затем они обмениваются публ.половинками.
Подход можно, в принципе, расширить на шестерых играющих
По 2. Помочь - а как помочь? Что именно делать - вы и сами представляете, значит, проектировщик вам не нужен. Исходники pgp у вас, видимо, есть, раз технология ассиметричных ключей знакома (но если в этом проблема - достану). Захотите ли вы тр...хаться с отправкой/получением уведомлений по почте для блокировки повторного прохождения карт - неясно. Гемору много, а контрдовод есть убойный: хотите "все по-честному" - играйте чистый он-лайн.
Программером к вам - дык, сколько воды утекло, когда последний раз такие штуки делались... качество получится низким. Все стали толстые и ленивые
2Accolon:
Оттого, что мы обсуждаем несколько вопросов сразу, возникает путаница. Вопросов два: "посмотреть число сохранений" и "помешать s/l в офф-лайне".Обобщая - чего-то в цепочке расшифровки у читера быть не должно... ...есть сэйв и есть приложение, которое все выполняет и все в себе содержит
По 1. Я согласен, что в том варианте, как это есть у вас сейчас, выдавать секр.ключ (видимо, встроенный в программу проверки) нельзя.
Но если выделить ключ, то можно замечательно перейти к технологии двух пар ключей, принятой в деловом док.обороте:
своим секретным можно посмотреть то, что зашифровано твоим публичным, отданным предыдущему игроку. Т.е. в сейве два кусочка инфы, каждый их которых закрыт своим ключем. Пары ключей создаются игроками независимо на своих компах (алгоритм-то открытый!), затем они обмениваются публ.половинками.
Подход можно, в принципе, расширить на шестерых играющих
По 2. Помочь - а как помочь? Что именно делать - вы и сами представляете, значит, проектировщик вам не нужен. Исходники pgp у вас, видимо, есть, раз технология ассиметричных ключей знакома (но если в этом проблема - достану). Захотите ли вы тр...хаться с отправкой/получением уведомлений по почте для блокировки повторного прохождения карт - неясно. Гемору много, а контрдовод есть убойный: хотите "все по-честному" - играйте чистый он-лайн.
Программером к вам - дык, сколько воды утекло, когда последний раз такие штуки делались... качество получится низким. Все стали толстые и ленивые
2Accolon:
Архитектура у мультика HOMM IV уже сформирована. Хорошая или плохая, но она есть вот такая. Я думаю, что переделать игру до такой степени нереально, и гораздо сложнее, чем добавить некий кусок кода в модуль загрузки сейва....игроку должна передаваться лишь та часть карты...
2 serger
Все, теперь я тебя полностью понял
Жаль, что "толстые и ленивые"
Все, теперь я тебя полностью понял
Жаль, что "толстые и ленивые"
Web-designer wanted. "Once a knight, always a knight, but once a King is once too often!" (c) Sir Bella of Eastmarch