[Hack] Starlight導入の手引き

Starlightとは

StarlightとはSplatoon 2の実行ファイルにhookして自由自在にプログラムを実行することができるツールのこと。

導入のハードルが高いこともあり、恐らく唯一の日本語で書かれたStarlight導入記事だと思います、もっと褒めていいぞ。

Starlightでの全塗りコード

サブルーチンをhookして別のコードを実行できるのでこんなこともできちゃう。

ただし、注意点としてバージョンが3.1.0まででしか動作しません。

3.1.0のNSPの入手はかなり困難なので、現実的には1.0.0を用いることが多いでしょう。

WSL導入の手引き

WSLとはWindows Subsystem for Linuxの略で、Windowsで動作するLinuxのことです。

Starlightを導入するためにはLinuxが必要不可欠なので、WSLの導入が必要になってきます。

まずはコントロールパネルから “プログラムと機能” と検索しましょう。

Windows Subsystem for Linuxがデフォルトではチェックが外れていると思うのでチェックを入れましょう。

これでWSLの機能が有効化されます。

ただし、このままでは機能が有効化されただけで実際にLinuxはインストールされていないのでLinuxをインストールする必要があります。

定番なのはUbuntuなので今回はそれにしました。16.04と18.04があるのですが今回は16.04を利用します。

チェックを入れると再起動を促されるので、再起動したら下のボタンを押します。

Ubuntu 16.04 LTSのインストール画面になるのでインストールします。

終わったらユーザ名とパスワードを入力してWSLの設定は終了です。

Starlight導入の手引き

ここからが本題なので頑張りましょう。

結構長いのでいくつかのパートに分けて解説します。

devkitpro

自作コードをビルドするために必要、これを開発した人は多分神。

$ wget https://github.com/devkitPro/pacman/releases/download/devkitpro-pacman-1.0.1/devkitpro-pacman.deb
$ sudo dpkg -i devkitpro-pacman.deb

環境変数にパスを追加して動くようにします

$ vi ~/.bash_profile

以下のコードを書きます。

export DEVKITPRO=/opt/devkitpro
export DEVKITARM=${DEVKITPRO}/devkitARM
export DEVKITPPC=${DEVKITPRO}/devkitPPC
export PATH=${DEVKITPRO}/tools/bin:$PATH

有効化するために以下のコマンドを叩きます。

$ source ~/.bash_profile

Switch-dev

StarlightはNX向けなのでまずはpacmanでデータをとってきます。

$ dkp-pacman -Sy switch-dev

実行するとどのプラットフォームで開発するか選べるんですが、デフォルトで良いと思うのでエンターキーを押せばいいと思います。

(starlight) me@DESKTOP-AEBKONR:~$ dkp-pacman -Sy switch-dev
:: Synchronizing package databases...
 dkp-libs is up to date
 dkp-linux is up to date
:: There are 6 members in group switch-dev:
:: Repository dkp-libs
   1) libnx  2) switch-examples
:: Repository dkp-linux
   3) devkit-env  4) devkitA64  5) general-tools  6) switch-tools

Enter a selection (default=all):

全部で43MBくらいのファイルをダウンロードして、インストールしてくれます。

だいたい三分くらいかかります。

keystone

ここで詰まってものすごく時間がかかったので、他の方が詰まらないようにメモを残しておきます。

keystone

まずはkeystoneをmakeするために必要なファイルを用意します。

$ sudo apt install libssl-dev cmake g++
$ pip install keystone

keystoneの方はpipから簡単にインストールできます。

keystone-engine

keystoneの他にkeystone-engineが必要なのでこちらもインストールします。

$ git clone https://github.com/keystone-engine/keystone.git
$ cd keystone
$ mkdir build
$ cd build
$ ../make-share.sh
$ sudo make install
$ sudo ldconfig
$ cd ../bindings/python
$ sudo make install3

こっちが死ぬほど動かなかったんですが、多分これで大丈夫です。

keystone-engineのインストールには以下のissueを参考にさせていただきました。

https://github.com/avatartwo/avatar2/issues/23

libnx

$ git clone https://github.com/switchbrew/libnx
$ cd libnx
$ vi nx/source/runtime/switch_crt0.s

最終行近くを以下のように変更する。

.global __nx_mod0
__nx_mod0:
    .ascii "MOD0"
    .word  _DYNAMIC             - __nx_mod0
    .word  __bss_start__        - __nx_mod0
    .word  __bss_end__          - __nx_mod0
    .word  __eh_frame_hdr_start - __nx_mod0
    .word  __eh_frame_hdr_end   - __nx_mod0
    .word  __nx_module_runtime  - __nx_mod0 // Replace

変更するのは93行目だけなので問題ないでしょう。

編集が成功したらmakeしてそれをインストールします。

$ make
$ sudo make install DEVKITPRO=/opt/devkitpro

何故かbash_profileに設定したDEVKITPROの環境変数を読み取ってくれないので自分で指定しましょう。

このように編集したlibnxを使用すると他のHBが作成できなくなるので注意してください。

Starlight

いよいよ本命のStarlightです。

本家のStarlightでもいいんですが、そのままだとエラーがでる箇所があるので修正版をForkしたものを公開しておきます。

$ git clone https://github.com/tkgstrator/Starlight.git
$ cd Starlight
$ make

makeをして以下のように表示されたら成功です。

IPSファイル

“034C8FA7A63B7A87F96F408B2AEFFF6C.ips” というファイルが生成されるので、それをMicro SDにコピーしましょう。

IPS形式のパッチは直接Splatoon2のフォルダに入れても良いのですが、分けておけばIPSwitchのコードと併用できるのでオススメです。

“atmosphere/exefs_patches/starlight_310” 内にIPSファイルをコピーしましょう。

starlight_310というフォルダはないはずなので自分で作成します。

NSOファイル

Starlight310.nsoというファイルがあるので、それを “subsdk0” に変更します。

変更したら、そのファイルを “/atmosphere/titles/01003BC0000A0000/exefs/” にコピーします。

リージョンタイトルID
US01003BC0000A0000
JP01003C700009C000
EU0100F8F0000A2000

exefsというフォルダもないはずなので自分で作成しましょう。

subsdk0をコピーできたら全ての作業は完了です。

あとはいつもどおりSplatoon 2を起動してみましょう。

実行してみた

無事にStarlightを起動することができました。

Starlightで何ができるかは “Starlight/source/main.cpp” に記述されています。

C++でのコーディングができるなら、なんでもできるということですね。

この記事書くのにすっごい時間かかったので、アマゾンのリンクからいろいろ買ってくれると助かります!!!