SECCON 2018 Quals - Block write up

問題は Unity で作られたゲームの apk ファイル。

起動するとフラグと思われる画像が回転しているが、邪魔なブロックが前にあって見えない。この邪魔ブロックを消し去ればよさそう。

f:id:castaneai:20181028160441p:plain

apk ファイルを解凍して、中身の Unity アセットファイルを取り出す

  • apk ファイルは zip なので、適当な解凍ソフトで中身を出す
  • assets/bin/Data/level0 が Unity のゲームシーンのファイル

level0 の中身を書き換える

AssetsBundleExtractor をつかって level0 ファイルを開く。 AssetBundleExtractor v2.2 beta4 をつかえば Unity 2018系のファイルも開ける。

f:id:castaneai:20181028161535p:plain

Cube といういかにもブロックっぽい GameObject が配置されてるので、Remove で消して上書きする。

書き換えた level0 を apk に反映して再インストール

apk の中の level0 ファイルを消し去った後のもので上書きする。

apk の中身を書き換えたら、署名という処理をしなければならない。署名情報は apk の META-INF というフォルダに保存されてるらしい。

  • いったん META-INF/ フォルダごと apk から削除する( 重要!これをしないと、adb install したときに INSTALL_PARSE_FAILED_NO_CERTIFICATES というエラーが出てしまった
  • 新しく apk を署名しなおす(「apk 署名」などでネット検索したら情報がある)
$ keytool -genkey -v  -keystore test.keystore -storepass password -alias keystorealias -keypass password -keyalg RSA -validity 10
姓名は何ですか。
  [Unknown]:
組織単位名は何ですか。
  [Unknown]:
組織名は何ですか。
  [Unknown]:
都市名または地域名は何ですか。
  [Unknown]:
都道府県名または州名は何ですか。
  [Unknown]:
この単位に該当する2文字の国コードは何ですか。
  [Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknownでよろしいですか。
  [いいえ]:  y

10日間有効な2,048ビットのRSAの鍵ペアと自己署名型証明書(SHA256withRSA)を生成しています
        ディレクトリ名: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
[test.keystoreを格納中]

$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore test.keystore block2.apk keystorealias
キーストアのパスワードを入力してください: <password と入力>
   追加中: META-INF/MANIFEST.MF
   追加中: META-INF/KEYSTORE.SF
   追加中: META-INF/KEYSTORE.RSA

  ...

  署名中: res/mipmap-mdpi-v4/ic_launcher_background.png
  署名中: res/mipmap-mdpi-v4/ic_launcher_foreground.png
jarは署名されました。

古い Block をアンインストール

そのまま新しい apk をインストールしようとすると INSTALL_FAILED_UPDATE_INCOMPATIBLE と出てエラーになってしまった。

adb install block2.apk
[100%] /data/local/tmp/block2.apk
        pkg: /data/local/tmp/block2.apk
Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]

なので、一度 Android の設定画面から Block をアンインストール。

改造した Block をインストール

>adb install block2.apk
[100%] /data/local/tmp/block2.apk
        pkg: /data/local/tmp/block2.apk
Success

f:id:castaneai:20181028163315p:plain

フラグらしき画像が見えた!

・・・しかし、これでクリアではなかった

FLAG をいい感じに書き換える

SECCON{Y0U_4R3_CH34+3R?}

これの中身は Leet になっていて、"you are cheater?" という英文に変換できる。

しかし、英文法的に "you are ~ ?" ではなく、"are you ~ ?" では? という話になって、

SECCON{4R3_Y0U_CH34+3R?}

これに変えたらクリア!

(・・・本当にこの解き方が正しいのだろうか??)