最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Obfuscar進(jìn)行代碼混淆的實(shí)現(xiàn)

 更新時(shí)間:2025年07月04日 09:46:07   作者:廈門德仔  
本文主要介紹了C#使用Obfuscar進(jìn)行代碼混淆的實(shí)現(xiàn),使用Obfuscar混淆C#代碼以保護(hù)知識(shí)產(chǎn)權(quán),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、為什么要混淆

可以通過反編譯程序集,直接就能看到你的源代碼,這顯然很不利于企業(yè)進(jìn)行知識(shí)產(chǎn)權(quán)保護(hù)。

二、有哪些混淆工具

Obfuscar、ConfuserEx、Dotfuscator、.NETReactor、Eazfuscator.NET、Xeoncode、Foxit等等,非常多。

三、Obfuscar的使用

我們介紹開源的Obfuscar。這是一個(gè)非常老牌的混淆工具,從 2014 年就對外分發(fā)。而且此工具也在不斷持續(xù)迭代更新,完全支持 dotnet 6 版本,對 WPF 和 WinForms 等等的支持也是非常好,支持多個(gè)不同混淆方式和等級的配置,支持混淆之后生成符號文件。此工具是由 Lex Li 主導(dǎo)開發(fā)的,在 GitHub 上使用 MIT 最友好協(xié)議開源。此工具的使用方式有多個(gè)不同的方式,我比較推薦直接放在visual studio 2022中使用,因?yàn)殚_發(fā)完順帶就混淆編譯,很省事

1、通過Nuget安裝Obfuscar。

在這里插入圖片描述

2、在工程中新建Obfuscar.xml文件

在這里插入圖片描述

內(nèi)容如下:

<?xml version='1.0'?>
<Obfuscator>
  <!-- 輸入的工作路徑,采用如約定的 Windows 下的路徑表示法,如以下表示當(dāng)前工作路徑 -->
  <!-- 推薦使用當(dāng)前工作路徑,因?yàn)?DLL 的混淆過程,需要找到 DLL 的所有依賴。剛好當(dāng)前工作路徑下,基本都能滿足條件 -->
  <Var name="InPath" value=".\bin\Debug\net6.0" />
  <!-- 混淆之后的輸出路徑,如下面代碼,設(shè)置為當(dāng)前工作路徑下的 Obfuscar 文件夾 -->
  <!-- 混淆完成之后的新 DLL 將會(huì)存放在此文件夾里 -->
  <Var name="OutPath" value=".\bin\Debug\net6.0\Obfuscar" />
  <!-- 以下的都是細(xì)節(jié)的配置,配置如何進(jìn)行混淆 -->
 
  <!-- 使用 KeepPublicApi 配置是否保持公開的 API 不進(jìn)行混淆簽名,如公開的類型公開的方法等等,就不進(jìn)行混淆簽名了 -->
  <!-- 語法的寫法就是 name 表示某個(gè)開關(guān),而 value 表示值 -->
  <!-- 對于大部分的庫來說,設(shè)置公開的 API 不進(jìn)行混淆是符合預(yù)期的 -->
  <Var name="KeepPublicApi" value="true" />
  <!-- 設(shè)置 HidePrivateApi 為 true 表示,對于私有的 API 進(jìn)行隱藏,隱藏也就是混淆的意思 -->
  <!-- 可以通過后續(xù)的配置,設(shè)置混淆的方式,例如使用 ABC 字符替換,或者使用不可見的 Unicode 代替 -->
  <Var name="HidePrivateApi" value="true" />
  <!-- 設(shè)置 HideStrings 為 true 可以設(shè)置是否將使用的字符串進(jìn)行二次編碼 -->
  <!-- 由于進(jìn)行二次編碼,將會(huì)稍微傷一點(diǎn)點(diǎn)性能,二次編碼需要在運(yùn)行的時(shí)候,調(diào)用 Encoding 進(jìn)行轉(zhuǎn)換為字符串 -->
  <Var name="HideStrings" value="true" />
  <!-- 設(shè)置 UseUnicodeNames 為 true 表示使用不可見的 Unicode 字符代替原有的命名,通過此配置,可以讓反編譯看到的類和命名空間和成員等內(nèi)容都是不可見的字符 -->
  <Var name="UseUnicodeNames" value="true" />
  <!-- 是否復(fù)用命名,設(shè)置為 true 的時(shí)候,將會(huì)復(fù)用命名,如在不同的類型里面,對字段進(jìn)行混淆,那么不同的類型的字段可以是重名的 -->
  <!-- 設(shè)置為 false 的時(shí)候,全局將不會(huì)有重復(fù)的命名 -->
  <Var name="ReuseNames" value="true" />
  <!-- 配置是否需要重命名字段,默認(rèn)配置了 HidePrivateApi 為 true 將都會(huì)打開重命名字段,因此這個(gè)配置的存在只是用來配置為 false 表示不要重命名字段 -->
  <Var name="RenameFields" value="true" />
  <!-- 是否需要重新生成調(diào)試信息,生成 PDB 符號文件 -->
  <Var name="RegenerateDebugInfo" value="false" />
 
  <Var name="OptimizeMethods" value="true"/>
 
  <Var name="SuppressIldasm" value="false"/>
 
  <!-- 需要進(jìn)行混淆的程序集,可以傳入很多個(gè),如傳入一排排 -->
  <!-- <Module file="$(InPath)\Lib1.dll" /> -->
  <!-- <Module file="$(InPath)\Lib2.dll" /> -->
  <Module file="$(InPath)\UavDataServer.dll">
    <!--SkipType跳過指定的類 Program是Main所在的類名-->
		<!--<SkipType name="Program"  />-->
    <!--SkipMethod 跳過指定的方法-->
		<!--<SkipMethod type="Program" name="Main"/>-->
  </Module>
  <Module file="$(InPath)\UavDataWorkerService.exe">
    <!--SkipType跳過指定的類 Program是Main所在的類名-->
    <!--<SkipType name="Program"  />-->
    <!--SkipMethod 跳過指定的方法-->
    <!--<SkipMethod type="Program" name="Main"/>-->
  </Module>
 
  <!-- 程序集的引用加載路徑,對于 dotnet 6 應(yīng)用,特別是 WPF 或 WinForms 項(xiàng)目,是需要特別指定引用加載路徑的 -->
  <!-- 這里有一個(gè)小的需要敲黑板的知識(shí)點(diǎn),應(yīng)該讓 Microsoft.WindowsDesktop.App 放在 Microsoft.NETCore.App 之前 -->
  <!-- 對于部分項(xiàng)目,如果沒有找到如下順序,將會(huì)在混淆過程中,將某些程序集解析為舊版本,從而失敗 -->
  <!--<AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\6.0.1\" />
	<AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.1\" />-->
