ようへい

2013年10月26日土曜日

Android でパケットキャプチャしてみる

Android でパケットキャプチャをしてみたので、忘れないようにメモ。
Unix OS 等でtcpdumpに触れたことがある方向けに書くので、わからない方はスルーしてください。

準備

  1. Android端末のroot取得
  2. Android Virtual Devices ManagerにてAndroid端末と同じバージョンの仮想端末を作成する
※以下から落とした tcpdump でも使えます。
Android tcpdump Downloads
https://www.androidtcpdump.com/android-tcpdump/downloads

キャプチャしてみよう

  1. Android Virtual Devices Manager (以下AVD)にて、Android端末と同バージョンの仮想端末を起動。
  2. 仮想端末からtcpdumpを取得。
    > adb -e pull /system/xbin/tcpdump C:\temp
    737 KB/s (652964 bytes in 0.865s)
  3. Android端末とPCをつなぎます。
  4. 認識しているか確認。
    > adb devices
    List of devices attached
    xxxxxxxxxxxxxxxxx    device
  5. エミュレータから取得したtcpdumpを端末に入れます。
    > adb push C:\temp\tcpdump /sdcard/tcpdump
    3021 KB/s (652964 bytes in 0.211s)
  6. /system にtcpdumpをおけるよう、rwモードでリマウント。
    > adb shell
    shell@android:/ $ su
    su
    root@android:/ # mount -o remount,rw /dev/block/mtdblock0 /system
    mount -o remount,rw /dev/block/mtdblock0 /system
  7. tcpdumpが無いことを確認。
    root@android:/ # ls /system/xbin/tcpdump
    ls /system/xbin/tcpdump
    /system/xbin/tcpdump: No such file or directory
  8. tcpdumpのコピーと実行権付与。
    root@android:/ # cp /sdcard/tcpdump /system/xbin/tcpdump
    cp /sdcard/tcpdump /system/xbin/tcpdump
    root@android:/ # ls -l /system/xbin/tcpdump
    ls -l /system/xbin/tcpdump
    -rw-rw-r-- root     root       652964 2013-10-26 11:46 tcpdump
    root@android:/ # chmod 755 /system/xbin/tcpdump
    chmod 755 /system/xbin/tcpdump
    root@android:/ # ls -l /system/xbin/tcpdump
    ls -l /system/xbin/tcpdump
    -rwxr-xr-x root     root       652964 2013-10-26 11:46 tcpdump
  9. tcpdumpコマンド発行。
    root@android:/ # tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap
    tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap
    tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
  10. Android端末でキャプチャしたいアプリなど起動する。
  11. Ctrl+Cでキャプチャを終了
  12. Wiresharkなどでキャプチャしたファイルを開く
