知り合いが担当システムについて
ソースがないdllもあります
って話していたのですが、だったら、どうやって改修するのと聞いたら、dllからデコンパイルするらしいです。
リリースされているサーバーのaspxからソースを回収して開発と言うのは聞いたことがあったものの、dllからデコンパイルってあるのか、と。
その時にdnSpyというツールを使っているらしいです。
そういえば、Resharper UltimateだからdotPeekを自分を持っていたなと。
原則的に権利が絡むので他人様のdllをこれらのツールで覗くのには注意が必要です。
今回は自分のGitHubに公開しているC#リポジトリのdllで試してみることにします。
dnSpy
驚くのは、なんとGUIがダークと凝ってます。
肝心のdllのデコンパイルは以下。
細かい点を見れば
- flag1とかflag2というローカル変数名
- yield breakがなぜ二つあるのか?
はどうかな、と思えますが、えっ、本当にデコンパイルしたの?
本物のソースなんじゃないというほどの復元。
dotPeek
dnSpyでハードルが高くなった有償のdotPeekはというと・・・
これはかなりの再現度です。
使わなくなった変数をわざわざnullで解放している点を除けば、ほぼ完璧です。
どこからか元ソースを見つけて来たのかというほどです。
そんなはずはない!とGitHubからdllを直接ダウンロードしたのですが、これがその結果です。
pdbもありません。なのに、これ。
さすが有償ツール。
結論
dnSpyでもデコンパイルの性能は高いです。
dotPeekならなお良し。
これで化石のように眠ったソースをdllから復旧させられることもわかりました。
ソースをコミットせずに退職されてしまったとか聞いたことありますから。
こういったツールのお世話にならないことが望ましいですね。
悪用もすべからず。また、C#のソースはそれだけデコンパイルされやすいというリスクを目の当たりにしました。
難読化のような工夫が必要でしょう。