flutter/packagesのshared_preferencesの小ネタ

notes
·

趣味でアプリをデコンパイルして、難読化されたコードを眺めていたら、変な文字列を見つけました。

  • VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu

  • VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy

  • VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu

おゅ。これはやばベタ書きsecretか〜〜〜ってコードを読んでいたらなんか変。適当にgithubを検索したらこんな箇所を見つけました。

/// Note: Due to limitations in Android's SharedPreferences,

/// values cannot start with any one of the following:

///

/// - 'VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu'

/// - 'VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy'

/// - 'VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu'

何やこれ、おもろ。

真剣にコードを読んだらBigInteger、List、DoubleはSharedPreferences.EditorにputXXXがないので、prefixをつけているという話でした。

private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu";

private static final String BIG_INTEGER_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy";

private static final String DOUBLE_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu";

じゃあなんでこんな命名にしたの? 答えはすでにpublic archiveとなっている方の、flutter/pluginsのレポジトリにあります。

// Fun fact: The following is a base64 encoding of the string "This is the prefix for a list."

private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu";

Fun fact だった。

同様に、"This is the prefix for BigInteger"と"This is the prefix for Double."のbase64だった。

ちょっと待って、"This is the prefix for BigInteger"の方は、最後のピリオドがないやんけw

なので、BIG_INTEGER_PREFIX は、本当は、"This is the prefix for BigInteger."のbase64エンコードである"VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2VyLg=="であるべきです。

PR 出すか〜(いいえ)

flutter/packagesのshared_preferencesの小ネタ終わり。

@notes
chigichan24として活動もしています