Androidデバイスのバックアップは、データを安全に保管するための重要な手段ですが、そのバックアップにパスワードが設定されている場合、パスワードを忘れてしまうと復元できなくなります。そんな時に役立つ可能性があるのが、John the Ripper (JtR) というパスワードクラッキングツールに含まれる androidbackup2john
スクリプトです。
この記事では、androidbackup2john
の基本的な使い方から、抽出したハッシュを実際にJohn the Ripperで解析する手順までを詳しく解説します。Androidバックアップのパスワード復旧や、セキュリティテストに関心のある方はぜひ参考にしてください。
John the Ripperとandroidbackup2johnとは?
まず、John the Ripper (通称JohnまたはJtR) について説明します。John the Ripperは、非常に有名で強力なオープンソースのパスワードクラッキングツールです。1996年に最初のバージョンがリリースされて以来、多くの開発者によって拡張され、現在では非常に多くの種類のパスワードハッシュや暗号化形式に対応しています。主に、システムのパスワード強度をテストしたり、忘れてしまったパスワードを回復したりする目的で使用されます。辞書攻撃、ブルートフォース(総当たり)攻撃、インクリメンタルモードなど、複数のクラッキングモードを備えています。
androidbackup2john
は、John the Ripper (特にJumboバージョンのrun
ディレクトリ内) に含まれるPythonスクリプトの一つです。その主な役割は、Android Debug Bridge (ADB) を使って作成されたパスワード付きのAndroidバックアップファイル (.ab
ファイル) から、John the Ripperが解析可能な形式のパスワードハッシュを抽出することです。
AndroidのADBバックアップ機能では、バックアップファイル全体を暗号化するためのパスワードを設定できます。この暗号化は、バックアップデータを保護するために重要ですが、パスワードを忘れるとデータにアクセスできなくなります。androidbackup2john
は、この暗号化されたバックアップファイル (.ab
) のヘッダー情報を解析し、パスワードの検証に必要なデータ(ソルト、イテレーションカウント、暗号化されたキーなど)を取り出して、John the Ripperが処理できる形式の文字列(ハッシュ)として出力します。
前提条件と準備
androidbackup2john
を使用するには、以下のものが必要です。
- John the Ripper (Jumbo版推奨):
androidbackup2john
スクリプトは、John the Ripperのパッケージに含まれています。特に多くのフォーマットに対応しているJumbo版をインストールすることをお勧めします。多くのLinuxディストリビューションではパッケージマネージャからインストールできます(例:sudo apt install john
やsudo yum install john
)。 - Python (バージョン2.7または3):
androidbackup2john
はPythonスクリプトです。実行環境が必要です。一部の情報ではPython 2.7が必要とされていますが、最新版ではPython 3でも動作する可能性があります。 - パスワード付きのAndroidバックアップファイル (.ab): ADBコマンドを使用して作成された、パスワードで暗号化されたバックアップファイルが必要です。
Androidバックアップファイル (.ab) の取得方法
パスワード付きのAndroidバックアップファイルは、Android Debug Bridge (ADB) ツールを使用して作成します。ADBはAndroid SDK Platform Toolsに含まれています。
- PCにAndroid SDK Platform Toolsをインストールし、パスを通します。
- AndroidデバイスでUSBデバッグを有効にします。([設定] -> [デバイス情報] -> [ビルド番号]を7回タップして開発者向けオプションを有効にし、[開発者向けオプション] -> [USBデバッグ]をオンにする)
- デバイスをPCにUSB接続し、接続モードをファイル転送(MTP)などに設定します。
- PCのターミナル(コマンドプロンプトやPowerShell)で以下のコマンドを実行します。
adb backup -f <バックアップファイル名.ab> -apk -shared -all -system
-f <バックアップファイル名.ab>
: バックアップファイルの保存場所と名前を指定します。-apk
: アプリのAPKファイルを含めます(任意)。-shared
: SDカードのコンテンツを含めます(任意)。-all
: インストールされているすべてのアプリを含めます。特定のアプリのみバックアップする場合は、<パッケージ名>
を指定します。-system
: システムアプリを含めるかどうか(デフォルトは含めない)。
mybackup.ab
という名前で保存する場合:adb backup -f mybackup.ab -all
- コマンド実行後、Androidデバイスの画面にバックアップの確認画面が表示されます。ここで必ずパスワードを入力し、「データをバックアップ」をタップします。パスワードを設定しない場合、暗号化されず、
androidbackup2john
の対象となりません。
これで、指定した場所にパスワードで暗号化された .ab
ファイルが作成されます。
androidbackup2johnの使い方
androidbackup2john
スクリプトの使い方は非常にシンプルです。通常、John the Ripperのインストールディレクトリ内の run
ディレクトリにあります。
基本的なコマンド構文は以下の通りです。
python /path/to/john/run/androidbackup2john.py <バックアップファイル.ab>
または、Johnの run
ディレクトリに移動している場合は、
python androidbackup2john.py <バックアップファイル.ab>
実行すると、指定した .ab
ファイルから抽出されたハッシュ情報が標準出力に表示されます。
実行例:
# John the Ripperのインストールパスが /opt/john だと仮定
python /opt/john/run/androidbackup2john.py mybackup.ab
出力例:
mybackup.ab:$ab$*0*10000*00112233445566778899aabbccddeeff*fedcba98765432100123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef*fedcba98765432100123456789abcdef
この出力された文字列が、John the Ripperで解析するためのハッシュです。通常、この出力をファイルに保存して、John the Ripperに渡します。
python /opt/john/run/androidbackup2john.py mybackup.ab > android_hash.txt
これで、android_hash.txt
というファイルにハッシュが保存されました。
ハッシュ形式について
androidbackup2john
が出力するハッシュ形式は、一般的に $ab$
というプレフィックスで始まります。この形式には、パスワードの検証に必要な情報(暗号化のバージョン、PBKDF2のイテレーション回数、ソルト、暗号化されたマスターキーなど)が含まれています。John the Ripperはこの情報を利用して、パスワードの候補を試行します。
Hashcatのような他のツールも、この形式(またはそれに類する形式)をサポートしている場合があります。Hashcatでは、モード 18900
(Android Backup) が該当する可能性があります。
John the Ripperでハッシュを解析する
androidbackup2john
でハッシュを抽出しファイルに保存したら、いよいよJohn the Ripperを使ってパスワードの解析(クラッキング)を試みます。
基本的なコマンドは以下の通りです。
john <ハッシュファイル>
実行例:
john android_hash.txt
このコマンドを実行すると、John the Ripperはまずハッシュ形式を自動検出し、デフォルトのクラッキングモード(シングルモード、辞書モード、インクリメンタルモードの順)で解析を開始します。
クラッキングモードの指定
特定のモードやオプションを指定することも可能です。
-
辞書モード (Wordlist Mode): パスワードの候補リスト(辞書ファイル)を指定して試行します。
john --wordlist=/path/to/wordlist.txt android_hash.txt
強力な辞書ファイル (
rockyou.txt
など) を使うと、一般的なパスワードであれば比較的早く見つかる可能性があります。 -
インクリメンタルモード (Incremental Mode): 指定された文字種(例: 数字のみ、英小文字のみ、全文字種)で考えられるすべての組み合わせを試行します。パスワードが複雑な場合や長い場合は非常に時間がかかります。
john --incremental=Digits android_hash.txt # 数字のみ john --incremental=Alnum android_hash.txt # 英数字 john --incremental=All android_hash.txt # すべての印字可能文字
-
ルール (Rules): 辞書モードと組み合わせて、単語を変化させるルール(例: 大文字小文字変換、数字や記号の追加)を適用します。
john --wordlist=/path/to/wordlist.txt --rules=Jumbo android_hash.txt
-
フォーマット指定 (Format): Johnが自動でフォーマットを認識できない場合や、特定のフォーマットで試したい場合に指定します。Androidバックアップの場合、通常は自動認識されますが、明示的に指定する場合は
android-backup
を使用します。john --format=android-backup android_hash.txt
解析結果の確認
John the Ripperは解析に成功すると、クラックされたパスワードを画面に表示し、$JOHN/john.pot
ファイル(Johnのホームディレクトリ内のjohn.pot
)に記録します。
後でクラック済みのパスワードを確認するには、以下のコマンドを使用します。
john --show <ハッシュファイル>
実行例:
john --show android_hash.txt
出力例:
mybackup.ab:CorrectPassword123:0:10000:0011...def:fed...def::mybackup.ab
1 password hash cracked, 0 left
この例では、パスワード CorrectPassword123
が見つかったことを示しています。
解析には時間がかかることがあります。特にパスワードが複雑な場合、数時間から数日、あるいはそれ以上かかることもあります。 ⏳
注意点とセキュリティへの影響
androidbackup2john
と John the Ripper は強力なツールですが、いくつかの注意点があります。
- パスワード強度: 解析にかかる時間は、設定されたパスワードの強度(長さ、複雑さ)に大きく依存します。短くて単純なパスワードは比較的短時間で見つかる可能性がありますが、長くてランダムな文字列のパスワードは、現実的な時間内での解析が困難な場合があります。
- 計算リソース: パスワードクラッキングは計算資源(CPUパワー)を大量に消費します。高性能なCPUや、複数のコアを使用する(
--fork=N
オプション)ことで解析時間を短縮できますが、それでも限界があります。GPUを利用するHashcatなどのツールは、特定のハッシュタイプに対してより高速な場合があります。 - 倫理的な使用: 繰り返しになりますが、これらのツールは自身が管理するデータや、許可を得たデータに対してのみ使用してください。不正な目的での使用は法的に罰せられる可能性があります。
- ADBバックアップの限界: 全てのアプリがADBバックアップを許可しているわけではありません。アプリ開発者がマニフェストファイルでバックアップを無効に設定している場合 (
android:allowBackup="false"
)、そのアプリのデータはバックアップに含まれません。
このツールの存在は、Androidバックアップに設定するパスワードの重要性を示唆しています。もしバックアップファイルが第三者の手に渡った場合、弱いパスワードを設定していると、データが容易に解読されるリスクがあります。重要なデータを含むバックアップには、十分に強力なパスワードを設定することが推奨されます。 💪
まとめ
androidbackup2john
は、パスワードで保護されたAndroidバックアップファイル (.ab
) からパスワードハッシュを抽出し、John the Ripperで解析可能な形式に変換するための便利なツールです。
パスワードを忘れてしまった自分のバックアップファイルを復旧させたい場合や、セキュリティテストの一環としてパスワード強度を評価したい場合に役立ちます。ただし、ツールの使用は倫理的な範囲に留め、強力なパスワードの重要性を再認識する機会とすることが重要です。
この記事が、androidbackup2john
と John the Ripper の使い方を理解する一助となれば幸いです。 😊
参考情報
- John the Ripper official website (Openwall): https://www.openwall.com/john/
- John the Ripper Community Wiki (GitHub): https://github.com/openwall/john/wiki (使い方や対応フォーマットに関する詳細情報があります)
- androidbackup2john.py ソースコード (GitHub – magnumripper/JohnTheRipper リポジトリ内): https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/run/androidbackup2john.py
コメント