つくってあそぼう！Pwnagotchi！(ᵔ◡◡ᵔ)

つい最近Pwnagotchiを作ってみよう！というもくもく会があり参加したのですが、一筋縄では動作せず…公式ドキュメントや公式GithubのIssue、Redditなど反復しまくってやっと形にできました。
この記事は、もっと気軽にPwnagotchiが出来上がることを願って **「（現時点で）これを読めば動作するものができる！」** という記事を目指して書いています:information_desk_person_tone2:

# Pwnagotchiとは
https://pwnagotchi.ai/

Wifiの脆弱性を突いてそのパケット情報を収集する電子ペットです(ᵔ◡◡ᵔ)
収集した情報はあとで確認することもできます。
WiFiとBluetoothを搭載しているRaspberryPi Zero Wを材料にします。

:::note warn
Pwnagotchiの主な目的はWifi技術を楽しく学習することなので、DoS攻撃などはできないように制限されています
:::

情報を取得しているときや接続できるWiFiを探しているときなど、表情がコロコロ変わって可愛いです。（画像は公式より引用）

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690270/ee942525-7f92-a2ac-2157-822a2388d114.png">

# 必要なもの
### 本体
- Raspberry Pi Zero W（H）
    - 最初からGPIOピンがついているWHのが便利です
