問題は Unity で作られたゲームの apk ファイル。
起動するとフラグと思われる画像が回転しているが、邪魔なブロックが前にあって見えない。この邪魔ブロックを消し去ればよさそう。
apk ファイルを解凍して、中身の Unity アセットファイルを取り出す
- apk ファイルは zip なので、適当な解凍ソフトで中身を出す
assets/bin/Data/level0
が Unity のゲームシーンのファイル
level0
の中身を書き換える
AssetsBundleExtractor をつかって level0
ファイルを開く。 AssetBundleExtractor v2.2 beta4 をつかえば Unity 2018系のファイルも開ける。
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
フラグらしき画像が見えた!
・・・しかし、これでクリアではなかった
FLAG をいい感じに書き換える
SECCON{Y0U_4R3_CH34+3R?}
これの中身は Leet になっていて、"you are cheater?" という英文に変換できる。
しかし、英文法的に "you are ~ ?" ではなく、"are you ~ ?" では? という話になって、
SECCON{4R3_Y0U_CH34+3R?}
これに変えたらクリア!
(・・・本当にこの解き方が正しいのだろうか??)