Форум сайта python.su
Здравствуйте. У меня появилась сумасшедшая идея вскрыть сохранения Ren'Py. Сунулся и нечего понять не могу с какого края подступится. Сразу оговорюсь мне нужен метод шифровки и дешифровки, так как мне очень интересно как это работает(хранит перемеренные в защищённом виде)
Офлайн
https://github.com/renpy/renpy/blob/9b76083a7812def93b131347a67af6574be83799/renpy/loadsave.py#L50
кажется что они вовсе не защищенные
Офлайн
Нет,не получается, использую вот эти способы
cPickle.loads(s) pickle.loads(s)
def loads(s): if renpy.config.use_cpickle: return cPickle.loads(s) else: return pickle.loads(s)
Отредактировано prisrak_razyma (Авг. 23, 2017 21:48:16)
Офлайн
Надо метод load() использовать.
Офлайн
Последовал вашему совету вот код
import pickle import _pickle as cpickle from json import dumps as json_dumps f = open('auto-1-LT1.save','rb') q=cpickle.load(f)
f = open('auto-1-LT1.save','r') q=pickle.load(f)
Офлайн
prisrak_razymaТебе надо создать свой Unpickler и там переопределить метод persistent_load().
_pickle.UnpicklingError: A load persistent id instruction was encountered,
but no persistent_load function was specified.
Отредактировано py.user.next (Авг. 24, 2017 09:42:30)
Офлайн
А можно для чайника. Как это сделать?
Офлайн
prisrak_razymaЯ так понял, что ты не знаешь, что значит “переопределить метод класса”, скорее даже так “переопределить?”, “метод?”, “класса?”.
А можно для чайника. Как это сделать?
Отредактировано py.user.next (Авг. 24, 2017 12:17:50)
Офлайн
py.user.next
Что значит “переопределить метод класса”. Я знаю, но не понимаю как это сделать.
Скорей всего ты не прав, потому что я пользуюсь сайтом http://www.saveeditonline.com/ и он показывает все переменные. Плюс если перенести сейв то он будет работать и у другого человека.
Либо я что-то не понимаю.
Отредактировано prisrak_razyma (Авг. 24, 2017 12:56:52)
Офлайн
prisrak_razymaНу скажи, что не понимаешь. Я сомневаюсь, что ты понимаешь, потому что ты метод load() не смог отличить от метода loads(), а ведь это вещь элементарная. Потом ты пишешь, что пример тебе непонятен, а он вообще для новичков даже подходит, там всё как на ладони.
Что значит “переопределить метод класса”. Я знаю, но не понимаю как это сделать.
prisrak_razyma
и он показывает все переменные
prisrak_razymaТак оно у него воспроизводится, а ведёт куда-то на внутренние данные в программе, которые у всех лежат одинаковыми. Если они одинаковые, их не надо сериализовать, достаточно ссылки.
Плюс если перенести сейв то он будет работать и у другого человека.
prisrak_razymaОно не может тебе просто так с потолка выбросить исключение такое. Оно видит инструкцию внутри файла и начинает выполнять действия, а для них нужна функция, а по умолчанию её нет. А её нет почему? Потому что ты используешь load() не у того объекта. Обычный объект работает без всяких ссылок, воспринимая всё как прямые данные._pickle.UnpicklingError: A load persistent id instruction was encountered
prisrak_razymaСделай заглушку, но для этого надо переопределить метод класса, а ты не знаешь, как это делать. Если бы ты хоть одну книжку прочитал или даже пролистал, то ты бы знал, как это делать, что это и где.
Я знаю, но не понимаю как это сделать.
Отредактировано py.user.next (Авг. 24, 2017 13:21:39)
Офлайн