EMUNANDでBAN対策をしよう

emuNANDとは

そもそもemuNANDが何かわからないとダメなので、まずはNANDについて説明しましょう。

NANDというのはまあ非常に大雑把に言えばデータを保存するための回路(チップ)のことです。

USBメモリやSSD(Optaneとかはまた3D Xpointというベツモノなのだが)、MicroSDなんかにも使われています。

CDやHDDなどは違いますが、安価に大容量で耐久性もそこそこあるNAND型のメモリはすごく普及しているんですね。

で、ニンテンドースイッチには当然ゲームをインストールしたり、オペレーティングシステムを保存しておくための記憶媒体が必要です。

そして、そこにNANDが使われているんですね。

ニンテンドースイッチで使われるNAND

ニンテンドースイッチの記憶域にはこれまたすごく大雑把に三つの分野が存在します。

一つはMicroSDで、これも記憶域の一つですが外部の記憶域(ニンテンドースイッチ本体のNANDではない)なのでノーカウントです。

実際には32GBのNANDに詰め込まれているSYSTEMとUSERの二つがメインです。

SYSTEM領域にはオペレーティングシステムなどの重要なデータが書き込まれており、ここが壊れるとニンテンドースイッチが起動しなくなります。

もう一つはUSER領域で、ここにはゲームのセーブデータやインストールしたアップデータや録画した動画・スクリーンショットなどが保存されています。

後者のほうが当然多くの容量を使用するので、ニンテンドースイッチはSYSTEM領域に約3GB、USER領域に約26GBを割り当てています。

「え、足しても32GBにならないって?」それが1024と1000の違いが積み重なった結果なのですよ…

1KB=1000Bで換算しているため計算上の32GBは実際には29GB弱になってしまう。

NANDは全てのデータを保存しているので、例えばNSP(ゲーム)をインストールしたりするとそのインストールしたという情報などがNANDに残ってしまいます。

これを、NANDが汚れるなどと言ったりします。

汚れたNANDは任天堂がその気になれば改造したかどうかをチェックできるので、NSPをインストールしたことがあるスイッチを修理に出すと「不正な改造を行った痕跡があるので修理できない」として修理してもらえないことがあります。

改造前にNANDのバックアップをおこなっていればきれいなNANDで上書きすることができますが、故障してのであればそもそもNANDの上書きができません、これは困りました。

NSPインストールはゲームカートリッジを切り替えなくて済むので便利なんです。

NSPはインストールしたいがNANDは汚したくない、という人のために考えられたのがEMUNANDでした。

emuNANDの仕組み

さて、ニンテンドースイッチは普段は以下のようにデータのやり取りを行っています。

起動時にSYTEMを読み込んでオペレーティングシステムを動かし、ゲームを起動するときはUSER領域からセーブデータを読み込んだりなどです。

通常のニンテンドースイッチのデータやり取り

しかしこれでは先程述べたようにNANDが汚れてしまいます。

そこで、偉い人は以下のような仕組みを考えました。

emuNANDを用いたデータのやり取り

つまり、本来のNAND(SYSNANDと呼ばれる)にはアクセスせず、MicroSD内につくったNANDに対してアクセスするわけです。

NANDのコピーなんてできるの?と思うかもしれませんが、所詮は0と1のデータの集合なのでなんとかなります。賢い人、ほんとにすごい。

emuNANDの利点

  • NSPをインストールしてもSYSNANDのUSER領域が汚れない
  • SYSNANDとEMUNANDを切り換えることで改造状態と通常状態の切り替えが容易
  • 故障してもSDカードを抜けば改造していないスイッチと原理的に区別がつかない
  • SYSNANDを弄らないため、復旧不可能なブリック(ソフトウェア的な故障)に極めて陥りにくい

emuNANDの欠点

  • NANDのコピーであるためSDカードの容量を30GBほど消費する
    • 実際には全てを使うわけではないが、それでも20GBは使う
    • 最低でも64GBのMicroSDが必要
  • NANDに比べるとMicroSDの読み書きの速度は遅いのでパフォーマンスに影響がでる

パフォーマンスに影響がでるのは少々気になりますが、使ってみた感じは全然問題がありませんでした。

EMUNANDを試そう!

hekate5.0.0から対応しているのですが、必要なものが全部揃ったパッケージツールのKosmosがhekate5.0.0を同梱しているのでそちらから利用するのがいいでしょう。

また、RCMからインジェクトするペイロードもhekate5.0.0である必要があるのでTegraRcmGUIも最新版のものを用意します。

hekate起動画面

さて、何やら今までの無機質な画面から現代的なフラットデザインの画面に切り替わった新しいデザインになりました。

おまけにタッチスクリーンにも対応しているのでかなり便利になりました。

eMMCの整合性チェック

eMMCのバックアップを行う前にOptionsから設定を変更しましょう。

Options
設定項目意味
Auto Boot自動でCFWが起動するようにする
Boot Time Delay起動遅延をする
説明は長くなるが、設定しておいたほうが良い
Auto NoGCヒューズチェックパッチ
チェック入れておいたほうがいい
Auto HOS Power OffHOSでシャットダウンしたときに15秒後に再起動する
Backlightバックライトの明るさ設定
Data VerificationNANDの整合性チェック

右下の “Data Verification(データ整合性チェック)” がOffになっていると流石にマズイので、”Sparse(ブロックチェック)” か “Full(バイナリチェック)” を選択しましょう。

オプション時間
Off9min
Sparse15min
Full(Slow)120min
Full(Hashes)15 – 120min

オプションによる所要時間の違いはだいたいこんな感じです。

Full(Slow)は以前のhekateで試したときにそのくらいかかったので、あれから高速化していたとしても少なくとも一時間くらいはかかるのではないでしょうか。

