USBアダプターを使って無線LANアクセスポイントに任意のMACアドレスを設定してみた（一部制限あり）

# はじめに
とある小中学生の頃にハマっていたゲームの新作がリリースされたので早速プレイしたのですが、どうやら今作もキャッチで出現する個体は、周囲のアクセスポイントのMACアドレス（BSSID）から生成されているらしい。

それはつまり、MACアドレスを変えられればガチャをいくらでも回せるということだし、どのMACアドレスからどの個体が出現するのかという情報があれば、強個体を全国どこにいてもキャッチすることが可能になるということ。

今回たまたま自宅にあったPCと機材でMACアドレスを自由に変更してAPを作ることに成功したので、その方法を備忘録込みとして残しておきます。

間違い、質問、補足情報などありましたらお気軽にどうぞ。

**2024/08/18 追記**
ユニバーサル、ローカル、どちらのアドレスも指定できるUbuntu版の手順を記事にまとめました。こっちにリンク貼るの忘れてました

https://qiita.com/kiritannplum/items/80d8962875f006c992e2

**2024/08/04 追記**

:::note warn
この記事の方法で指定できるMACアドレスは**ローカルアドレスのみ**です。
ガチャは行えますが、野生で発見できる個体の多くはユニバーサルアドレスであることが多く、MACアドレスが分かってもこの方法で**出現させられる可能性は低い**です。
:::

**2024/08/02 追記**

:::note
この記事で紹介している方法を簡単にできるようにするソフトウェアを有志の方から紹介していただきました。
一部文字化けしますが普通に使えることを確認したので、仕組みを理解し、ゲームに合わせて自動化したいという方以外はこれでいい気がします。
:::

https://technitium.com/tmac/


**2024/08/03 追記**

:::note 
アダプターのセットアップについて解説を増強しました。
MACアドレスの変更に失敗する場合
`0.USB Wi-Fiアダプターをセットアップする`
を読んでみてください。
:::

:::note 
モバイル ホットスポットの設定に関して重要な工程が発覚したため、工程4.1、4.2、及び6.1を追記しました。
追記前の方法でうまくいかなかった人はこの3工程も試してみてください。
:::

# よくあるかもしれない誤解・質問
+ SSID（Wi-Fi名）変えれば出現する個体が変わるって聞いたけど？
    + 過去作と同様、MACアドレスのみが影響することを検証で確認しています
+ スマホでSSIDを変えたら違う個体が出てきたけど？
    + これは一部スマホの仕様でSSIDを変えるとMACアドレスも自動的に変わるのが理由です。
      この仕様がないスマホの機種・環境ではガチャはできません
+ スマホでMACアドレスを自由に設定する方法ある？
    + 無いと思われます。この記事ではWindows PCを使用する方法のみ解説します

# 注意事項

+ すべて自己責任で行ってください。この記事を参考にし、問題が発生しても責任は取りません
+ レジストリをいじる方法なのでPC上級者向けです
+ レジストリを迂闊にいじるとPCが不安定になったり起動しなくなる場合があるので、事前にバックアップを取るなど対策をおすすめします。方法は各自調べてください
+ MACアドレスが周囲の他のAPと被らないようにしてください。MACアドレスが被ると接続が不安定になり、そのAPの利用者に迷惑が掛かります
+ あくまで私の環境で成功した方法を書いていますので、別の環境や機種で成功する保証はありません
**2024/08/03 追記**
+ MACアドレスの変更中はAPとしてのインターネットの利用はできなくなります。通常のAPとして機器を接続したい場合はMACアドレスを元に戻してください

# 環境・使用するもの
+ `モバイル ホットスポット`機能を有するWindows搭載PC
※解説ではWindows 11 Homeで行います。

+ APとして発信機能を持つUSB Wi-Fi アダプター
※解説ではTP-Link Archer T2U Nano を使用します。そのほかの機種での動作確認はしていません。
~~※※Archer T2U NanoはAPとしての発信機能を持ちませんが、APの存在を周囲に知らせるビーコンと呼ばれる信号を飛ばすことはできるようです。キャラを出現させるにはビーコン信号さえあれば十分なため、このまま使用できます。通常のAPとしても使用したい場合は親機の機能を持つ製品を用意してください。~~ MACアドレス変更中はAPとして接続できないだけで、元に戻せば使えました。

