C#をNativeにコンパイルする?
質問
私は、.NET バイト コードをネイティブ コードにコンパイルすることについて、多少混乱していると思います。 そこで、私が理解していると思うことを整理してみるので、何が欠けているのかを把握するのに役立つと思いますので、お付き合いください。
私がしたいことは、C# で書かれた私のアプリケーションを通常のネイティブ コードにコンパイルすることです。 私の理由は、パフォーマンスとは何の関係もなく、むしろある程度の保護が必要なのです。 私の最終目標は、回避することが不可能ではない (あるいは、実際にはそれほど困難ではない) ことを理解していますが、x86 アセンブリを元に戻すことは、Reflector が私に与えるものを元に戻すことよりも困難であるように感じているだけです。
現在、私の C# アプリケーションを Reflector に投げると、基本的に私のソース コードが戻ってきます。 通常、管理されていない C/C++ アプリケーションを IDAPro に投げて、HexRays デコンパイラーを使用すると、同じ程度のデコンパイルは得られず、ロジック フローを理解するために x86 逆アセンブルを読み解く必要があります。 私の理解では、HexRays がデコンパイルしようとする、より簡潔なネイティブ コードではなく、アプリケーションが MSIL であるために、Reflector からはそのような素晴らしいデコンパイルが得られるのだと思います。
クライアント マシンがまだ .NET ランタイムを必要とすることについては何の懸念もありませんし、それを回避しようともしていません。 私は、次のような通常のソフトウェア難読化プログラムを実行したいと思います。
upx
のような通常のソフトウェア難読化プログラムを実行したいのですが、.NET バイナリとしてそれを実行すると失敗します。
それは、私の理解では
この
に関連した質問で
ngen
は私が欲しいものをします。私は
ngen
. しかし、出力ファイルをコピーした後
C:\Windows\assemblies\...\applicationName.ni.exe
ディレクトリからダブルクリックできる場所にコピーした後、それを実行しようとすると、有効な Win32 アプリケーションではないというエラーが発生します。 さらに、私が
applicationName.ni.exe
を Reflector に放り込むと、単に
applicationName.exe
. ということは
applicationName.ni.exe
はネイティブコードであるはずなので、Reflector はエラーになると思っていたのですが、そうではありませんでした。 もしこれが私が想定している方法なら、なぜ Reflector はまだこんなに素晴らしいデコンパイルをしてくれたのでしょうか?
そこで、私の主な質問をもう一度まとめます。Reflector が簡単に逆コンパイルできないようなネイティブ バイナリに .NET プログラムをコンパイルするには、どうすればよいでしょうか。 あるいは、初心者のリバース エンジニアから .NET 言語で書かれた製品を保護するためのベスト プラクティスは何でしょうか?
別のツールが必要な場合、私は無料のものを好みますし、次のようなものではありません。 コードウォール .
ありがとうございます。
UPDATEです。
私が探しているものは、Reflectionのような言語の機能のいくつかを制限するかもしれないことを理解していますが、私はそれで構わないと思います。 私のコードのどれも、明示的な
Assembly.Load
の呼び出しやその種のものはありません。 しかし、これらは単に
GetProcAddress/LoadLibrary
の呼び出しに置き換えることができるのではないでしょうか?
どのように解決するのですか?
私はただ を検証しました。 .Netネイティブ について VS2015 & Windows 8.1 (正しく設定されている場合、.proj を調べて検証してください) と特定のアーキテクチャ用にビルドすると (やりすぎかもしれません、検証していません)、ネイティブファイルを生成して " を提供することになります。 リバース エンジニアリングが困難 というコードになります。 .dll を経由して ドットピーク (JetBrainsのフリーな.Netデコンパイラ)を使用します。
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] コンパイルとトランスパイルの比較
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] アプリケーション・バイナリ・インターフェース(ABI)とは何ですか?
-
[解決済み] Windowsフォームアプリケーションで、アプリケーションの設定を保存するにはどうすればよいですか?
-
[解決済み] シンプルで安全でない双方向のデータ「難読化」?
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] .NETアプリケーションをネイティブコードにコンパイルするには?