NSOをELFに変換して分析しよう

Splatoon2の実行ファイルを解析する

Splatoon2の本体はmainで、その中身はNSOと呼ばれる形式の実行ファイルである。

これがSplatoon2の全てを司っているファイルと言っても過言ではない。

ここを見ることでSplatoon2の全てを明らかにできるはずだ。

NSOの展開の仕方

まず初めに、Splatoon2のゲームデータをダンプする必要がある。

その手順については各ページで紹介されていると思うのでここでは割愛する。

ダンプしたデータであるxciをsarc_toolなどで展開すればmainファイルが取り出せる。

逆アセンブラを用意する

実行ファイルであるNSOはそのままでは機械語とよばれる言語で書かれているため、人間には扱うのが難しい。

機械語をアセンブリとよばれる(機械語に比べたら)比較的人間にも読みやすいコードに変換するツールが必要となる。

有名なのがIDAで、Pro版、Free版、評価版の三つがあるようですが、Free版だとローダーが動かないのでPro版か評価版のどちらかしか選択肢がありません。

Pro版は1000ドル以上もするので普通は評価版を使うことになります。

最終的にIDAでは上手くいかなかったので注意

評価版の手順

フォームに入力してSubmitすれば登録したメールアドレス宛にパスワードが送られてきます。

ここに送られてきたパスワードと登録したメールアドレスを入力すると評価版がダウンロードできます。

あとはインストールするだけなので割愛します。

SwitchIDAProLoader

IDA Proで使えるNSOをそのまま読み込ませることのできるプラグインが公開されていました。

ZIPを展開してSwitch64.dllをC:\Program Files\IDA Demo 7.2にコピーします。

評価版IDAでは64ビット実行ファイルは読み込めないので、これは結局意味がありませんでした。

備忘録

と、ここまでやっておいて何なのですが最終的にNSOはELFに変換するのでこの作業は不要だったかもしれません。

NSO to ELF

NSOをそのまま突っ込もうとするとエラーが出ます。

NSOロードエラー

とどのつまりはNSOはPE/ELF/Mach-Oファイルではないから読み込めないということです。

というわけでNSOをELFに変換する必要があるのですが、これがなかなかツールが見つからなかったので苦労しました。

プログラム上、64ビットOSでしか使用できないのですがビルドしたものを公開しておきます。

ご自由にご利用ください。

というか最近、人のコードをビルドしたやつばっかり公開してる気がするな…

忘備録

使い方としては単純にmainをドラッグアンドドロップすればOKです。

49,000KBのファイルが生成されていたら成功です。

IDA Demo使えず…

ELF読み込み

ELFに変換すればelf.dllというプラグインを使って読み込んでくれそうなのですが…

64bitは読み込めず…(評価版)

64bitのアセンブリは読み込めないと警告が出てしまいます。

ARMは非対応(無償版)

無償版では64bit制限はないのですが、ARM非対応ということでバイナリを読み込むことができませんでした。

ということでIDAは使えないみたいです、残念。

バイナリエディタで編集しよう

IDAがダメとのことでこうなったらバイナリエディタで直接編集するしかありません。

これをオススメされたのでとりあえず紹介しておきます。

見た感じはただのバイナリエディタなのでいくらでも代用は利くと思います。

うーん、意気揚々とIDAの記事書いたのに結局有用だったのがNSOをELFに変換する内容だけというのはちょっとさみしい気もする。

シェアする

『NSOをELFに変換して分析しよう』へのコメント

  1. 名前:ひとえのきわみ 投稿日:2019/03/08(金) 09:12:06 ID:149fad9d4 返信

    結局IDAプロ買ったんですか!?

    • 名前:me 投稿日:2019/03/08(金) 09:40:54 ID:c2b5049bb 返信

      普通に10万円以上するので買えていません…

      Ghidra

      で入手できるGHIDRAがとても便利で、正直もうIDA Proは要らないのではというレベルなのでご検討いかがでしょうか?