見出し画像

Fate/Grand Order QuestのQRコード仕様についての一考察

2019年4月1日のエイプリルフール企画として1日限定配信されたスマートフォン用アプリ『Fate/Grand Order Quest』(以下FGOクエスト)において『しょうかんのちず』に用いられるQRコードの仕様について考察する。

QRコードの保持情報

『しょうかんのちず』のQRコードをFGOクエストで読み取ると、

・発見場所(座標及び地形)
・地図名(サーヴァント名称+レベル)
・発見者名(4文字のひらがなまたはカタカナ)
・発見日時(MM/DD ddd hh:mm)

といった情報が埋め込まれていることが解る。

QRコードの基本情報

『しょうかんのちず』に用いられるQRコードを一般的なQRコードスキャナで読み取ると、実態は次のような128文字の英数字テキストであることが解る。

5c7535abf772e1be6632569354398777f9c36875273bf5c57c4b58bd3a845e4cf7a9176438d9e5b5a4380bd7ef4baefd202708d1576992a5851b4154885a672e

[0-9a-f]の文字しか使われていないため、16進数のバイナリデータを表しているようだ。エントロピー(乱雑さ)が高く、そのままASCIIやUTF-8として解釈しても特段意味のある文字列にはならない。ドラクエの『ふっかつのじゅもん』よろしく、何らかの法則に従って符号化していると予想される。

なお、ドラクエ2の『ふっかつのじゅもん』では6bit*52文字=312bitでゲーム中の全フラグを格納しているのに対し、FGOクエストの『しょうかんのちず』は4bit*128文字=512bitも使っている割に保持情報が少ないように見える。

誤り訂正レベル最大(High)で英数字テキストを144文字まで格納できるバージョン9のQRコードは53x53セルを必要とする。当然セル数が増えるほどセルサイズを縮めた場合に読み取りづらくなる。何か必要があってそうしているのか、最初に目分量でそう決めてしまったからなのかは分からない。

QRコードの比較

Twitterで共有されている『しょうかんのちず』のQRコードを拝借して、何らかの法則性がないかを確認する。

発見場所が同じ場合

発見場所が同一のデータを見つけることは至難の業と思われるため、これについての検証はスキップする。

地図名が完全に同じ場合

地図名が同一の場合、先頭から32文字目まで(16byte分)は共通となることから、このブロックが地図名を表していると推定できる。いくつか例を次に示す。

49122b9de5bf3da51bb1b67ff4d0770402d335c973c9287599df4ca94b50191217ec8e53de6c1d6a3122ef0cfc50b93c8d221d41cd4fb6a94b3085bfe6955a8b
49122b9de5bf3da51bb1b67ff4d077049eedfdbb308542e4bc441f2196ec02a4bdf7e6049fb50755363a2583ffab60fe2d35561042a6e16503f53dbece97f4f4
49122b9de5bf3da51bb1b67ff4d07704fe1791bc020a76d3b96722c0aded4b29ca055bd7cc98d44620303416a738392a3ba2bc28b3e2398befe9495db2e31767

地図名が部分的に同じ場合

地図名のうち、サーヴァント名が同じでレベルが異なる場合、いずれも全く異なる符号となった。いくつか例を次に示す。

5c7535abf772e1be6632569354398777ede9f14f3125416cf94de2bd7aca7450d88fb4bfdfeae9a3b8929e8ae6fa10937de6c642097bc47233546f54f013bed4
a10c03510e91a6a22ff24e16726825441915888239858a65d02ff5faefd1ee10a471854ecb1961049df378490842d92d61cc31b6e4f04645070f9d1cbff0486e
461e68e9ccaa1590dec5eab801abf78e4d20ae2089ce066eb83861082ea7d8a8986a49c6e8bdfc81ba6433c5da5f2a8e87cc39469ab6b791b5b005b60972cdda

発見者名が同じ場合

発見者名が同一ユーザーの場合であっても、同じ符号が連続して共通するブロックは存在しなかった。

発見日時が同じ場合

発見日時が分単位で同一の場合であっても、同じ符号が連続して共通するブロックは存在しなかった。

また、発見日時順に並び変えた場合に符号値がインクリメントしているようなブロックは存在しなかった。

QRコードのねつ造

128文字のうち一番後ろの符号を書き換えたテキストをQRコードにしてFGOクエストで読み取ると「QRコードの よみこみに しっぱいした!」と表示された。テキスト末尾を0〜fまで変化させてみたが、正当なQRコード以外はすべて読み込みに失敗した。

また、『おだのぶながのちず』に共通する先頭から32文字目までと、その他から取り出した33〜128文字目までを合成したテキストをQRコードにしてFGOクエストで読み取った場合も読み込みに失敗した。

結論

QRコードの元となっている符号には一部法則性が見られたものの、その仕組みを解明し、任意の『しょうかんのちず』を作り出すには至らなかった。

FGOクエストのアプリ(apk)を逆アセンブル解析しないと、これ以上の解明は不可能と思われる。