設定ができたら “Save Options” を押しましょう。

eMMCのバックアップ

まずは左上のToolsを選択して “Backup eMMC” を選択しましょう。

EMUNANDを試すだけであれば不要ですが、念のために “Dump Package1/2” もしておいた方が良いでしょう(こちらは2~3秒で終わります)

さて、あとは “Backup eMMC” を選択して待つだけです!!

emuMMCの作成

バックアップに成功したらホーム画面からemuMMCを選択しましょう!

最初はEnabled!と表示されているところがDisabledとなっていると思いますが、問題ありません。

まずは “Create emuMMC” を選択して、先程バックアップしたeMMCからemuMMCを作成します。

このとき、emuMMCの作成方法として “SD File” か “SD Partition” のどちらかが選べます。

両者の違いについて簡単にメモしておくので参考にしてください。

SD File

  • SDカード直下にファイルを作成する
    • ファイルがあるので編集が可能
  • 最適化されたパーティションではないので動作が遅い
    • と言っても気にならなかったが…
  • emuMMC向けのFastFSで解決しそうな様子
    • アプデを待っておくといいかも

SD Partition

  • SDカードを一度フォーマットしてemuMMC用のパーティションを作成する
    • フォーマットするのでデータは一度全部消える
  • パーティションが最適化されているので高速
    • 試そうとしたがエラーがでて使えず
    • フォーマットがexFATではダメで、FAT32である必要があるかも

EMUNAND作成には十分くらいかかるのでおとなしく待ちましょう。

設定できたら “Change emuMMC” を選択して作成したemuMMCを選びます。

OKを押すと画面が一つ戻るのですが、”emuMMC Info & Selection” の項目がEnabled!になっているはずです。

emuMMC成功!

EMUNANDの起動

さて、EMUNANDが作成できたらLauchを選択して起動するファイルを選びましょう。

SYSNANDはなるべく弄りたくないので起動しないほうが良いでしょう。

今回はCFW (EMUNAND) を起動しようと思います。

対するStockはOFW(改造されていない公式ファームウェア)を意味します。

ただ、どうもEMUNANDのStockは現在ブラックスクリーンのバグがある様子…

atmosphere 0.9.2で修正されたらしいですが、果たして?

インターネットに繋がらないようにしよう

CFWではいろいろいじって遊びたいのですが、どっちを起動しているのかわからないままオンラインに繋ぐとBANされてしまうので、絶対にインターネットに繋げないようにしましょう!

方法簡便性利便性信頼性
ユーザアカウント削除☆☆☆☆☆☆☆☆☆
端末初期化☆☆☆☆☆☆☆☆☆☆
LanPlay☆☆☆☆☆☆☆☆☆☆
90DNS☆☆☆☆☆☆☆☆☆☆☆☆☆☆
別端末の購入☆☆☆☆☆☆☆☆☆

ユーザアカウントを削除する

設定画面からユーザを選択して、アカウントごと削除してしまいましょう。

ただし、ぼく自身がリンクされたアカウントを持っていないのでこれはやっても大丈夫なのかという問題があります。

もしもリンクを削除すると本体固有IDとニンテンドーアカウントの紐付けが解除されたことが任天堂のサーバに伝わり、EMUNANDだけでなくSYSNANDの方でもリンクが外れたことになってしまう可能性があるためです。

リンクを外すときかユーザ削除のときにインターネット接続を促されるようであればキケンだと思ってください。

なので、この方法は検証不十分なためオススメしにくいです。

本体を初期化する

本体を初期化するとユーザデータも全て消えるので安心です。

が、これも同様にリンクが正しく外れるのかという問題が残ります。

それでも個別にリンクを外したりユーザを削除するよりは安心な気がしますね。

LanPlayを設定する

LanPlayのFakeInternetオプションを有効にしていると全てのニンテンドーネットワークへのアクセスができなくなるので安全です。

ただし、これをやるとFTP経由でファイル操作ができなくなるのでコード開発者の方などは不便かもしれません。

コードを使うだけのエンドユーザであればこの方法が一番確実かもしれませんね。

注意点としてはニンテンドースイッチは自動でインターネットに繋いでしまうので有線だけでなく全ての接続可能なネットワークに対してLanPlayの設定を行う必要があるということです。

例えば、普段有線を使っているので有線に対してはLanPlayの設定をしたとします。

普段使っている場合にはそれで問題ありませんが、スイッチをドックから外してしまうと無線でインターネットに繋がってしまいます。

そのため、無線で繋がるアクセスポイントに対してもLanPlayを設定しなくてはいけません。

90DNSを利用する

90DNSというのはニンテンドーへのアクセスをブロックしてくれるDNSのことです。

DNS設定をこのようにする

簡単に設定できてIPアドレスも変わらないのでこの方法は一番手軽かもしれません。

LanPlayと同じく、全ての接続可能なネットワークに対して設定を行う必要があるのでご注意ください。

Auto Bootを設定する

Kosmos Toolboxから設定できるのでやりましょう。

起動すると以下のような設定画面があると思いますが…

デフォルトでEMUNANDの方を起動するようにしておきます。

ここはStock(EMUNAND)でも構わないのですが、一度Stockで起動してしまうとまたPCと繋がないとCFWで起動できなくなってしまうのでCFWを設定しておくのが良いでしょう。

CFWを起動した状態からStockで起動するのは簡単にできます。

こうすることでうっかりCFW(SYSNAND)で起動してNANDを汚してしまう心配が軽減されます。

まとめ

EMUNANDの実装でちゃんと運用していればものすごくBANされにくい環境はできたと思います。

うちのスイッチはニンテンドーアカウントとリンクしていないので、結構適当な扱いをしていますが今のところBANされていませんね。