John the Ripper スイートの一部である telegram2john.py を使って、Telegramのローカルデータからパスコードハッシュを抽出し、John the Ripperで解析する方法を学びます。
はじめに:Telegramとローカルパスコード 🔑
Telegramは、クラウドベースの高速で安全なメッセージングアプリとして世界中で人気を集めています。チャット履歴や連絡先は基本的にクラウドに保存されるため、新しいデバイスにログインするだけで簡単にデータを引き継ぐことができます。しかし、Telegramはアプリ自体を保護するために「ローカルパスコード」という機能を提供しています。これは、アプリを開くたびにパスコードの入力を要求するもので、デバイスを他人に操作された際にTelegram内の情報を見られないようにするためのセキュリティ機能です。
このローカルパスコードは、Telegramアカウントのパスワード(二段階認証パスワード)とは異なり、デバイスのローカルストレージに保存されている情報に基づいて検証されます。もしこのローカルパスコードを忘れてしまった場合、通常はアプリを再インストールし、アカウントに再ログインする必要があります(クラウドにデータがあるため、再ログインすればチャット履歴などは復元されますが、シークレットチャットなど一部データは失われる可能性があります)。
しかし、特定の状況下、例えばデジタルフォレンジック調査や、どうしてもアプリの再インストールができない状況でパスコードを回復させたい場合などに、ローカルに保存されたデータからパスコードの解析を試みることがあります。ここで登場するのが、有名なパスワードクラッキングツール「John the Ripper」 (JtR) スイートに含まれる telegram2john.py
というPythonスクリプトです。
このブログ記事では、telegram2john.py
の使い方、そして抽出したハッシュをJohn the Ripperで解析する手順について、詳しく解説していきます。
telegram2john とは? 🧐
telegram2john.py
は、John the Ripper プロジェクトの一部として開発されたユーティリティスクリプトです。その主な目的は、Telegramのローカルストレージに保存されているデータから、ローカルパスコードを検証するために使用される「ハッシュ値」を抽出することです。
このスクリプトは、以下のTelegramクライアントのローカルデータに対応しています:
- Telegram Android アプリ:
userconfing.xml
(※typoではなく、ファイル名が”userconfing”です) ファイルからハッシュ情報を抽出します。この形式は、2018年頃のバージョン (v4.8.4など) でテストされています。 - Telegram Desktop アプリ: ローカルストレージ内の
tdata
フォルダにあるmap0
,map1
(古い形式) やkey_datas
(新しい形式、v2.1.14以降) といったファイルからハッシュ情報を抽出します。新しい形式では、PBKDF2-HMAC-SHA512アルゴリズムが使用され、より強固な保護が施されています(2020年10月に対応コードが更新されました)。
抽出されたハッシュ値は、John the Ripperが解析できる特定のフォーマットで出力されます。これにより、John the Ripperの強力なパスワードクラッキング機能(辞書攻撃、ブルートフォース攻撃、ルールベース攻撃など)を利用して、元のパスコードを特定する試みを行うことができます。
telegram2john.py
スクリプト自体は、パスコードをクラックするわけではありません。あくまで、クラックに必要なハッシュデータを準備するためのツールです。
準備するもの 🛠️
telegram2john.py
を使用してTelegramのパスコードハッシュを抽出し、解析するには、以下のものが必要です。
-
John the Ripper (Jumbo 版):
telegram2john.py
は、John the Ripper の “Jumbo” バージョンに含まれています。これは、コミュニティによって拡張されたバージョンで、より多くのハッシュタイプや機能に対応しています。Kali Linuxなどのペネトレーションテスト用ディストリビューションには、通常、Jumbo版がプリインストールされています。もしインストールされていない場合は、John the Ripper の GitHub リポジトリ からソースコードを取得してビルドするか、各OS向けのパッケージをインストールしてください。
Kali Linuxでは、スクリプトは通常/usr/share/john/
や/usr/lib/john/
配下の `run` ディレクトリに、実行ファイルは/usr/sbin/
や/usr/bin/
にあります。 -
Python 3:
telegram2john.py
は Python 3 で書かれています。システムに Python 3 がインストールされていることを確認してください。多くのLinuxディストリビューションやmacOSにはデフォルトでインストールされています。Windowsの場合は、Python公式サイトからダウンロードしてインストールする必要があります。# Pythonのバージョン確認コマンド例 python3 --version
-
PyCryptodome (推奨): 一部の機能(特に空パスワードのチェックなど)では、PyCryptodome ライブラリが必要です。必須ではありませんが、インストールしておくとより多くのケースに対応できる可能性があります。pip を使ってインストールできます。
# PyCryptodomeのインストールコマンド例 pip install --user pycryptodome # または pip3 install --user pycryptodome
インストール時に
telegram2john.py
はこのライブラリの有無をチェックし、なければ警告メッセージを表示します。 -
Telegram のローカルデータファイル: これが最も重要です。パスコードハッシュが含まれている実際のデータファイルが必要です。
- Androidの場合: ターゲットデバイスから
userconfing.xml
ファイルを取得する必要があります。通常、このファイルはTelegramアプリのデータディレクトリ内にありますが、アクセスするにはroot化が必要になる場合があります。ファイルパスはデバイスやAndroidバージョンによって異なる可能性があります。 例:/data/data/org.telegram.messenger/shared_prefs/userconfing.xml
- Desktop (Windows) の場合: Telegram Desktop のデータは通常、ユーザーのAppDataフォルダ内に保存されています。
tdata
というフォルダを探してください。このフォルダ全体、あるいは少なくともその中にあるkey_datas
(新しい形式) またはmap0
,map1
(古い形式) ファイルが必要です。 例:C:\Users\<ユーザー名>\AppData\Roaming\Telegram Desktop\tdata
- Desktop (Linux) の場合: ホームディレクトリ以下の
.local/share/TelegramDesktop/tdata
にデータが保存されていることが多いです。 - Desktop (macOS) の場合:
~/Library/Application Support/Telegram Desktop/tdata
にデータが保存されていることが多いです。
重要: これらのファイルやフォルダを安全な場所にコピーして作業を行ってください。元のデータを直接操作するのは避けましょう。
- Androidの場合: ターゲットデバイスから
telegram2john.py の実行手順 🚀
telegram2john.py
を使ってハッシュを抽出する手順は以下の通りです。
1. John the Ripper の run ディレクトリに移動する
まず、telegram2john.py
が格納されているディレクトリに移動します。場所は JtR のインストール方法やOSによって異なります。
# Kali Linux の場合の例 (場所は異なる可能性があります)
cd /usr/share/john/run/
# または
cd /path/to/your/john/run/
2. telegram2john.py を実行する
次に、Python 3 を使ってスクリプトを実行します。引数として、準備した Telegram のデータファイルまたはデータフォルダのパスを指定します。
Android (userconfing.xml
) の場合:
python3 telegram2john.py /path/to/your/userconfing.xml
Desktop (tdata
フォルダ) の場合:
python3 telegram2john.py /path/to/your/tdata/
または、key_datas
ファイルを直接指定することも可能です(新しい形式の場合)。
python3 telegram2john.py /path/to/your/tdata/key_datas
3. 出力 (ハッシュ) をファイルに保存する
スクリプトが正常に実行されると、John the Ripper が認識できる形式のハッシュ文字列が標準出力に表示されます。この出力をファイルにリダイレクトして保存します。
# Android の例
python3 telegram2john.py /path/to/your/userconfing.xml > telegram_hash.txt
# Desktop の例
python3 telegram2john.py /path/to/your/tdata/ > telegram_hash.txt
ファイル名 (telegram_hash.txt
) は任意の名前に変更可能です。
出力されるハッシュ形式の例:
出力されるハッシュは、どのデータから抽出されたかによってプレフィックスが異なります。
- Android (古い形式):
$telegram$1*...
- Desktop (古い形式):
$telegram$2*...
- Desktop (新しい形式, PBKDF2-HMAC-SHA512):
$telegram$3*...
以下はハッシュの例です(実際の値ではありません)。
# Desktop (新しい形式) のハッシュ例
/path/to/your/tdata/key_datas:$telegram$3*...長い英数字と記号の文字列...
ファイルパスの部分は、John the Ripper がどのファイルからハッシュが生成されたかを示すためのラベルとして機能します。
注意点・トラブルシューティング
- パーミッションエラー: データファイルやフォルダに対する読み取り権限がない場合、エラーが発生します。
chmod
などで適切な権限を付与してください。 - Python 3 が見つからない:
python3
コマンドが見つからない場合は、Python 3 がインストールされているか、パスが通っているか確認してください。 - PyCryptodome の警告: ライブラリがない旨の警告が表示されても、基本的なハッシュ抽出は可能な場合がありますが、完全な機能を利用するにはインストールが推奨されます。
- データファイルが見つからない/形式が違う: 指定したパスが間違っているか、Telegramのバージョンが古すぎたり新しすぎたりして、
telegram2john.py
が対応していない形式である可能性があります。スクリプトは2018年(Android, Desktop旧形式)および2020年(Desktop新形式)時点の情報に基づいています。最新のTelegramバージョンでは仕様が変更されている可能性も考慮してください。GitHubリポジトリのIssueなどを確認すると良いでしょう。 - Windowsでのパス区切り文字: Windows環境で実行する際、パス区切り文字 (
\
) やドライブ名 (C:
など) が原因で John the Ripper がハッシュを正しく認識できない場合があります。過去の報告では、ドライブ名を省略し、カレントディレクトリをデータのあるドライブに変更してから実行すると解決することがありました。
REM Windows で C ドライブの tdata を処理する場合の例
C:
cd \Users\<ユーザー名>\AppData\Roaming\Telegram Desktop
python \path\to\john\run\telegram2john.py tdata > C:\path\to\save\telegram_hash.txt
John the Ripper でパスコードを解析する 🔓
ハッシュファイル (telegram_hash.txt
) が準備できたら、いよいよ John the Ripper を使ってパスコードの解析(クラッキング)を試みます。
1. 基本的な実行コマンド
最も基本的なコマンドは、John the Ripper にハッシュファイルを指定するだけです。JtR は自動的にハッシュタイプを検出し、デフォルトのモード(シングルクラック、辞書、インクリメンタル)を順番に試します。
# John the Ripper の実行ファイルがあるディレクトリ、またはパスが通っている前提
john /path/to/your/telegram_hash.txt
2. モードを指定して実行する
より効率的に解析を行うために、攻撃モードを指定することができます。
-
辞書モード (
--wordlist
): パスワードの候補リスト(辞書ファイル)を指定して攻撃します。強力な辞書ファイル (例: rockyou.txt) を使うと効果的です。john --wordlist=/path/to/your/dictionary.txt /path/to/your/telegram_hash.txt
-
インクリメンタルモード (
--incremental
): 定義された文字セットを使って、総当たり攻撃(ブルートフォース)を行います。単純な数字のみのパスコードなどに有効ですが、時間がかかります。# 数字4桁のパスコードを試す場合 (john.conf の設定による) john --incremental=Digits4 /path/to/your/telegram_hash.txt
(モード名は
john.conf
ファイルで定義されています) -
マスクモード (
--mask
): パスコードのパターンがある程度わかっている場合に、そのパターンに基づいて候補を生成します。例えば、「数字4桁」なら?d?d?d?d
のように指定します。john --mask='?d?d?d?d' /path/to/your/telegram_hash.txt
3. ハッシュ形式を明示的に指定する (--format)
John the Ripper がハッシュ形式を自動認識できない場合や、特定の形式として扱いたい場合に、--format
オプションを使用します。
# Telegram Desktop (新しい形式) を明示する場合
john --format=telegram-desktop /path/to/your/telegram_hash.txt
# Telegram Android を明示する場合
john --format=telegram-android /path/to/your/telegram_hash.txt
利用可能なフォーマット名は、john --list=formats
コマンドで確認できます。Telegram関連のフォーマットを探してください。
4. 解析結果の表示 (--show)
パスコードの解析に成功すると、結果は $JOHN/john.pot
というファイル(Johnのホームディレクトリにあるpotファイル)に保存されます。--show
オプションを使うことで、クラックされたパスワードを表示できます。
john --show /path/to/your/telegram_hash.txt
成功した場合、以下のように表示されます(例)。
/path/to/your/tdata/key_datas:1234
1 password hash cracked, 0 left
この例では、パスコードが “1234” であることが判明しました。
5. セッションの管理
John the Ripper は、解析作業を中断・再開する機能を持っています。Ctrl+C で中断すると、現在の状態が .rec
ファイルに保存されます。再開するには、同じコマンドを再度実行するか、--restore
オプションを使用します。
# 前回中断したセッションを再開
john --restore
解析にかかる時間は、パスコードの複雑さ、使用するマシンの性能、選択した攻撃モードや辞書ファイルによって大きく異なります。単純な数字のパスコードであれば数秒〜数分で見つかることもありますが、複雑なパスコードの場合は数時間、数日、あるいはそれ以上かかることもあります。
まとめと倫理的考慮事項 ⚖️
telegram2john.py
は、Telegram のローカルデータからパスコードハッシュを抽出し、John the Ripper で解析するための橋渡しをする便利なツールです。これにより、忘れてしまったローカルパスコードの回復や、正当な権限の下でのデジタルフォレンジック調査などに役立てることができます。
手順の概要:
- John the Ripper (Jumbo)、Python 3、(推奨: PyCryptodome) を準備する。
- 解析対象の Telegram ローカルデータ (userconfing.xml または tdata フォルダ) を安全な場所にコピーする。
telegram2john.py
を実行し、データファイル/フォルダを指定してハッシュを抽出し、ファイルに保存する。- John the Ripper を使用し、生成されたハッシュファイルを指定して解析を実行する。
--show
オプションで解析結果を確認する。
⚠️ 重要な注意点
この技術は強力であるため、悪用される危険性も伴います。以下の点を強く意識してください。
- 許可なきアクセスは厳禁: 自分自身のアカウントやデータ、または法的にアクセスが許可されているデータに対してのみ、これらのツールを使用してください。他人のTelegramアカウントのデータを不正に入手し、パスコードを解析する行為は、プライバシーの侵害であり、重大な法的問題に発展します。
- 倫理的な利用: ツールは、あくまでパスワードリカバリや正当なセキュリティ調査の目的で使用されるべきです。
- Telegramのセキュリティ: Telegram自体は安全なメッセンジャーですが、ローカルパスコードを設定することで、デバイスへの物理的なアクセスに対する保護層を追加できます。推測されにくい、十分に複雑なパスコードを設定することが推奨されます。
この記事が、telegram2john.py
と John the Ripper を正しく理解し、適切に活用するための一助となれば幸いです。ツールの使用は自己責任で行い、常に法と倫理を遵守してください。 🙏
コメント