Могу ли я использовать сериализацию с обфускацией?

Интересно, сработает ли это... В моем приложении есть объект, который я сериализую в файл, а затем запутываю код с помощью ProGuard. и приложение переходит в Маркет. Затем я хочу выпустить новую версию приложения. Я делаю то же самое. Пользователи запускают обновление приложения.

Вопрос в том, правильно ли десериализуется объект, сериализованный в первой версии приложения, во второй? И если да - то почему?


person Michal Chudy    schedule 05.10.2011    source источник
comment
Вам действительно нужна сериализация? Разве это не то, с чем вы могли бы справиться с помощью базы данных или пользовательского формата файла?   -  person Jim Mitchener    schedule 06.10.2011
comment
@jcm, что мне действительно нужно, так это защитить эти данные от несанкционированного чтения. И если вы скажете мне, что пользователь не имеет права просматривать базу данных - я даже боюсь пользователей, которые будут использовать привилегии root для получения/анализа/изменения этих данных. Поэтому я сериализую его с шифрованием. Но, может быть, собственный формат файла был бы лучше, как вы говорите.   -  person Michal Chudy    schedule 06.10.2011
comment
Если вы хотите защитить данные, а не только их структуру, вам необходимо шифрование. (Конечно, я не уверен, есть ли способ безопасного хранения криптографического ключа на Android, но этого должно быть достаточно, чтобы предотвратить случайные атаки.)   -  person millimoose    schedule 06.10.2011
comment
@Inerdia Да, мне нужны и запутывание, и шифрование. К сожалению, модель может меняться от версии к версии, и очень важно сохранять данные, поэтому я остановился на совете jcm и создал свой собственный формат файла.   -  person Michal Chudy    schedule 13.11.2011
comment
И ответ на этот вопрос заключается в том, что, скорее всего, он не будет правильно десериализоваться, если вы не сделаете ручное сопоставление для этих классов и имен пакетов.   -  person Michal Chudy    schedule 13.11.2011
comment
В Proguard есть четкий пример настройки для Serializable поэтому специальные поля и методы не должны быть запутаны.   -  person WonderCsabo    schedule 08.05.2014


Ответы (1)


Я смог найти несколько механизмов (serialPersistentFields, ObjectInputStream#readFields), которые позволяют настраиваемой сериализации зависеть от имен полей — при условии, что механизм по умолчанию уже не зависит. В документации ProGuard есть пример конфигурации, который показывает, как заставить ProGuard игнорировать имена полей и все специальные методы и поля, используемые при сериализации.

person millimoose    schedule 06.10.2011
comment
Спасибо за ответ. Теперь думаю, что эти классы не будут запутаны. Я прав? Есть ли способ запутать эти классы вручную с помощью ProGuard? - person Michal Chudy; 06.10.2011
comment
Вы можете запутать имена классов и полей вручную для сериализуемых классов, я просто не уверен, что это сильно поможет. Злоумышленник может просто просмотреть сериализованные данные и сделать на их основе предположение о структуре и значении. - person millimoose; 06.10.2011