https://www.tp-link.com/jp/home-networking/adapter/archer-t2u-nano/



+ MACアドレス確認用のスマホ or PC
※解説ではAndroidスマホを使用します。周囲のWi-FiのMACアドレスを調べられるアプリ・ソフトの一例を以下に記載します。（自身の発しているWi-Fiは確認できません）

Windows

https://www.netspotapp.com/

Android

https://play.google.com/store/apps/details?id=com.vrem.wifianalyzer

iOS（所持していないので未確認）

https://apps.apple.com/jp/app/bssid-scan/id1442586100


# 解説
:::note warn
レジストリのバックアップを取っておくことをおすすめします。
迂闊に変更するとPCが不安定になったり、起動しなくなる可能性があります。
:::

## 0.USB Wi-Fiアダプターをセットアップする
既に普段から使用している、セットアップが終わっているなら不要です。
各アダプターの説明を見ながら必要なセットアップをしてください。

**2024/08/03 追記**
Archer T2U Nanoのドライバーが正しくインストールされておらず、MACアドレスが変更できないという方がそこそこいます。
TP-Link社のアダプターの場合は下記リンクからドライバーを検索してダウンロードして、インストールまでしっかり終わらせてください。

https://www.tp-link.com/jp/support/download/

Archer T2U Nanoの場合、ドライバーのバージョンが`1030.29.329.2019`で、MACアドレスが変更できることを確認しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850759/43a251e4-14b4-2924-17f3-62a9a01f9465.png)

ドライバーのバージョンの確認方法は、
Windows 11の設定→`ネットワークとインターネット`→`ネットワークの詳細設定`→`ネットワーク アダプター`の欄から目的のアダプターを探して展開→`追加のプロパティを表示`
で確認できます。

そのほかのWi-Fiアダプターでもドライバーを最新にしておくことをお勧めします

## 1.レジストリエディターを起動する
Windowsキーを押して出てくる検索欄か、Win + R を押して「ファイル名を指定して実行」を開き、
`regedit`と入力してレジストリエディターを開きます。

## 2.目的のキーを見つける
キーとはレジストリエディターに表示されているのフォルダ的なもののことです。

上部のURLバー的な箇所に以下を入力します。
```
コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
```
ここにはPCに接続された各Wi-Fiアダプター達の設定や情報が格納されています。
今後はたびたび来ることになる可能性があるので、
`メニュー バー`→`お気に入り(A)`→`お気に入りに追加(A)`
で、ブックマーク的な機能が使えるので`Wi-Fiアダプタ設定一覧`など、わかりやすい名前を付けておきましょう。

続きです。
`{4d36e972-e325-11ce-bfc1-08002be10318}`というキーの中に`0000`、`0001`といったキーが並んでいると思います。
その中の、`DriverDesc`の値を確認し、今回使用するUSB Wi-Fiアダプターを探します。
値とはレジストリエディターの右側に表示されているキーに格納されたデータのことです。

私の環境では`0002`にありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850759/7d85b210-55fa-3359-33a9-53fd8c0074a3.png)


## 3.MACアドレスに関する値を追加する
目的のキーが見つかったら必要な値を追加します。

右側の値が並んでる枠の何もないところで右クリックをして、
`新規`→`文字列値`を選択します。

作成した値の名前を`NetworkAddress`に変更します。

:::note
既に`NetworkAddress`の値が存在する場合は~~ここの操作は不要です。~~
**値のバックアップを取っておきましょう。**
`NetworkAddresBackup`などの名前で値を作成し、値をコピペでバックアップを取っておくと何かあっても安心です。
:::


## 4.`NetworkAddress`を編集する
`NetworkAddress`をダブルクリックして、`文字列の編集`ウィンドウを開きます。
値のデータに設定したいMACアドレスを設定します。

MACアドレスは、12桁の16進数です。つまり、0～9、A～Fのいずれかを使った12文字にする必要があります。

