C#程式集系列07,篡改程式集

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   strong   

以下幾個方面用來區分不同的程式集:
○ 程式集名稱:Name
○ 程式集版本:Version
○ 程式集公匙: Public Token
○ 程式集文化:Culture

 

如果沒有很嚴格地按照上面的幾個方面來建立程式集,程式集是很容易被篡改的。本篇體驗篡改程式集。

 

→清空F盤as檔案夾下的所有檔案
→在as檔案夾下建立Dog.cs類,用記事本開啟,編寫如下,儲存

using System;
public class Dog
{
    public static void MakeSound()
    {
        Console.WriteLine("汪汪汪");
    }
}

→把Dog.cs編譯成程式集

→反編譯Dog.dll程式集,查看IL代碼

 

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly Dog
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module Dog.dll
// MVID: {A8BAEEAB-2DF4-425C-B851-87260378D735}
.imagebase 0x10000000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x00400000
// =============== CLASS MEMBERS DECLARATION ===================
.class public auto ansi beforefieldinit Dog
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  MakeSound() cil managed
  {
    // 代碼大小       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      bytearray (6A 6C 6A 6C 6A 6C )                               // jljljl
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Dog::MakeSound
  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // 代碼大小       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method Dog::.ctor
} // end of class Dog

○ .assembly Dog表示程式集的名稱是Dog
○ .assembly Dog語句塊中的.ver 0:0:0:0表示程式集的版本沒有經過特別的設定
○ .assembly Dog語句塊中也沒有Public Token和Culture相關資訊

→在as檔案夾下建立MainClass.cs類,用記事本開啟,編寫如下,儲存

using System;
class MainClass
{
    static void Main()
    {
        Dog.MakeSound();
    }
}

→編譯MainClass.cs,引用Dog.dll,產生MainClass.exe

→執行MainClass.exe

→現在要篡改Dog.dll,先刪除Dog.dll

→在as檔案夾下建立AnotherDog.cs類,用記事本開啟,編寫如下,儲存

using System;
public class Dog
{
    public static void MakeSound()
    {
        Console.WriteLine("小狗怎麼叫~");
    }
}

→編譯AnotherDog.cs類,同樣產生一個Dog.dll程式集

→再次運行MainClass.exe

篡改程式整合功。

 

總結:在產生程式集的時候,如果沒有對程式集的版本、公匙、文化等進行特別的設定,程式集很容易被篡改。

 

“C#程式集系列”包括:

  C#程式集系列01,用記事本編寫C#,IL代碼,用DOS命令編譯器集,運行程式  C#程式集系列02,使用記事本查看可執行程式集的IL代碼  C#程式集系列03,引用多個module  C#程式集系列04,在程式集包含多個module的情境下理解關鍵字internal  C#程式集系列05,讓程式集包含多個module  C#程式集系列06,資訊清單,EXE和DLL的區別  C#程式集系列07,篡改程式集

 

參考資料:

http://www.computersciencevideos.org/  created by Jamie King

C#程式集系列07,篡改程式集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.