「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>その他、開発の色々]] * 目次 [#yca526e4] #contents *概要 [#pc92485a] 逆コンパイル・難読化などの質問が稀にあるため。 *詳細 [#e486fa82] 難読化ソリューションは、 -実行時コンパイラや -スクリプト言語が 出てきて、必要になってきたんじゃないでしょうか? **逆コンパイラ [#e68eca22] ***C言語 [#k8ee3835] C言語のプリプロセッサに通した後のコードは≒リバースできないもよう。 -奇跡的に C/C++ の逆コンパイラを手に入れられたとしても~ それが吐き出すソースを理解できる可能性は全くない。 -C++ の逆コンパイラは C よりもはるかに困難 (事実上不可能) ※ 機械語自体を読む人がいるかも知れないので、保護したいレベルによるかもしれませんが。 ***スクリプト言語 [#n9bc4050] -スクリプト・ファイルがそのまま動く。 -インタプリタでソースコードを、機械語プログラムに解釈・変換しながら処理・実行する。 ***中間コードのある言語 [#x3a1bab8] 以下の理由で、逆コンパイルが容易であるケースが多いらしい。 -中間コードはネイティブコードに比べて命令の種類や複雑さが少ない。 -逆コンパイルされ易い言語 --ガーベージ・コレクションやリフレクション機能のある言語 --その他、 ---共用体が無い ---ポインタ演算・キャストの制限 ---classに定義情報が含まれる。 ---goto 文を禁止している ---, etc. -言語毎のツール --Java:~ JAD(Jad Decompiler) --.NET: ---IL Disassembler(ildasm.exe)~ Visual Studioに付属 ---.NET Reflector~ 昔は無償で一択だったが、2011年の3月に有償化された。 ---dotPeek~ ReSharperに付属 ---ILSpy~ MITのOSSでスタンドアロンで利用可能。 ---Telerik JustDecompile~ Telerik社製 ---.NET CodeReflect~ **難読化 [#t30f2c96] -難読化は単なる時間稼ぎに過ぎず、プログラムの逆コンパイルを不可能とするものではない。 -商用の難読化ソリューションはソースコードの難読化やJavaや.NETなどのプラットフォーム中立な~ バイトコードの変換が大部分を占めるが、中にはコンパイルされたバイナリに直接作用するものも存在する。 ***C言語 [#da9f66e8] そもそも、逆コンパイルができないので難読化も不要。 ***スクリプト言語 [#ff1a5207] そもそも、コンパイルがないので難読化もできない。 ***中間コードのある言語 [#x255bef2] -逆コンパイルが容易なため、難読化が必要になるケースもある。 -言語毎のツール --Java:~ --Java: ---ProGuard ---JODE ---JavaGuard ---RetroGuard ---jarg ---yGuard --.NET: ---ConfuserEx(無料) ---NanDoKu(無料) ---Phoenix Protector(無料) ---Dotfuscator(有料 – 簡易版有り) ---Eazfuscator.NET(有料 – 試用版有り) ---babelfor.net(Babel)(有料 – 試用版有り) *参考 [#n2cfaeda] -.NET Tools:.NET逆コンパイラとコードを難読化するDotfuscator(3/4) - @IT~ https://atmarkit.itmedia.co.jp/fdotnet/tools/dotfuscator/dotfuscator_03.html **逆コンパイラ [#p211d8d7] -逆コンパイラ - Wikipedia~ https://ja.wikipedia.org/wiki/%E9%80%86%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9 -Cの逆コンパイラはどこまで実現可能か,Javaはなぜ逆コンパイルされやすいのか?~ http://www5d.biglobe.ne.jp/~noocyte/Programming/Decompile.html -既にコンパイルされたアセンブリをデバッグできる.NET Reflector~ https://www.infoq.com/jp/news/2012/08/precompiled-net-reflector/ -C#で作られたプログラムをデコンパイルしてみよう - ほげほげー~ https://tyheeeee.hateblo.jp/entry/CS-Advent-Calendar-2014-Day-15 **難読化 [#maf6d7a1] -難読化コード - Wikipedia~ https://ja.wikipedia.org/wiki/%E9%9B%A3%E8%AA%AD%E5%8C%96%E3%82%B3%E3%83%BC%E3%83%89 -.NETプログラムの難読化ツールの紹介と使ってみた感想~ https://rabbitfoot.xyz/code-obfuscation/ -ニュートン製品案内 Spices.NET JP~ (.NETアプリケーション難読化ツール/逆コンパイラ)~ https://www.newtone.co.jp/productsnjp00.html -Dotfuscator の機能 - Visual Studio (Windows) | Microsoft Docs~ https://docs.microsoft.com/ja-jp/visualstudio/ide/dotfuscator/capabilities ---- Tags: [[:プログラミング]], [[:その他、開発の色々]], [[:.NET開発]]