株式会社Ninjastars 技術研究部

「もっと楽しく安全なゲームの世界を創る」

ソフトウェアの自己防衛 for Windows

株式会社Ninjastars
セキュリティエンジニア:一瀬健二郎

今回はWindowsにおけるソフトウェア保護についての記事です。
自作のソフトウェアの配布や販売を検討しているとき、クラックやリバースエンジニアリングが脅威となる場合があります。
本記事では簡単に出来てそこそこの効果があるであろう防御手法を簡単にご紹介します。
ただし、今回ご紹介している方法だけでは完璧に防御できるわけではございません。
その点ご了承ください。

商用パッカー

Themida、ASProtectなどが有名です。
実行プログラムを圧縮し、実行時にプログラムを展開させることで静的解析は困難になります。
アンチデバッグ、アンチファイル改竄などオプションで付与できます。
デメリットとしてウィルス対策ソフトにマルウェアと誤検知される可能性が高く、配布時には注意が必要です。
また実行時に展開されるため動的解析に防御できません。
対象のパッカーがx86,x64,.NET等に対応しているか良くご確認ください。

Themida

Oreans Technology : Software Security Defined.

f:id:Ninjastars:20190323124753p:plain
豊富な防御オプションがある。

ASProtect

ASPack Software - Application for compression, packing and protection of softare

f:id:Ninjastars:20190323131152p:plain
ハードウェア制限のオプションも設定可能。

Anti-Debug

最も有名な手法としてはWindowsAPIであるIsDebuggerPresentはデバッグされていれば1を返すので、それを利用して検知します。
Anti-Debug技術も一般に公開され各種デバッガ用のプラグインも配布されています。
ただし複合的に実装すれば一定の効果はあると思われます。

ファイル改竄検知

ファイルのハッシュ値などを計算し異なっていれば起動しないようにします。
プログラム上の改竄判定比理の部分自体でハッシュ値が変わってしまうため、実装上の工夫が必要です。

実行プログラム改変検知

巡回冗長検査 - Wikipedia
CRC(巡回冗長検査)を用いて一定間隔で実行プログラムのメモリ上を検査します。
CRCは対象領域内を1byteでも改竄されると値が変化します。改竄を検知した時点でプログラムをシャットダウン等させます。

動的解析ツール検知

CheatEngineやOllyDbgなど解析ツールの起動を検知した時点でプログラムをシャットダウン等させます。
比較的簡単な手法としてはプロセス・ウィンドウ情報を取得する各種方法を利用して検知する等します。

使用期限を設定する

ローカルタイムを取得する方式だと時刻を変更される可能性があります。
NTPサーバと通信して日付を取得し起動判定します。

Pythonスクリプトの保護

pyinstallerでexe化すると容易にソースコードを復元されてしまいます。
nuitika を利用するとC言語に変換してからexe化するので復元が困難になります。
スクリプトの難読化にはpyminifier等を利用しましょう。

最後に

簡単なご紹介に留まりましたが、試行錯誤して自分なりに工夫をすれば一定の保護効果はあります。
この記事が読者の皆様のソフトウェア開発などの一助になれば幸いです。


本レポートについて
お問い合せ
E-mail:ichise@ninjastars-net.com

株式会社Ninjastars
セキュリティエンジニア:一瀬健二郎