tcpdump導入済みであればこんな感じ。
> adb shell
shell@android:/ $ su
su
root@android:/ # tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap
tcpdump -s 0 -vv -w /sdcard/tcpdump_20131026.pcap
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
インタフェースを調べてキャプチャする場合は以下
shell@android:/ # tcpdump -D
1.dummy0 [Up, Running]
2.wlan0 [Up, Running]
3.rmnet_usb0 [Up, Running]
4.lo [Up, Running, Loopback]
5.any (Pseudo-device that captures on all interfaces) [Up, Running]
6.nflog (Linux netfilter log (NFLOG) interface) [none]
7.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
8.sit0 [none]
9.usb0 [none]
10.rmnet_data0 [none]
11.r_rmnet_data0 [none]
12.rmnet_data1 [none]
13.r_rmnet_data1 [none]
14.rmnet_data2 [none]
15.r_rmnet_data2 [none]
16.rmnet_data3 [none]
17.r_rmnet_data3 [none]
18.rmnet_data4 [none]
19.r_rmnet_data4 [none]
20.rmnet_data5 [none]
21.r_rmnet_data5 [none]
22.rmnet_data6 [none]
23.r_rmnet_data6 [none]
24.rmnet_data7 [none]
25.r_rmnet_data7 [none]
26.r_rmnet_data8 [none]
shell@android:/ # tcpdump -i 2 -vv -w /sdcard/tcpdump_20131026.pcap
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
ちなみに私が使用した仮想端末に入っていたtcpdumpのバージョンは以下。
root@android:/ # tcpdump --help
tcpdump --help
tcpdump version 3.9.8
libpcap version 0.9.8
Usage: tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ]
                [ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]
                [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
                [ -W filecount ] [ -y datalinktype ] [ -Z user ]
                [ expression ]
関連記事

2013年10月18日金曜日

S-OFF済みのHTL22を Android 4.2.2 (2.15.970.1) にアップデートしてみた

S-OFF済みのHTL22を Android 4.2.2 (2.15.970.1) にアップデートしてみた
私が所有するスマフォで初のHTC機となるHTL22
S-OFFとか、独特の仕様があってナカナカとっつきにくい。
初のHTC機という事でビビッていたというのと、HTC速報Devさんで提供していただいている初期の自作RUUに不具合があったというので、アップデートをためらっていたのだが、アップデート通知がうるさくなってきたのでアップデートしてみた。

前提条件

  • ビルド 1.07.970.4 の時点でS-OFFを行ってあること
  • ClockworkModなどのカスタムリカバリが導入済みであること

準備するもの

HTC速報さん提供の4.2.2対応ClockworkMod (recoverycwm2.img)
au HTL22 HTC J One 2.15.970.1のアップデートの現在状況と、更新ファイル(CWM/RUU)等を公開した件について (HTC速報Dev) | HTC速報
http://htcsoku.info/htcsokudev-news/au-m7wlj-2159701/
HTC速報さん提供の 4.2.2 のRUU (RUU_M7_WLJ_JB422_SENSE50_MR_KDDI_JP_2.15.970.1_Radio_1.23.11.0829_NV_3.39_01C_unsigned_htcsoku_PN07IMG.zip)
au HTL22 HTC J One 2.15.970.1のアップデートの現在状況と、更新ファイル(CWM/RUU)等を公開した件について (HTC速報Dev) | HTC速報
http://htcsoku.info/htcsokudev-news/au-m7wlj-2159701/
SuperSU (現時点ではUPDATE-SuperSU-v1.65.zip)
SuperSU - xda-developers
http://forum.xda-developers.com/showthread.php?t=1538053

アップデート

基本的にはHTC速報Devさんに書かれている手順通り
  1. RUUのzipからsystem.imgを抽出し、SDカードに入れる
  2. RUUのzipをPN07IMG.zipにリネームし、SDカードに入れる
  3. SuperSUをSDカードに入れる
  4. HTL22の電源OFF
  5. 電源+ボリュームダウンを押してFASTBOOT起動
  6. recoveryでCWM起動
  7. mounts and storage -> mount /exrernal_sd
  8. PCと接続し、コマンドプロンプトにてHTC速報Devさんに書かれているコマンドを発行
    >adb shell
    ~ # dd if=/external_sd/system.img of=/dev/block/mmcblk0p38
    dd if=/external_sd/system.img of=/dev/block/mmcblk0p38
    4587518+0 records in
    4587518+0 records out
    2348809216 bytes (2.2GB) copied, 1046.241385 seconds, 2.1MB/s
    ~ # reboot bootloader
    reboot bootloader
    system.imgの書き込みに約20分かかった
  9. FASTBOOTから、HBOOT起動
  10. すると、自動でRUUが始まる
  11. しばらく待つ
  12. Do you want to start update? <VOL UP> Yes <VOL DOWN> Noと表示されることを確認。
  13. ボリュームアップを押してアップデート
  14. system.imgのみFail-scになることを確認
  15. ここまででアップデート完了
  16. 再度FASTBOOT起動
  17. PCと接続し、コマンドプロンプトにてCWMをフラッシュ
    > fastboot flash recovery recoverycwm2.img
    > fastboot reboot-recovery
  18. CWMにてinstall zip from sdcard -> choose zip from external sdcard -> SuperSUのzipを選択しインストール
だいたいこんな感じです。
あとはBusyBox入れたり。
設定 -> バージョン情報 -> ソフトウェア情報 -> その他 -> ビルド番号を7回タップして、開発者向けオプションを出すのを忘れずに。
関連記事