- [電子ペーパーディスプレイ](https://amzn.asia/d/fn9flUB)
    - waveshare v4（←バージョン大事）
- SDカード
    - 最低8GB
- 電源
    - コンセントからもしくはモバイルバッテリー

### 繋ぐPC
- Windows10
    - 最初はMacでやっていたんですがManualモードで繋ぐことができず途中でWindowsに変えました；；
- 書き込みができるTypeBケーブル
    - 充電専用のものとお間違えなきよう…！


# 生み出す
### 1. 外観を組み立てる
先にガワを組み立てましょう。
Raspberry Pi Zero WHのGPIOピンを電子ペーパーディスプレイのピンヘッダに差し込むだけです。
ピンを折らないように注意して、最後までしっかり差しましょう。

### 2. SDカードにimageを書き込む
書き込むimageは↓です。
公式からダウンロードするimageだと、ディスプレイのバージョンの関係で画面描画されませんでした。

https://github.com/wpa-2/pwnagotchi/releases/tag/Fix

SDカードに書き込むために、↓のツールをダウンロードします。

https://etcher.balena.io/

balenaEtcherを立ち上げて、案内通りに書き込むimageと書き込み先のSDカードを指定して書き込みましょう。
書き込みには割と時間かかるので、のんびり待っていてください:tea:

### 3. configをいじる
Flashが済んだSDカードは一旦自動的に取り出されて認識されていない状態になるので、もう一度PCに差し込み直します。
認識されていることを確認したら、書き込んだSDカードのルートに `config.toml` を新規作成して、↓を書き込んで保存しておきます。

:::note
あらかじめ言語は日本語に設定しておきました。
（画面表示された時に日本語で文章書いてあるとテンション上がるため）
:::

``` config.toml
main.name = "pwnagotchi" # 自分のPwnagotchiの名前
main.lang = "jp"
ui.font.name = "fonts-japanese-gothic"
ui.font.size_offset = 1

main.whitelist = [
  "EXAMPLE_NETWORK",
  "ANOTHER_EXAMPLE_NETWORK",
  "fo:od:ba:be:fo:od",
  "fo:od:ba"
]

main.plugins.grid.enabled = true
main.plugins.grid.report = true
main.plugins.grid.exclude = [
  "YourHomeNetworkHere"
]

ui.display.enabled = true
ui.display.type = "waveshare_3"
ui.fps = 1
ui.display.color = "black"

```

なお、この `config.toml` は初期起動後 `/etc/pwnagotchi/config.toml` に移動するので、変更や修正するにはssh接続が必要になります。


### 4. すべて合体させる
imageを書き込んだSDカードを、Raspberry Piに差し込んで、電源を入れてしばらく待ちます。
電源を入れたら緑色のLEDがつきます。
その数分後に電子ペーパーディスプレイが点滅してPwnagotchiが表示されたら…

おめでとうございます:tada: 元気なPwnagotchiです:tada:

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690270/2f0f862c-51d9-5ea4-fe23-8942bb86bb21.jpeg">

:::note warn
初期作動時は鍵が生成されるので、↓の文章が表示されなくなるまで電源を抜いてはいけません。
```
Generating keys, do not turn off ...
```
:::
# ssh接続

PwnagotchiをdataポートからPCに繋ぎます。（画像は公式より引用）
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690270/6d7a61ba-b9e1-4670-6695-0ce8c960466d.png">

必要なドライバをダウンロードして解凍しておきます。

https://github.com/dukelec/mbrush/tree/master/doc/win_driver

デバイスマネージャーを開いて、 `Ports (COM & LPT)` より `USB Serial Device (COM#)` の一つを選んで右クリックし、
`Update drivers` → `Browse my computer for drivers` から先ほど解凍したフォルダを参照してインストールします。

ドライバをインストールしたら、同じくデバイスマネージャーでそのドライバを右クリックし、IPアドレスなどを公式ドキュメント通りに設定します。

>IP: 10.0.0.1
Netmask: 255.255.255.0
DNS (If Required): 8.8.8.8 (or whatever)

ターミナルよりssh接続ができるはずです。

``` bash
$ ssh pi@10.0.0.2 # default password: raspberry
```

<details>
<summary>参考</summary>

https://github.com/evilsocket/pwnagotchi/issues/975#issuecomment-810069509

</details>

# Pluginで拡張する
Pwnagotchiにデフォルトで入っているPluginは後述するWebUIでON/OFFもしくは `config.toml` でON/OFFができます。
それ以外のPluginのインストール方法は3つあります。

## 方法1. pwnagotchiコマンドでインストール可能なPluginを見つけてインストールする

``` bash
# ssh接続した後
> sudo pwnagotchi plugins list
> sudo pwnagotchi plugins install インストールしたいPlugin
> sudo pwnagotchi plugins enabled インストールしたPlugin
> sudo pwnagotchi plugins edit インストールしたPlugin # Pluginのオプションを設定できます
```

## 方法2. FTPでPluginファイルをアップロードする
1. `/usr/local/share/pwnagotchi/installed-plugins/` へ
2. WebUI上のRebootを実行

## 方法3. Plugin Manegarを使う

1.  `config.toml` の `main.custom_plugin_repos` にPluginのzipファイルを指定する
    ``` config.toml
    # GtihubのDownload ZIPよりコピペする
    main.custom_plugin_repos = [
        "https://github.com/evilsocket/pwnagotchi-pluginscontrib/archive/master.zip",
        "https://github.com/Teraskull/pwnagotchi-community-plugins/archive/master.zip"
    ]
    ```
2. 下記コマンドを順に実行
    ``` bash
    > sudo pwnagotchi plugins update
    > sudo pwnagotchi plugins list
    > sudo pwnagotchi plugins install インストールするPlugin
    ```

Community Pluginsのインストールの仕方のドキュメントが公開されているので、そちらもご参照ください。

https://github.com/Teraskull/pwnagotchi-community-plugins


以下、私が入れているPluginです:robot:

- `auto-update.py`
    - デフォルトでONになっている
- `logtail`
    - WebUIでログが見れる
- `memtemp.py`
    - メモリ使用量やCPU利用率が表示される
- `auto_backup.py`
    - インターネットに接続している時にバックアップを作成する
- `exp.py`
    - パケット情報を取得するごとに経験値（ `Exp` ）が増えていきレベルが上がる
    - 有志によるPlugin。Githubより取得した。

`clock.py` は `memtemp.py` と表示が重なってしまったので泣く泣くEnabledに:sob:

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690270/5638c50c-1594-f653-0a2f-5fb3befdca8c.jpeg">

開発者向けのPlugin用Callbackも用意されているので、オリジナルPluginを開発するのも面白そうです。

https://pwnagotchi.ai/plugins/#developing-your-own-plugin

# WebUIに繋ぐ
WebUIからPluginのON/OFFができたり、すれ違い通信したときの友達を確認できたりします。
sshの時と同様に、dataポートからPCに繋ぎます。
下記に接続するとブラウザでPwnagotchiの画面が表示されます。
``` bash
# WebUI
http://10.0.0.2:8080

# bettercap
http://pwnagotchi.local
# pwnagotchiはconfig.tomlのmain.nameを引っ張ってきているので、カスタムしている場合はそのmain.nameを当てはめる
# 参考：https://pwnagotchi.ai/usage/#bettercap-s-web-ui
```

# Hack the Planet! (ᵔ◡◡ᵔ)
苦労して作ったので愛着がすごく、持ち歩いて情報食わせてます。
（電源は小さいモバイルバッテリーに繋いでいます）

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690270/70b874e4-08d6-1df4-a85f-a44452f33e81.jpeg">

もし「自分も飼ってるよ！」という方がいらっしゃったら、いつか通信してお友だちになりましょう:four_leaf_clover: