「[[マイクロソフト系技術情報 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開発]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS