mcommit's message

大阪でソフトウェア開発の仕事をしている simotinといいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

C#のバイナリを逆コンパイルしてみる

タイトルの通り、C#でビルドしたプログラムを逆コンパイルしてみました。

なんでこんなことを試したかというと、C#を使うある製品開発に参加しているのですがリバースエンジニアリングとか大丈夫だろうかと単純に疑問に思ったからです。

色々調べてみるとC#(.Net)のデコンパイラとしてILSpyというソフトがあるそうなので今回はこのソフトを使っていろいろ調べてみました。

■参考にさせて頂いたサイト
http://ilspy.net/
無償の逆コンパイラ「ILSpy」を利用するには?[C#] − @IT

■結果

詳細はここではかきませんが、ここまで正確にデコンパイルされるとライセンス認証等で使うパスワードは自分でつかう分にはともかくとして製品としてリリースするようなソフトでは絶対にコードに埋め込んだらダメですね。

そういえば結構前にC#でAmazonS3とローカルのファイルを同期するためのライブラリを書いたときに、S3のパスワードとか思いっきりコードに埋め込んでおりました。
※まぁ自分しかつかっていないからとりあえず問題はないですが。

当然と言えば当然かもしれませんが、Javaや.Netのように中間言語に落としてランタイム上で動かす言語は逆コンパイルに弱いですね。
パッケージソフトなどのライセンス認証などはネット―ワーク経由で認証するのが無難なんだろうなぁと思いました。

■オフレコな話
試しにとある有償のwindows用ソフトが.Netで書かれているようだったのでデコンパイルしてみましたが、見事にコードが復元できました。
製品のライセンス認証部分のDLLは独自のアルゴリズム(シーザー暗号に毛が生えた感じ)を組んでごにょごにょしていましたが、ここまで見られたら破られるなぁという印象でした。

まだあまり調べていないですが、逆に.Netの難読化はどこまで効果があるのか気になるところです。