ここでは試しに`7E7777777777`と設定してみましょう。

上2桁目がEなのは、参考文献[^1]によると上2桁目は2やEなど一部の文字しか使えないとのことで、上2桁目だけEに固定しています。
アダプターの機種依存の問題だと思うので他の機種では問題ないかもしれないし、逆に2桁目がEだと失敗する可能性もあります。そこは各自で調べたりいろいろ試してみてください。

入力出来たらOKを押して閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850759/87e90c40-dcf2-306d-29f1-62b9f1893acd.png)

**2024/08/03 追記**
研究が進み、2桁目が制限されている理由と使える文字がわかりました。
MACアドレスの規格として、16進数の上2桁を表すbit列の、下2bitに特別な意味があり、
基本的に自由に設定したAPのカスタムMACアドレスはそのbitが10で固定されます。
下2bitが10になる文字は2,6,A,Eですので、APのMACアドレスの上2桁目として使えるのは、
2,6,A,Eのみであるとわかります。
現在、0,4,8,Cが設定できるWi-Fiアダプターの存在が確認されていますが、理由が分かっておらず、調査中です。
それ以外の奇数はAPのMACアドレス上2桁目には設定はできないものと思われます。

## 4.1.アダプターの設定用IDを控える
**2024/08/03 追記**
続いてモバイル ホットスポットの設定レジストリを編集していきます。
モバイル ホットスポットのAPがどのネットワーク アダプターで建てられるのかという設定は、Windowsが勝手に決めていますが、今回はMACアドレスを変更したアダプターでAPを建てるように設定する必要があります。

先ほどまでと同じパスにある、`NetCfgInstanceId`という値を探して、メモ帳でもなんでもいいのでメモします。

## 4.2.モバイル ホットスポットの設定を変更する
**2024/08/03 追記**
以下のレジストリキーに移動します。
```
コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\icssvc\Settings
```
ここも度々やってくるかもしれないので、お気に入りの追加をしておくとよいでしょう。
また、編集を開始する前に、**モバイル ホットスポットをオフ**にしておきましょう。

ここの、`PreferredPublicInterface`という値を編集する必要があるのですが、まず**バックアップを取っておきましょう。**
`PreferredPublicInterfaceBackup`などの名前で**バイナリ値**を作成し、`PreferredPublicInterface`の値を入力してください。バイナリ値の編集はコピペが使えないので手入力する必要があります。

`PreferredPublicInterface`に先ほどメモした値を書き込む前に、値を加工する必要があります。
`PreferredPublicInterface`の値は、`NetCfgInstanceId`の値そのままではなく、`-`で区切られたセクションのうち、最初の3つのセクションはバイト単位で順番が真逆になっています。
つまり、
`NetCfgInstanceId`が
`{01020304-0506-0708-0910-111213141516}`だったとき、
`PreferredPublicInterface`の値は
`04 03 02 01 06 05 08 07 09 10 11 12 13 14 15 16`
にする必要があります。
~~なんてめんどくさいんだ~~

置き換えるのは地味に大変なので正規表現で置き換えられるようにしました。以下のリンクの、`TEST STRING`に`NetCfgInstanceId`の値をそのまま入れれば、一番下に並び替えられた文字列が出てきます。

https://regex101.com/r/g6Paha/1

並び替えられたIDを見ながら、`PreferredPublicInterface`に正確に手入力してください。

## 5.Wi-Fi アダプターを再起動する
Wi-Fi アダプターを再起動するには、USBを挿しなおす方法か、デバイス マネージャーから一度無効にして、再度有効にする方法があります。

### USBを挿しなおす方法
そのままです。USBからアダプターを引っこ抜いてもう一度挿してください。

### デバイス マネージャーから操作する方法
左下のWindowsマークを右クリックして`デバイス マネージャー`を選択して起動します。
デバイス マネージャーから`ネットワーク アダプター`の項目を探し、展開します。
USB Wi-Fiアダプターの項目（先ほどレジストリエディターで探した名前と同じもの）を右クリックし、`デバイスを無効にする(D)`でデバイスを無効にした後、しばらく待って`デバイスを有効にする(E)`で再度有効にします。

