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

C#項(xiàng)目使用obfuscar混淆實(shí)踐

 更新時(shí)間:2025年12月24日 10:04:25   作者:Thinbug  
文章介紹了如何使用Obfuscar混淆C#代碼,包括安裝Obfuscar、配置混淆設(shè)置文件、設(shè)置編譯事件調(diào)用批處理文件以及注意事項(xiàng),通過(guò)這些步驟,每次編譯Release版本時(shí),代碼都會(huì)自動(dòng)混淆,提高安全性

obfuscar 可以混淆C#代碼。

在項(xiàng)目中我們通過(guò)NuGet安裝obfuscar包。

安裝obfuscar

VS里點(diǎn)擊解決方案,然后搜索,點(diǎn)擊安裝。

設(shè)置混淆xml

然后需要編譯一個(gè)混淆設(shè)置文件obfuscar.xml,放在項(xiàng)目目錄中。

<?xml version='1.0'?>
<Obfuscator>
	<!-- 輸入的工作路徑,采用如約定的 Windows 下的路徑表示法,如以下表示當(dāng)前工作路徑 -->
	<!-- 推薦使用當(dāng)前工作路徑,因?yàn)?DLL 的混淆過(guò)程,需要找到 DLL 的所有依賴。剛好當(dāng)前工作路徑下,基本都能滿足條件 -->
	<Var name="InPath" value=".\bin\Release" />
	<!-- 混淆之后的輸出路徑,如下面代碼,設(shè)置為當(dāng)前工作路徑下的 Obfuscar 文件夾 -->
	<!-- 混淆完成之后的新 DLL 將會(huì)存放在此文件夾里 -->
	<Var name="OutPath" value=".\bin\Obfuscar" />
	<!-- 以下的都是細(xì)節(jié)的配置,配置如何進(jìn)行混淆 -->

	<!-- 使用 KeepPublicApi 配置是否保持公開(kāi)的 API 不進(jìn)行混淆簽名,如公開(kāi)的類型公開(kāi)的方法等等,就不進(jìn)行混淆簽名了 -->
	<!-- 語(yǔ)法的寫(xiě)法就是 name 表示某個(gè)開(kāi)關(guān),而 value 表示值 -->
	<!-- 對(duì)于大部分的庫(kù)來(lái)說(shuō),設(shè)置公開(kāi)的 API 不進(jìn)行混淆是符合預(yù)期的 -->
	<Var name="KeepPublicApi" value="true" />
	<!-- 設(shè)置 HidePrivateApi 為 true 表示,對(duì)于私有的 API 進(jìn)行隱藏,隱藏也就是混淆的意思 -->
	<!-- 可以通過(guò)后續(xù)的配置,設(shè)置混淆的方式,例如使用 ABC 字符替換,或者使用不可見(jiàn)的 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 表示使用不可見(jiàn)的 Unicode 字符代替原有的命名,通過(guò)此配置,可以讓反編譯看到的類和命名空間和成員等內(nèi)容都是不可見(jiàn)的字符 -->
	<!-- 設(shè)置 UseUnicodeNames 為 true 可能在捕獲異常的時(shí)候出現(xiàn)問(wèn)題,不建議開(kāi) -->
	<Var name="UseUnicodeNames" value="false" />
	<!-- 設(shè)置 UseKoreanNames 為 true 使用韓文字 -->
	<Var name="UseKoreanNames" value="true" />
	<!-- 是否復(fù)用命名,設(shè)置為 true 的時(shí)候,將會(huì)復(fù)用命名,如在不同的類型里面,對(duì)字段進(jìn)行混淆,那么不同的類型的字段可以是重名的 -->
	<!-- 設(shè)置為 false 的時(shí)候,全局將不會(huì)有重復(fù)的命名 -->
	<Var name="ReuseNames" value="true" />
	<!-- 配置是否需要重命名字段,默認(rèn)配置了 HidePrivateApi 為 true 將都會(huì)打開(kāi)重命名字段,因此這個(gè)配置的存在只是用來(lái)配置為 false 表示不要重命名字段 -->
	<Var name="RenameFields" value="true" />
	<!-- 是否需要重新生成調(diào)試信息,生成 PDB 符號(hào)文件 -->
	<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)\MyApp.exe">
		<!--SkipType跳過(guò)指定的類 Program是Main所在的類名-->
		<!--<SkipType name="Program"  />-->
		<!--SkipMethod 跳過(guò)指定的方法-->
		<!--<SkipMethod type="Program" name="Main"/>-->
	</Module>
	
	

	<!-- 程序集的引用加載路徑,對(duì)于 dotnet 6 應(yīng)用,特別是 WPF 或 WinForms 項(xiàng)目,是需要特別指定引用加載路徑的 -->
	<!-- 這里有一個(gè)小的需要敲黑板的知識(shí)點(diǎn),應(yīng)該讓 Microsoft.WindowsDesktop.App 放在 Microsoft.NETCore.App 之前 -->
	<!-- 對(duì)于部分項(xiàng)目,如果沒(méi)有找到如下順序,將會(huì)在混淆過(guò)程中,將某些程序集解析為舊版本,從而失敗 -->
	<!--<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>

Module里配置要混淆的exe或者Dll。

編譯自動(dòng)混淆

然后我們寫(xiě)一個(gè)批處理,在編譯完成時(shí)候調(diào)用。 這里注意版本號(hào)和路徑

echo 批處理開(kāi)始混淆和拷貝發(fā)布程序