</Obfuscator>

其中,

  • InPath是你要混淆的dll或exe所在的目錄,一般是你的生成目錄,要改成你自己的相對路徑。
  • OutPath則是混淆完成后的新dll或exe所輸出到的目標(biāo)目錄,自己改。
  • Module標(biāo)簽則需要設(shè)置要混淆哪些dll或exe,有多個(gè)就添加多個(gè)Module標(biāo)簽。

在這里插入圖片描述

3、生成混淆文件

  1. 設(shè)置生成事件指令
    項(xiàng)目屬性中,添加生成后事件
"$(Obfuscar)" Obfuscar.xml

在這里插入圖片描述

在這里插入圖片描述

4、最后編譯運(yùn)行即可,在我的輸出路徑下,能看到

在這里插入圖片描述

5、對了,驗(yàn)證下是否混淆效果

使用ILSpy打開混淆后的dll,發(fā)現(xiàn)方法名、參數(shù)、一些變量名都被混淆了:

在這里插入圖片描述

到此這篇關(guān)于C#使用Obfuscar進(jìn)行代碼混淆的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# Obfuscar代碼混淆內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • C#微信開發(fā)之發(fā)送模板消息

    C#微信開發(fā)之發(fā)送模板消息

    這篇文章主要為大家詳細(xì)介紹了C#微信開發(fā)之發(fā)送模板消息的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 基于為何我不喜歡用Path.Combine的詳解

    基于為何我不喜歡用Path.Combine的詳解

    本篇文章對是為什么我不喜歡用Path.Combine做了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Unity UI組件ScrollRect實(shí)現(xiàn)無限滾動(dòng)條

    Unity UI組件ScrollRect實(shí)現(xiàn)無限滾動(dòng)條

    這篇文章主要為大家詳細(xì)介紹了Unity UI組件ScrollRect實(shí)現(xiàn)無限滾動(dòng)條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#表達(dá)式樹講解

    C#表達(dá)式樹講解

    本文詳細(xì)講解了C#表達(dá)式樹的創(chuàng)建、生成和使用,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • WPF自定義實(shí)現(xiàn)IP地址輸入控件

    WPF自定義實(shí)現(xiàn)IP地址輸入控件

    這篇文章主要給大家介紹了關(guān)于WPF自定義實(shí)現(xiàn)IP地址輸入控件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用WPF具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • c# 調(diào)用Surfer軟件,添加引用的具體操作方法

    c# 調(diào)用Surfer軟件,添加引用的具體操作方法

    本篇文章主要是對c#中調(diào)用Surfer軟件,添加引用的具體操作方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#設(shè)置軟件開機(jī)自動(dòng)運(yùn)行的方法(修改注冊表)

    C#設(shè)置軟件開機(jī)自動(dòng)運(yùn)行的方法(修改注冊表)

    這篇文章主要介紹了C#設(shè)置軟件開機(jī)自動(dòng)運(yùn)行的方法,通過簡單修改注冊表開機(jī)啟動(dòng)項(xiàng)實(shí)現(xiàn)軟件的開機(jī)啟動(dòng)功能,非常簡單實(shí)用,需要的朋友可以參考下
    2016-06-06
  • 關(guān)于System.Convert的那些事兒

    關(guān)于System.Convert的那些事兒

    本篇文章是對System.Convert的那些事兒,進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實(shí)現(xiàn)掃描槍掃描二維碼并打印(實(shí)例代碼)

    C#實(shí)現(xiàn)掃描槍掃描二維碼并打印(實(shí)例代碼)

    這篇文章主要介紹了C#實(shí)現(xiàn)掃描槍掃描二維碼并打印,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • C#刪除字符串中重復(fù)字符的方法

    C#刪除字符串中重復(fù)字符的方法

    這篇文章主要介紹了C#刪除字符串中重復(fù)字符的方法,涉及C#針對字符串的遍歷及移除等操作的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評論

峨边| 绥阳县| 井冈山市| 开封县| 广丰县| 淳安县| 阳曲县| 开平市| 手游| 蓬莱市| 桐柏县| 乌鲁木齐市| 吴江市| 桐柏县| 普宁市| 甘南县| 丹江口市| 和平区| 根河市| 九江市| 光山县| 邵阳县| 泽库县| 临洮县| 津南区| 巧家县| 阳东县| 电白县| 商都县| 弥勒县| 邳州市| 昌平区| 区。| 于田县| 罗甸县| 南京市| 卢龙县| 信阳市| 台东县| 新蔡县| 通榆县|