ちょっと話題の記事

SWFの保護について考察

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

SWFの解析

Adobe SWF InvestigatorというSWFを解析するアプリケーションが公開されました。
http://labs.adobe.com/technologies/swfinvestigator/
https://dev.classmethod.jp/ria/flex/adobe-swf-investigator/

これによってSWFの中が丸見えになり、SWF解析の敷居が下がりました。
バイナリレベルで解析するので、どのようなクラスやリソースが含まれているのかわかります。
また、バイナリエディタでSWFを修正・改ざんすることで下記のようなこともできてしまいます。

  • ダウンロードして改ざんしてサーバ接続
  • SWFに入っているリソースを抜き出し
  • 外部からSWFを不正操作
  • AIRだとSWFを改ざんしてあたかも正規SWFのようにサーバと通信
この手の話は、SWFに特化した話でありません。他の言語でも多くの議論がなされていることですよね

SWFの保護

SWFをどのように保護するのか問題になるでしょう。
やっぱり隠したいロジックや抜かれたくないリソースがあるかと思います。
隠す方法と検証する方法の二通りで考えてみましょう。

隠す方法

ロジックやリソースをSWFに埋め込んで隠す方法です。
埋め込むことで解析を難しくします。

  • 隠したいものをEmbed
  • 隠したいものを暗号化してEmbedして、実行時に復元と生成
    復号鍵をどこに置いとくか問題になる
  • Embedの2重化,3重化,,,,
  • リソースをサーバから受信
  • リソースを独自ファイルフォーマットでやり取りする

検証する方法

SWFを改ざんされていないか検証する方法です。
サーバサイドの水際で防ぐ取り組みが必須になります。
無論、AS側の検証するためのロジックはしっかり隠すべきです。

  • Embedされたファイルのハッシュを確認
  • 通信時にSWFパスやファイルサイズなどを送信
  • 正規SWFにはトークンを発行して、それを利用してサーバ通信

SWFの難読化ツール

隠しリソースや検証方法のロジックを難読化することも大事になります。

SWF Encrypt™ 6.0
http://www.amayeta.com/software/swfencrypt/

Protect SWF Files
http://www.kindi.com/

ActionScriptの難読化ツール

SWFを難読化しても解析ツールが対応したら暴かれますね。
その前にしっかりActionScriptも難読化をしましょう
irrFuscator
http://www.ambiera.com/irrfuscator/features.html

toKaos
http://www.tokaos.com/download-action-script-obfuscator.asp?lang=eng

感想

解析と保護は昔からイタチごっこであり、厳密には解析を防ぎきれないので、
何をどの程度保護するのか決めて取り組むべきだと思います。
一般的な解析やリソースの抜出しは、隠す方法と検証する方法を上手く組み合わせることで対策できます。
そして、その対策を検証するためには、SWF Investigatorはとてもいいツールだと思います。