GRADUATION
モバイルアプリを、静的解析で読めるようになりました。
apktoolとjadxで、自分でビルドした練習用APKからハードコードされた秘密を読み出し、マニフェストの誤設定(allowBackup・cleartext通信・無防備なexported コンポーネント)を見つけました。コンパイルは、隠すことではないと体で理解しました。
おつかれさまでした。
持ち帰るもの
- バイトコードは、ほぼ元のソースに戻るjadxはDEXバイトコードを、驚くほど読みやすいJavaに戻します。「コンパイルしたから安全」という発想は、モバイルでは通用しません。
- 秘密はバイナリに焼き込まないAPIキーやトークンをコードに直書きすると、誰でも逆コンパイルして読めます。事実(秘密)はサーバ側に置く、というWebで学んだ原則がそのまま当てはまります。
- マニフェストは、公開された設計図allowBackup・exported・usesCleartextTrafficは、すべてAndroidManifest.xmlに平文で書かれ、誰でも読めます。ここに書く一行が、そのままアプリの守りの強さです。
次にやるといいこと
- このコースは静的解析(読む)だけでした。実機・エミュレータでの動的解析(通信の傍受、実行時の挙動観察)は、より重い環境が要る発展課題です。
- Firebaseを使うモバイルアプリなら、次の「Firebaseの落とし穴」で、バックエンド側の設定ミスも見られます。