SmokingWOLF Sep/21/2024 08:34

ウディタVer3.40中規模更新中!&セキュリティの困難さの話

 ということで現在ウディタがVer3.3台からVer3.40に変わるので、この機会に中規模アップデートしようと作業中です!
 

◆Ver3.40で何がアップデートされそう?

 今回のアップデートでは大きな目玉要素はないかもしれませんが、「まとまった修正ができるならやっておこうかな」と思ってためていた内容の実装を進めていく予定です。
 リソース的・技術的にやれるか分からない挑戦も多いので実装されない可能性もありますが、今回は有力そうな一部をご紹介していきます。


キャラチップレイヤーの指定を自由なレイヤー±値で設定できないか挑戦

 キャラチップレイヤーは元のキャラチップに1~5レイヤーで別のキャラチップ、たとえば服や手持ち武器などを重ねる機能です。
 従来は「元画像から上」の「1~5レイヤー」だけの狭い範囲、少ない枚数に画像を上乗せするだけでしたが、今後、『レイヤー「-1」や「-10000」みたいに裏側へ出せたり、無制限な値・枚数を入れても普通に使える』ようにできればだいぶ実用的になるはずです! と思って機能改修を検討しています!
 追加で、キャラチップレイヤー処理で『レイヤー「0」を指定すれば本体チップをいじれる』ようにしておくのも汎用性の面でよさそうですね。
(ただし現状、「同じチップサイズ」じゃないと重ねられないのは従来通りになりそうですのでそこはご注意を!)
 

変数操作の機能追加

 代入演算子に「=√[x1000]」を入れたり、右辺の計算に「ビット和(論理和)」「排他ビット(排他的論理和)」を追加してみる予定です。
 右辺の計算には「ビット積」だけがなぜかあったんですが、『片道勇者2』内でそれを使って『ビット和』を計算する処理を作っている最中に急に冷静になってしまいました。「自分でウディタに機能足せるんだからそこは作ろうよ……!」って。
 このあたりのビット操作処理ができるようになると、プログラミング知識が豊富な人なら、より幅広いことや高速処理ができるはずです。

※2024/09/21 12:57 「ビットシフト」も欲しいというコメントをSNSでいただいたのでこれも候補に入れておきます!

セキュリティ周りの更新「ファイル個別暗号化」

 今回も新しいプロテクト方式と新しい暗号化方式を追加予定ですが、その他に、もし作れそうならプロ版機能として「ファイル個別にユーザー自身で暗号化できる機能」も搭載できないかなと考え中です。
 1個ずつのpngやtxtファイルをユーザが設定したキーで暗号化でき、その画像やテキストファイルはエクスプローラーからなどでは直接読めなくなります。

 おそらく、「ゲーム内でその暗号化ファイルの読み込み時に正しい【復号キー】が設定されていないとファイルとして読み込めない」という形になるでしょう。
(開発中は元ファイルと暗号化済ファイルを並べて置いておけて、ゲームデータ作成時に暗号化済ファイルがあるファイルだけ出力先で消される、みたいな形が扱いやすくて理想だと思います。当然、開発中でも暗号化済ファイルがあればそちらの方を優先して読みに行くようにして)

 データを暴こうとする人は仮に.wolfファイル(暗号化フォルダ)を解凍できるところまでいっても、個別暗号化ファイルの【復号キー】をファイルごとにコモンイベントやマップイベント内から探さないといけないので手動解析の手間が増えますし、もしオンライン経由で必要なタイミングでだけ【復号キー】をDLしたりする形にするなら復号化がもっと困難になります。
 もっと強固にファイルを守りたい人向けの、最終防衛線的な機能になるでしょう。



