android端末からadb backup を使った記事を見つけましたが、リンク切れ等で再現できなかったので書き直しました。appsフォルダのデータ抽出から、Windows上でバックアップデータの展開方法まで記載しました。
環境
Windows11 Home
(adb インストール済み PATHは通していません)
java version “21.0.2” 2024-01-16 LTS
android端末(USBデバックをONにしたもの ※開発者モード切替については省略)
データ抽出
①android端末からバックアップを作成し、windowsに保存する
# adb のインストールフォルダに移動
C:\ > cd c:\tool\adb
C:\tool\adb> adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
RF8M90**** unauthorized # ← android端末を認識している状態
C:\tool\adb> adb backup -all # 全てバックアップ
WARNING: adb backup is deprecated and may be removed in a future release
Now unlock your device and confirm the backup operation...
# 端末の画面ロックを解除しておくこと
android端末の様子
アンダーバーの部分にパスワードを入力し、「データをバックアップ」を選択するとバックアップが開始します
バックアップが終了すると、windowsのカレントディレクトリに
backup.ab
というファイルができます。
C:\tool\adb>dir *.ab
Directory of C:\tool\adb
2024/10/23 水 22:50 6,948,933 backup.ab
② デコードアプリをコンパイルして展開
デコーダ(abe.jar)のバイナリデータを探しても見つからなかったので、ソースからコンパイルしました。
コンパイルに必要なのは、Java SDK,git,BouncyCastleライブラリ です。
JAVA Java Downloads | Oracle 日本
BouncyCastleライブラリ Download Bouncy Castle Java – Bouncycastle
abe GitHub – nelenkov/android-backup-extractor: Android backup extractor
BouncyCastleは、とりあえず執筆時の最新版(bcprov-jdk18on-1.78.1.jar)を使いました。
BouncyCastleダウンロードサイト
フォルダ構成はこんな感じで配置(参考程度に)
c:\tools\adb\android-backup-extractor\bcprov-jdk18on-1.78.1.jar # BouncyCastleライブラリ
└\backup.ab # backupデータ
コンパイルして実行
# デコーダ(abe)のリポジトリをクローン
C:\tool\adb > git clone https://github.com/nelenkov/android-backup-extractor.git
C:\tool\adb > cd android-backup-extractor
# javaでコンパイル
C:\tool\adb\android-backup-extractor> javac -cp "src;bcprov-jdk18on-1.78.1.jar" src/org/nick/abe/*.java
# backupファイルのデコード
C:\tool\adb\android-backup-extractor> java -cp "src;bcprov-jdk18on-1.78.1.jar" org.nick.abe.Main backup.ab backup.tar
Usage:
unpack: abe unpack <backup.ab> <backup.tar> [password]
pack: abe pack <backup.tar> <backup.ab> [password]
pack for 4.4: abe pack-kk <backup.tar> <backup.ab> [password]
If the filename is `-`, then data is read from standard input
or written to standard output.
Envvar ABE_PASSWD is tried when password is not given
# パスワードを入れてと怒られたw
# パスワードを入れて再チャレンジ
C:\tool\adb\android-backup-extractor>java -cp "src;bcprov-jdk18on-1.78.1.jar" org.nick.abe.Main unpack backup.ab backup.tar "1"
Calculated MK checksum (use UTF-8: true): 89953D94F01EECC75BA0786B384A33472BCFD57176546F931CA16A3AEA8B7***
0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25% 26% 27% 28% 29% 30% 31% 32% 33% 34% 35% 36% 37% 38% 39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49% 50% 51% 52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64% 65% 66% 67% 68% 69% 70% 71% 72% 73% 74% 75% 76% 77% 78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90% 91% 92% 93% 94% 95% 96% 97% 98% 99% 100%
16212992 bytes written to backup.tar.
C:\tool\adb\android-backup-extractor>dir *.tar
2024/10/23 水 22:33 16,212,992 backup.tar # デコードされたファイル
③tarファイルの解凍
tarファイルを右クリックして展開するとファイルを解凍できます。
あとは説明不要と思います。
終わったら、USBデバックをOFFに戻してください。
最後に
android上のappsフォルダは通常の方法では取得することができないのですが adb backupを使うと抽出できますね。
抽出自体は簡単なのですが、abファイルの展開に癖があるのでちょっと大変かと思います。
パスワードで暗号化してるんだし、エンコードアプリ作ったら需要あるのかなと感じました。