cd E:\Github\MyAppConsole\MyApp\MyApp
..\packages\Obfuscar.2.2.49\tools\Obfuscar.Console.exe .\obfuscar.xml
echo 混淆結(jié)束

我們?cè)陧?xiàng)目生成事件里調(diào)用這個(gè)bat文件。

這樣我們每次編譯release就可以自動(dòng)混淆了。

注意事項(xiàng)

因?yàn)榛煜龝?huì)修改函數(shù)名字,所以要注意一些反射或者按照字符串反射函數(shù)或者變量的地方,這些地方要排除掉,還有使用Json讀取等反射,需要標(biāo)記[Serializable]

[Serializable]
public class ShopInfo
{
    public string id;
    public string ver_url;
}

這樣就混淆成功了,我們可以使用dnSpy軟件來(lái)看我們混淆后的代碼。

基本上這樣就沒(méi)什么可閱讀性了。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Unity實(shí)現(xiàn)簡(jiǎn)單虛擬搖桿

    Unity實(shí)現(xiàn)簡(jiǎn)單虛擬搖桿

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡(jiǎn)單虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#實(shí)現(xiàn)把dgv里的數(shù)據(jù)完整的復(fù)制到一張內(nèi)存表的方法

    C#實(shí)現(xiàn)把dgv里的數(shù)據(jù)完整的復(fù)制到一張內(nèi)存表的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)把dgv里的數(shù)據(jù)完整的復(fù)制到一張內(nèi)存表的方法,需要的朋友可以參考下
    2014-08-08
  • C#、ASP.NET通用擴(kuò)展工具類之TypeParse

    C#、ASP.NET通用擴(kuò)展工具類之TypeParse

    這篇文章主要介紹了C#、ASP.NET通用擴(kuò)展工具類之TypeParse,使用了此類,類型轉(zhuǎn)換方便多了,本文直接給出實(shí)現(xiàn)代碼和使用方法,需要的朋友可以參考下
    2015-06-06
  • C#利用Spire.XLS for .NET將Excel轉(zhuǎn)換為HTML格式

    C#利用Spire.XLS for .NET將Excel轉(zhuǎn)換為HTML格式

    在數(shù)字化浪潮中,數(shù)據(jù)是核心,而Excel作為最常用的數(shù)據(jù)管理工具之一,其生成的報(bào)表、統(tǒng)計(jì)數(shù)據(jù)等常常需要發(fā)布到Web平臺(tái),供用戶在線瀏覽或集成進(jìn)Web應(yīng)用,今天,我們將借助Spire.XLS庫(kù),快速實(shí)現(xiàn)Excel到HTML的精準(zhǔn)轉(zhuǎn)換,需要的朋友可以參考下
    2025-10-10
  • c# 實(shí)現(xiàn)漢諾塔游戲

    c# 實(shí)現(xiàn)漢諾塔游戲

    這篇文章主要介紹了c# 實(shí)現(xiàn)漢諾塔游戲的示例,幫助大家更好的理解和使用c# 編程語(yǔ)言,感興趣的朋友可以了解下
    2020-11-11
  • Unity游戲開(kāi)發(fā)之射擊小游戲的實(shí)現(xiàn)

    Unity游戲開(kāi)發(fā)之射擊小游戲的實(shí)現(xiàn)

    本篇文章為大家?guī)?lái)一個(gè)橫版2D射擊小游戲,游戲制作超級(jí)簡(jiǎn)單,玩法一學(xué)就會(huì)。文中的示例代碼講解詳細(xì),快跟隨小編一起動(dòng)手試一試
    2022-03-03
  • 詳解WPF中值轉(zhuǎn)換器的使用方法

    詳解WPF中值轉(zhuǎn)換器的使用方法

    在WPF(Windows Presentation Foundation)中,值轉(zhuǎn)換器(Value Converter)是一種機(jī)制,允許你在綁定時(shí)轉(zhuǎn)換綁定源和綁定目標(biāo)之間的值,本文給大家介紹了WPF中值轉(zhuǎn)換器的使用方法,需要的朋友可以參考下
    2024-02-02
  • c#強(qiáng)制類型轉(zhuǎn)換int方式

    c#強(qiáng)制類型轉(zhuǎn)換int方式

    這篇文章主要介紹了c#強(qiáng)制類型轉(zhuǎn)換int方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • C#實(shí)現(xiàn)工廠方法模式

    C#實(shí)現(xiàn)工廠方法模式

    這篇文章介紹了C#實(shí)現(xiàn)工廠模式的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • WPF利用RichTextBox實(shí)現(xiàn)富文本編輯器

    WPF利用RichTextBox實(shí)現(xiàn)富文本編輯器

    在實(shí)際應(yīng)用中,富文本隨處可見(jiàn),那么在WPF開(kāi)發(fā)中,如何實(shí)現(xiàn)富文本編輯呢?本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述如何通過(guò)RichTextBox實(shí)現(xiàn)富文本編輯功能,需要的可以參考下
    2024-02-02

最新評(píng)論

鄂尔多斯市| 伽师县| 望都县| 朔州市| 华宁县| 志丹县| 庆城县| 肇东市| 珠海市| 新泰市| 福安市| 静安区| 普宁市| 宝应县| 济阳县| 香格里拉县| 革吉县| 甘孜县| 潞城市| 慈利县| 富源县| 金乡县| 丹寨县| 广安市| 松原市| 南溪县| 阿克| 封开县| 绥芬河市| 甘谷县| 兴业县| 垦利县| 平南县| 兴国县| 道孚县| 西乌| 望奎县| 轮台县| 新郑市| 漯河市| 北碚区|