◆雑談 PC内のEXEだけでセキュリティを守るには限界があったお話

 私はこれまで、Game.exeやEditor.exeみたいなEXEファイルの逆解析って、たぶん機械語で出てくるからすごい読みにくいんじゃないかなー、となんとなく思ってたんですよ。

 ところがつい最近、セキュリティのお勉強がてらEXEファイルの逆解析ツールを使ってみたんですが、その性能に目玉が飛びました!
 私が試したのはアメリカ国家安全保障局が提供しているものだったんですが、まずは見てくださいよこれ!
  ↓

 左側が私が手で書いたソースコードで、右側が作成済みのEXEファイルを逆解析して自動的に再構成されたコードです! 「右側」をご覧になると分かると思いますが、コード構成としては実質完璧に元の内容を復元できているんですよ! すごい!

 つまり普通に作られたEXEファイルは、関数名や変数名が目隠しされた状態とはいえ、『処理自体は全部見られる』状態になってしまっているのです!
 こんなこと、普通に趣味プログラミングをしてるだけじゃ全然知りえなかったことです! もちろん関連処理を全部しっかりコピーすればそのまま動作もするでしょう。

 ウディタ内でたとえると、EXEファイルそのものが「コモンイベント」だとすると、「コモンセルフ変数名」と「コモンイベント名」が謎の文字になってるだけで暗号化も何もされていないコモンイベントがそのまま見られるような状態になってしまっているのです! やってる計算や文字列操作など全ての処理が分かってしまう!
 いちおうそれでも、「がんばらないと内容を解析できない」というのは全くそうなのですが、ここまでできてしまえば達人がじっくり見ていけば色んな情報が分かるので、解析のハードルは私の想定よりめちゃめちゃ低いです。たぶん今の私ですら、かなりの解析を進められるでしょう。
 そして何より、EXEの上にいくら暗号化を積み重ねても、EXE自体の中味が見え見えなので土台があまりにボロボロすぎて、時間たっぷりかけて解析をしようとする人から見れば何も守れていません。

 なので、ウディタ側で提供される暗号化処理も基本的には全て丸見え状態であり、ローカルファイル内(PC内だけで完結するゲームデータ)だけでセキュリティを守るというのは非常に困難だったのです。セキュリティについて学べば学ぶほど、そう確信します。
(なおプログラマー側がやれる最後の壁として、「難読化(コードを壮絶に読みにくくする)」や「仮想環境でEXEを囲って実行する(ただし処理が外部から見られにくくなるので高確率でマルウェア扱いされる)」といった対応策はありますが、ここまでするとなると個人レベルでやれることを超えています)


 ツール提供側としては、(作業用のリソースが確保できるくらいのプロ版の売上げが出たら)半年に1回とか何ヶ月かに1回ペースで最新の暗号化方式を出すくらいならできる可能性はあります。
 が、どんなに強力なセキュリティを作ったとしても、今回の話のように前提自体が防御にあまりにも向いてないので、解析しようとする側が一定水準の能力を持っていれば絶対に暗号化なども破られてしまいます。
 原理的にそうならざるを得ないので、この点はどうかご理解ください。



【それでもデータを守りたい場合は? オンラインにデータを置く方式】
 もしウディタ作品でどうしてもファイルやデータを守りたい場合は、サーバー依存のゲームのように、『イベントシーンやゲーム段階が進むごとに必要な画像やデータを一時的にダウンロードして使用する』といった形でデータを守る仕組みが必要になるでしょう。
 実質オンラインゲーム化!

 今後はどうしても秘匿したいデータがある人向けには、「サーバー経由でデータを取り扱うアイデア」をマニュアルに記載していく対応にしようと考えています。私がウディタのセキュリティ周りに時間を使っているとそれだけで寿命もお金もなくなってしまうので、各々のほうでできそうなアイデアをご提案させていただければと思います。



【セキュリティの難しさを学べたことについて】
 色々述べてきましたが、セキュリティ周りに関して今回みたいな説明ができるところまで勉強ができたこと自体は本当によかったと思っています。

 ファイルやEXEの解析とも部分的に関係がありますが「なんでチートがなくならないの?」という理由の一端を理解できましたし、アンチチートツールを提供してチート対策を実現している人たちがすさまじく不断の努力をされていることも理解できました。
 こういったセキュリティは、それだけを行う、優れた人たちが集まった専門チームが日々アップデートしていくつもりでやらないと防御しきれないものなのだと強く納得できました(そしてそこまでやっても、負けてしまうことがときどきあるのです)。

 とはいえ私も、その難易度の高さを理解した上で、かけられるコストの範囲内でのセキュリティ対応はやっていこうと考えています。
 ただコスト面の話として、ウディタの修正だけやっていても生活ができるならいいのですが、今月は2週間経過時点でBOOTH収益から計算した時給が一時200円切ったりしてるのでとてもヤバいです!(今現在は時給230円くらい、皆さまありがとうございます!)
 まとまったセキュリティ更新のチャレンジとしては、今回の修正をいったん最後にしようと思います。私が餓死しちゃう!


 ということで、今もみっちりウディタの修正作業中です!
 日々新しいことを学べて楽しいのは楽しいのですが、ゲームの方を作らないと本当に生活がまずいので、ウディタ開発もほどほどにバランス良くがんばっていきたいですね!

 9月内におおよその修正が終わればいいのですが、優先して入れるべき面白そうな機能を思いついた場合はその分遅れていきます。
 そうなった場合は、次回も新機能のご紹介が続くでしょう!

 ということで、ウディタVer3.40中規模更新、ほどほどのご期待でお楽しみに!
 出せる情報があったら、X(Twitter)[要Xアカウント]などでもちょいちょい情報を出して行ければと思います!
 

3 tips have been sent.

Sending tips requires user registration.Find details about tips here.

Monthly Archive

Search by Exclusive Perks

Search Articles