C#のオペコード:「シェルコード」書き込みの.NETバージョン

$ 000序文

近年では、すべてのように我々はそうシェルコードのために、我々は不慣れであってはならない、浸透した後、CSを使用しています。
しかし、多くの人々がその機能はCSが何であるかを理解していない、CS生成されたシェルコードは、ダウンローダでした。
主な機能は、その後、メモリ負荷、私たちは何年BECONある関連する機能をbecon.dllダウンロードすることです。
シェルコードは、鍵、小さなサイズの利点を抽出するためにマシンコードマシンコードにターンした後、アセンブリまたはVCに書き込むことができ
ますが、直接の脆弱性と組み合わせて使用することができ、小型、どのようなWord文書、MS17010オーバーフローを、ウマなどにリンクされているIEの脆弱性は
、直接CSと併せて使用することができますCSを直接オンラインのではなく、他の操作は、最初のCSの再移植をしなければなりません。
アセンブリまたはVCシェルコードについて書かれた多くは、オンラインの記事が、.NETの「シェルコード」珍しい
資料では、オペコードと「シェルコード」の.NETバージョンを記述する方法をお教えします。

0x001命令オペコードバイトコード

公式の開始前に、そのようなマシンコードとの違いとして、どのような科学の命令オペコードを、皆を与えます

コマンド:コマンドCPUが操作コードフィールドとで構成されるアドレス・コード・フィールド(オペランドフィールド)によって、行います

オペレーションコード(オペコード):コードを実行している特定のアクション

バイトコード(バイトコード):マシンコードと同じ、それは主にソフトウェアベースのインタプリタ(たとえば、JavaまたはCLR)によって使用されることを除いて

アセンブリの2つの「アセンブリ」 - 「アセンブラ」に供給されるニーモニックとオペランド、アセンブラシリーズ、
「アセンブラ」ニーモニックオペランドとは、「実行可能ファイルにコンパイルさマシンコード。「また、」リンカー「コンポーネントおよび実行可能ファイルへのリンク。

CLR言語:(。NET秒「アセンブリ」CLRコードシリーズの言語)、前記射出メタデータ情報、実行可能なコードライブラリが、直接実行することはできません。

0x002ペイロードシェルコード

マシンコード(共通オーバーフローシェルコード)は: - そのような数、分岐、乗算、等増加として(オペコードとアドレスコードを含む)バイナリコード命令、特定のタスクを実行するための開口部のデジタル・シーケンスと開閉機能スイッチコンピュータでありますこれは、それらを達成するためにプロセッサによって、純粋なマシン固有です。

K8は、シェルコードの弾丸、(プロセッサの実行など)の銃の発射を理解し、かどうかは、あなたが弾丸(シェルコード)の種類を使用し、撮影(プロセッサの実行)に銃です。

ペイロード:弾薬のK8の理解は、弾薬は、シェルで埋め、だけでなく、直接しかし、花火が点灯して鳴らすことができ指しますが、直接弾薬銃が発射されることができないことができます。

PSは:多くの記事は、多くの場合、ペイロードシェルコードと混同として、多くの混乱のための概念をセキュリティの多くを見つけるのですか
解釈上見て、あなたは明らかでちょうどシェルコードペイロードを理解しておく必要があり、することができません同じに属します。
多くの人々誤解操作コードシェルコードは、さらに、少なくとも少しのように見えますが、同様のビットことが理解されるが、それは本当にありませんでした。
バイナリ、16進数またはバイト配列が言われているシェルコードが表示されていない、まだ与えられていない人のように見えます。

0x003 .NETの機能コード

.NETは複数の言語が含まれており、ここで私は、一例として、C#コードを使用します

            public int Add(int x, int y)
            {
                x = x * y;
                return x  + y;
            }

与えること0x003 IL解体命令

命令発行:https://www.jb51.net/article/86802.htm
IL言語は、あなたがすることができ、C#やVB.NETまたはF#の開発機能を使用しているかどうか、.NETの集大成として理解しましたILコードを逆コンパイル。ツール逆コンパイルIldasm.exeをを使用して、あなたは、はるかに優れたシンプルなコンパイルよりも、ほとんどILコードおよびアセンブリ、それが一般的に使用することができる.NET感を見ることができます。

  // Method begins at RVA 0x2170
  // Code size       9 (0x9)
  .maxstack  8
  IL_0000:  /* 03   |                  */ ldarg.1
  IL_0001:  /* 04   |                  */ ldarg.2
  IL_0002:  /* 5A   |                  */ mul
  IL_0003:  /* 10   | 01               */ starg.s    x
  IL_0005:  /* 03   |                  */ ldarg.1
  IL_0006:  /* 04   |                  */ ldarg.2
  IL_0007:  /* 58   |                  */ add
  IL_0008:  /* 2A   |                  */ ret
} // end of method MethodBodyDemo::Add

0x004 IL命令オペコードは、.NETを転送しました

解体抽出マシンコードVCとして、我々は、キーの比較命令オペコードの問題を抽出し、対応する16進をコピーします。

    0x02,0x03,0x5A,0x10,0x00,0x02,0x03,0x58,0x2A

0x005負荷運転コード

    private static Func<int, int, int> LoadByteAssmbly(byte[] bytes)
        {
            var asmName = new AssemblyName("DynamicAssembly");
            var asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);
            var module = asmBuilder.DefineDynamicModule("DynamicModule");
            var typeBuilder = module.DefineType("DynamicType");
            var method = typeBuilder.DefineMethod("DynamicMethod",
                MethodAttributes.Public | MethodAttributes.Static,
                typeof(int),
                new[] { typeof(int), typeof(int) });
            method.CreateMethodBody(bytes, bytes.Length);
            var type = typeBuilder.CreateType();

            return (Func<int, int, int>)type.GetMethod("DynamicMethod").CreateDelegate(typeof(Func<int, int, int>));
        }

結果の0x006実装

画像

おすすめ

転載: www.cnblogs.com/k8gege/p/12307393.html