## 6.MACアドレスが変更されたか確認する
Windowsの設定を開きます。
`ネットワークとインターネット`→`ネットワークの詳細設定`
を開き、ネットワークアダプター欄の該当のUSBアダプターの部分を展開します。
`追加のプロパティを表示`を押し、`物理アドレス (MAC):`を確認します。
この値が先ほどレジストリエディターで設定したものになっていればOKです。
しっかり設定したはずなのに変わっていないという場合は`コピー`ボタンを押すと最新の情報に更新されます。

## 6.1.PCを再起動する
**2024/08/03 追記**
ここでPCを再起動する必要があります。
なぜかというと、4.2で変更したホットスポットのデフォルトデバイスの設定はPCを再起動しないと効果が発生しないからです。

## 7.モバイル ホットスポットを開始する
Windowsの設定の`ネットワークとインターネット`→`モバイル ホットスポット`を開きます。
必要に応じてプロパティからAPの名前とパスワードを設定し、モバイル ホットスポットをオンにします。
適切に設定できていれば、これで任意のMACアドレスに設定したAPが飛んでいるはずです。

## 8.APが稼働しているか確認する
ここでスマホを用意します。
iPhoneは持っていないのでAndroidで解説します。

**2024/08/02 追記**
先ほど使用するもので紹介した、WiFi Analyzerを使用するのですが、その前に一つやっておいた方がいいことがあります。

### 開発者向けオプションを有効化する
デフォルトだとアクセスポイント一覧表示の更新頻度が遅すぎて下手すると1回の更新に1分以上かかります。
なので開発者向けオプションから設定を変更します。
以下の記事を参考にするといいでしょう。

https://atmarkit.itmedia.co.jp/ait/articles/1602/19/news044.html

### Wi-Fiスキャン スロットリングをオフにする
開発者向けオプションを開けたらずらっと並んでる設定項目から「Wi-Fiスキャン スロットリング」か、それに近い名前の設定を探します。
見つけたらオフにしてください。これでアクセスポイント一覧の更新頻度が高くなります。

### アプリを起動してAPを確認する

アプリを起動して、設定した通りのAPが表示されたら成功です。
Wi-Fi名の右のカッコ内がMACアドレスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850759/bc279150-abf0-22b4-55b0-5a76b81bbce3.png)

## 9.捕まえる
後は出現したキャラを捕まえるだけです。
今回試しにMACアドレスを`7E7777777777`に設定しましたが、正常に設定できていれば画像の個体が出現するはずです。
![17225111433193262855096368224465.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850759/aebb6064-7429-2efa-df3a-ce3eaf72373e.jpeg)

## 10.MACアドレスを元に戻すには
レジストリの`NetworkAddress`の値を元に戻すか、元々無かった人は削除してください。

**2024/08/03 追記**
ホットスポットのレジストリを戻す場合は、`PreferredPublicInterface`の値を`PreferredPublicInterfaceBackup`を見て元に戻してください。

# 最後に
冒頭にも書きましたが、MACアドレスで出現する個体が決まるのであれば、MACアドレスと個体のペアが分かれば全国どこにいても狙った個体を捕まえられます。
例えば、「このMACアドレスから むてき が出た」というのを共有すれば誰でも むてき を手に入れられます。
しかも、一度さよならして再キャッチすれば何度も出生できるという仕様を使えば強個体を量産できるということでもあります。
魅力的な反面、ゲームバランスをぶっ壊しかねないものでもあるので繰り返しになりますが自己責任でお願いします。

ここからは余談です。
勘の良い読者なら気づいたかもしれませんが、一連の作業はPower Shellなどを使えば自動化できます。
PCに自信のある人は自動化に挑戦してみてもいいのではないでしょうか。

# 参考文献
https://community.tp-link.com/en/business/forum/topic/623646

**2024/08/03 追記**

https://superuser.com/questions/1448054/choose-which-adapter-to-use-for-mobile-hotspot-on-windows-10

[^1]:https://community.tp-link.com/en/business/forum/topic/623646