Localization data は StreamingAssets/Localization の下の lsb ファイルです。
lsb ファイルは簡易的ではありますが暗号化されています。
0x00: u16 要素数 (0xB6)
0x02: u32 data 部の位置 (0x1026)
0x06: u8*要素数 key の長さ
0xBC: u16*要素数 data の長さ、開始位置は要素数によって変わる
0x228: 実際のデータ暗号化されている、開始位置は要素数によって変わる
データ部分こんな感じに暗号化されています
復号は
// seed 値
const SEED = [170, 17, 35, 52, 50, 33, 232, 59, 186, 18, 36, 53, 66, 49, 248, 91, 202, 19, 37, 54, 82, 161, 8, 123, 218, 20, 38, 55, 98, 193, 120, 155];
for i in 0..buffer.len() {
// seed でマスクされているので戻す
buffer[i] ^= SEED[i % SEED.len()];
}
このような処理で戻ります
復号化したデータが
key が並んでいるのがわかると思います。
data 部分は 0x02: 0x1026 からなので
0x1026 から Not a Meth Lab! というのがあるのがわかると思います。
後は最初に書いていた key の長さと data の長さを見て切り分ければいいだけです
data 部の文字コードは utf-8 です
以下のように取れると思います。
E1_S01_A_CHOICE_S01_026_01 Not a Meth Lab!
E1_S01_A_CHOICE_S01_026_02 Free candy!
E1_S01_A_CHOICE_S01_060_01 February 12.
E1_S01_A_CHOICE_S01_060_02 March 21.
E1_S01_A_CHOICE_S01_060_03 April 1.
E1_S01_A_CHOICE_S01_063_01 1775 Rowan st.
E1_S01_A_CHOICE_S01_063_02 1757 Rowan st.
E1_S01_A_CHOICE_S01_063_03 1575 Rowan st.
E1_S01_A_CHOICE_S01_071_01 The mill.
E1_S01_A_CHOICE_S01_071_02 Your bike.
E1_S01_A_CHOICE_S01_071_03 Let me inside, now.
E1_S01_A_CHOICE_S01_071_04 Walk away.
E1_S01_A_CHOICE_S01_077_01 What could it hurt?
E1_S01_A_CHOICE_S01_077_02 [*]Cute[/*] is relative.
E1_S01_A_CHOICE_S01_077_03 I don't do '[*]cute[/*]'.
E1_S01_A_CHOICE_S01_085_01 This isn't a [*]playground[/*]?
E1_S01_A_CHOICE_S01_085_02 I am not a kid!
E1_S01_A_CHOICE_S01_085_03 Fine. I'll sneak in.
E1_S01_A_CHOICE_S01_093_01 A girl like me?
E1_S01_A_CHOICE_S01_093_02 I'm not worried.
E1_S01_A_CHOICE_S01_093_03 Girls kick ass.
E1_S01_A_CHOICE_S01_093_04 Flowers on your bike?
E1_S01_A_CHOICE_S01_101_01 Who's your boss?
lsb ファイルは簡易的ではありますが暗号化されています。
0x00: u16 要素数 (0xB6)
0x02: u32 data 部の位置 (0x1026)
0x06: u8*要素数 key の長さ
0xBC: u16*要素数 data の長さ、開始位置は要素数によって変わる
0x228: 実際のデータ暗号化されている、開始位置は要素数によって変わる
データ部分こんな感じに暗号化されています
復号は
// seed 値
const SEED = [170, 17, 35, 52, 50, 33, 232, 59, 186, 18, 36, 53, 66, 49, 248, 91, 202, 19, 37, 54, 82, 161, 8, 123, 218, 20, 38, 55, 98, 193, 120, 155];
for i in 0..buffer.len() {
// seed でマスクされているので戻す
buffer[i] ^= SEED[i % SEED.len()];
}
このような処理で戻ります
復号化したデータが
key が並んでいるのがわかると思います。
data 部分は 0x02: 0x1026 からなので
0x1026 から Not a Meth Lab! というのがあるのがわかると思います。
後は最初に書いていた key の長さと data の長さを見て切り分ければいいだけです
data 部の文字コードは utf-8 です
以下のように取れると思います。
E1_S01_A_CHOICE_S01_026_01 Not a Meth Lab!
E1_S01_A_CHOICE_S01_026_02 Free candy!
E1_S01_A_CHOICE_S01_060_01 February 12.
E1_S01_A_CHOICE_S01_060_02 March 21.
E1_S01_A_CHOICE_S01_060_03 April 1.
E1_S01_A_CHOICE_S01_063_01 1775 Rowan st.
E1_S01_A_CHOICE_S01_063_02 1757 Rowan st.
E1_S01_A_CHOICE_S01_063_03 1575 Rowan st.
E1_S01_A_CHOICE_S01_071_01 The mill.
E1_S01_A_CHOICE_S01_071_02 Your bike.
E1_S01_A_CHOICE_S01_071_03 Let me inside, now.
E1_S01_A_CHOICE_S01_071_04 Walk away.
E1_S01_A_CHOICE_S01_077_01 What could it hurt?
E1_S01_A_CHOICE_S01_077_02 [*]Cute[/*] is relative.
E1_S01_A_CHOICE_S01_077_03 I don't do '[*]cute[/*]'.
E1_S01_A_CHOICE_S01_085_01 This isn't a [*]playground[/*]?
E1_S01_A_CHOICE_S01_085_02 I am not a kid!
E1_S01_A_CHOICE_S01_085_03 Fine. I'll sneak in.
E1_S01_A_CHOICE_S01_093_01 A girl like me?
E1_S01_A_CHOICE_S01_093_02 I'm not worried.
E1_S01_A_CHOICE_S01_093_03 Girls kick ass.
E1_S01_A_CHOICE_S01_093_04 Flowers on your bike?
E1_S01_A_CHOICE_S01_101_01 Who's your boss?