難読化すれば、コピー製品を配布される可能性も減るのじゃないかと期待もあって、今、開発中のPOLYZANTHのソースコードを難読化しようと考えました。
それで前から目をつけていたObfuscatorというUnityアセットを購入!
ちょうどセールしてるし!なんてラッキーなんだ!神様ありがとう!
・
・
・
・
あまり深く考えず購入してしまったのですが、購入してから疑問&不安が出てきました。
疑問&不安とは…。
- 実行時の速度への影響
難読化するために不要なコードが付加されるので、それがフレームレートに影響しないか? - 実行時の安定性
付加されたコードが悪さして何らかのエラーが出ないとも言えない。動作が不安定になったりしないか? - SendMessageなどのメソッド名をstringで渡す処理
難読化されてメソッド名が変更されると、SendMessageが使えなくなるのでは?
それでいろいろ調べているうちに、少し古いですがUnity公式の見解(?)とも言えそうな記事を見つけてしまいました。
Google翻訳に通した内容を以下に引用します。
症状引用ここまで。
C#コードを暗号化して、潜在的なハッカーから保護したいと思います。
原因
あなたはプライバシーやセキュリティのために難読化してC#コードを保護したいのですが、Unityでこれを行うためのツールを探しています。
解決
Unityは、セキュリティソリューションとしての難読化を促進しません。これは、ランタイムエラーが発生し、パフォーマンスに影響を与える可能性があるためです。 また、ソフトウェアにアクセスするユーザーが逆コンパイルを試みるのを防ぐこともできません。 マルチプレイヤーゲームに関する懸念がある場合は、接続されたクライアントから受信したデータを信頼しないで、常にデータが有効であることを確認してください。
ソースコードをわかりにくくしたい場合は、以下を変更しないでください。
クラス名
Unityコールバック名
パブリックフィールド名
文字列/リフレクションまたはSendMessage、Invoke、StartCoroutine、RPCなどの関数を介して呼び出されるメソッド。
疑問&不安に思っていたことがズバッと書かれていたのでスッキリしましたが、焦って購入しなくても良かったなぁと反省。ううっ、返品したい。
難読化については、Wikipediaにも以下のように書かれていました。
せいぜい、難読化は単なる時間稼ぎに過ぎず、プログラムのリバースエンジニアリングを不可能とするものではない。また、依存性の注入(Dependency Injection (DI))などの目的で、参照する対象の名前を文字列で与えるようなリフレクション・自己反映計算APIを利用している場合などでも、原理的に難読化によって動かなくなるため、難読化が可能な部分が制限される。
アプリの安定性を確認するためのテスト期間の問題や、POLYZANTHではSendMessageを多用していることを考えると、今回は導入を見送ろうと思いました。逆に導入して良かったといった方がおられましたら、ご教授頂けると嬉しいです。
最後になりましたが、しかしこのObfuscatorアセット、評価も高いし、決して悪いアセットではないと思うのです。念のため!
0 件のコメント:
コメントを投稿