EMUNANDでBAN対策をしよう

Hack

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を同梱しているのでそちらから利用するのがいいでしょう。

Releases · AtlasNX/Kosmos
All-in-One CFW Package for the Nintendo Switch - previously SDFilesSwitch - AtlasNX/Kosmos

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

Releases · eliboa/TegraRcmGUI
C++ GUI for TegraRcmSmash (Fusée Gelée exploit for Nintendo Switch) - eliboa/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でイカッチャを遊び尽くせ

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されていませんね。

コメント

  1. 匿名 より:

    バックアップを取らずに改造してしまったのですが、これはもうアウトですか?(修理時)

    • えむいー より:

      そのような状態で本体を修理に出したことがないのでわからないのですが、初期化した上でAuto RCMなどがOFFなら大丈夫そうな気もします。

  2. 匿名 より:

    初期化したらデータ消えてしまいますよね?データを残す方法はありますか?

    • えむいー より:

      checkpointを使ってセーブデータのバックアップを取っておく方法がベストかと思われます。

      この記事でニンテンドースイッチを初期化してEmuNAND(CFW)とSysNAND(OFW)を共存させる方法についてまとめています。
      checkpointでセーブデータのバックアップ→Goldleafなどを使ってユーザデータを削除すれば初期化せずに済むと思いますが、後ほど検証してみたいと思います。

  3. みー より:

    ありがとうございます

  4. 匿名 より:

    一度改造してしまったスイッチは
    汚れたスイッチとして事実上
    残ってしまうのでしょうか?
    普通のスイッチの状態に戻す事は出来ますか?

    • えむいー より:

      SysNANDからCFWをインストールしていた履歴を全て削除できるHaku33というものがリリースされていたので、それを利用してみるのはいかがでしょうか?

      ただ、実際に自分が使ったわけではないので効果の程は保証しかねますが…

  5. ひめじい より:

    こんにちは。

    誤ってsysnand(CFW)の状態でXCIのDUMP操作を行ってしまいました。
    そこで、NANDのバックアップデータを作成していたためリストアしようと思ったのですが、
    NANDバックアップ作成時の本体のバージョンが10.0に対して、
    現在本体のバージョンが10.1と異なっています。

    この場合下記のどの対処を行えばよいのかわからず質問させていただきました。

    1. sysnand(CFW)の状態で行った操作が、NSPのインストールではないため、sysnandは汚れていない。そのためNANDのリストア作業は不要。

    2.sysnand(CFW)の状態でCFWツールを使用したため、sysnandが汚れている。戻したい場合は現在のバックアップNANDを使用すればよい。

    3.sysnand(CFW)の状態でCFWツールを使用したため、sysnandが汚れている。戻したい場合は本体バージョン10.1の時点のNANDバックアップを使用する必要がある。

    3の選択肢になる場合は、バージョン10.1のNANDバックアップはとっていないため
    本体設定からSwitchの初期化をするしかないのかなぁと考えております。

    10.0の状態のNANDでリストアしてしまった場合、FUSEチェックで弾かれてしまうのか
    気になって質問させていただきました。お力を貸していただけますと幸いです。

    • えむいー より:

      少し長めのお返事になります。

      まず、XCIのダンプ自体はSDカードに保存されるのでNANDが汚れる心配はありませんし、Homebrewアプリを起動した履歴もNANDには保存されていない可能性が高いです。
      なのでCFW起動時にエラーが発生していないのであれば(発生していればエラー履歴として保存されてしまいます)NAND復元は不要である可能性が高いです。

      心配であればスイッチの初期化をしても良いですが、NANDから復元するとセーブデータも以前の状態に戻ってしまう(いわゆる巻き戻し)ため、セーブデータの不一致(スプラトゥーンにおけるウデマエ、Xパワーなど)でBANされる可能性もあることに注意してください。

      最も安全と考えられるのはCheckpointで現在のセーブデータを保存し、ニンテンドースイッチを初期化した上で再びセーブデータを書き戻すことです。
      ※改造しておらず、巻き戻しのような状態が発生していないセーブデータであればBANされないことは確認済みです。

      スイッチの初期化は本体から初期化しても構いませんし、NANDから初期化しても構いませんが、セーブデータを復元しようと思うのであればどちらをしても最終的にCheckpointによるセーブ復元が必要になるので、両者に差はないように感じられます。

      FUSEチェックによるパニックモードの問題ですが、調べてみたところ(詳しくはAnti-downgradeの項をご参照ください)10.0.1 – 10.1.1はすべて焼かれたFUSE数が13のためダウングレードでOFWでスイッチが起動しなくなることはないと思います。
      ※仮に起動しなくなったとしてもStockで起動し、アップグレードすれば良い話です

  6. OLIVIA より:

    お久しぶりです。
    こちらで色々教えていただきCFWを導入し
    快適なフィットボクシングライフを送っていたのですが、
    また質問させていただきたいです。

    このページの項目「Auto Bootを設定する」を実施しました。
    PCに繋いでペイロードを送信した時は確かにHekateを飛ばしてEmuNANDが起動します。
    そしてDeepseatoolからHekateMenuに戻りStock(OFW)を起動し
    オンラインプレイをした後に電源を切り、
    電源を入れ直すと…AutoBootでCFWが起動せずOFWが起動します。
    結局CFWで起動するために再びPCに接続する生活を送っています。

    お伺いしたいのは確認を含め2点
    ・CFWを起動した状態からStockで起動するのにえむいーさんが用いている方法。
    ・PCに繋がずCFWを起動するための方法。(ボタンを押しながらとかあれば)
    2点よろしくおねがいしますm(_ _)m

    • えむいー より:

      CFWからOFWに切り替える際にはDeepSea Toolbox(自分の場合はまだKosmosなのでKosmos Toolboxですが中身は同じ)をひらいてReboot to HekateからStock (SysNAND)で起動しています。

      Toolboxを使うのは電源長押しが省けるというだけですが、いちいち本体を直接触らなくていいので楽です。

      AutoBootは詳しい原理は存じ上げないのですが、どうもCFW自身が再起動の際にペイロードを送信しているような気がします。
      なので、AutoBootはCFWからでしか動作せず、一度OFWで起動してしまうと手動でRCMに入れる必要があります(これは例のジグを挿してボタンを押すアレです)

      Hekateに実装されているAutoRCMという機能を使えば、ニンテンドースイッチが起動する際には必ずRCMに入るようになりこれらの手間が省けますが、これをすると通常起動ができなくなるのでパソコンが手元にない状態でスイッチを再起動してしまうとRCMから何もできなくなります。また、AutoRCM自体がニンテンドースイッチのSysNANDのBOOT1という領域を改ざんして実現しているため、NANDが復旧不可能な故障をした場合に任天堂に改造の痕跡を発見され、修理を拒まれる可能性があります。

      なので、RCMに手軽に入れる機能はあるもののメリットとデメリットを比較した際にあまり優れているとは言えないので自分は導入していません。

      ペイロードの送信は原則PCで行なうため、PCレスで電源を切った状態からCFWを起動する方法は基本的にはありませんが、以前はRCMLoaderというスイッチの端子に接続してPCの代わりにペイロードを送信するツールが販売されていました。ただ、調べてみたところ現在は販売されていないようです。

      また、Root化したアンドロイドを用いるRekadoやJailbreakしたiOSから実行するNX Bootなどがありますがハードルが高く、結局パソコンを使うのが地味ですが確実で簡単な気はします。

      DIYで作成することもできるようなので、電子機器を弄るのがお好きなのであればそれも手かもしれません。

タイトルとURLをコピーしました