osu!を逆コンパイルしてみる 

osu!を逆コンパイルしてみる

大まかなゲームの構造を理解する

2023/12/23

はじめに

header

osu!は、.Net C# で書かれたリズムゲームです。そして自分はosu!が大好きです<3

何故逆コンパイルを行おうと試みたのか?理由はカスタムクライアントです。有名なものといえばAuto+やAkatsukiなどでしょうか?

しかし、ソースコードは非公開なのでゲームの根本にはアクセスできません。

どのようにカスタムを行われているのか、という興味本意です。

念のため言っておきますが、osu!を再構築するつもりはありません。

目的は大まかなゲームの構造を理解する事なので、プログラムの改造やチート行為については書きません。

難読化を解除する

osu!をDnSpy等でソースコードを復元しようとすると乱雑な識別子名が取得され、すべての文字列定数が難読化された大きなバイナリBLOBに隠蔽されてしまいます。

うん。読めませんね。

これが難読化(obfuscated)と言いソースコードを見せない様にする一つの手です。

そこでde4dotを使います。

使用方法はソースコードからビルドして、アプリケーションで読み込むだけです。

最新のosu!のバージョンだともしかしたらエラーが起きるかもしれません。2016年から2019年中盤辺りかフォールバックバージョンをおすすめします。

バージョンによって難読化に使用しているものが違います。今回難読化に使用されていたのはEazfuscatorでした。

ConfuserEx2がバージョンによっては使用されていました。

成功するとosu!-cleaned.exeとかかれたアプリケーションが排出されるはずです。

これを読み込むと難読化済みとは違いクリーンなコードが見れるはずです。

ただ、完璧に難読化を解除出来た訳ではなく、DnSpyの機能で難読化解除後のコードをVS(Visual Studio)にエクスポートしてみると、

プロジェクト全体で4,000個を超えるエラーがありました。バージョンによっては1000個から12000個近くと難読化に使用された物によっては

違いがあるのかもしれません。