2016-07-11 3 views
1

私は最近、実行時に名前変更機能やその他の難読化プリコンパイルを提供するソリューションを考え出しました。私はロザリンを使うことが道だと信じていますが、あなたが持つ可能性のある洞察力を提供してください。プリコンパイル - ロザリン生成コードの難読化

最終的な目標は次のとおりです。 エンドユーザーは、実行時にテキストバージョンのアセンブリに生成されるさまざまなオプションを選択できます。次に、Roslynを使用して.exeを生成します。 EXEが生成される前であっても、実行時に難読化することができるのであれば私は興味がありました。このようにして、varsなどの名前を変更できます。

+0

Mono.Cecilの使用を検討してください。 – SLaks

答えて

5

C#ソースコードを確実に変換できるツールを使用できます。

Roslynは1つですが面白い方法ですが、プログラムを修正してオブジェクトコードを生成することができます。それはうまくいくはずです。

その他Program Transformation Systems (PTS)ソースコードを変更することでこれを行うことができます。 PTSは、ソースコードを読み取り、コンパイラのデータ構造(例えば、AST)を構築し、ASTを修正し、修正されたASTからソースコードを再生成することができる。そうすれば、難読化されたコードを見ることができます。後でC#コンパイラでいつでもコンパイルできます。良いPTSは、あなたがこのような形で対象言語の構文の面でコード変換を記述できるようになる:

if you see *this pattern*, replace it by *that pattern* 

rule <name> <patternvariables> "thispattern" -> "thatpattern"; 

はPTSを使用したとして、以下に表現し、あなたは間違いなく、任意作ることができます関数と変数の名前変更、コードフローのスクランブリング、データフローのスクランブリングなど、ソースコードの変更。たとえば、あなたが混乱を追加するには、このルールを使用する場合があります。

rule scramble_if_then(c: condition, b: block): statement -> statement 
     " if (\c) \b " -> "int temp = \c?4:3; 
          while (temp>3) {\b; temp--; }"; 

この規則は、愚かな/少しシンプルですが、私はそれはあなたが読みやすいソースコード変換を書くことができるポイントを作ると思います。このようなルールが多数ある場合、特にルールが洗練された変換を行う場合は、コードをたくさんスクランブルします。

DMS Software Reengineering Toolkitを使用してname-scrambling obfuscatorsを実装しています(これにはC#用も含まれます)。