基于ASP.NET Core 3.1 WebApi搭建後端多層網站架構【15-擴充之使用Obfuscar混淆加密保護代碼】
使用Obfuscar混淆加密保護代碼,防止他人使用ILSpy等工具反編譯檢視到源碼
2020/02/03, ASP.NET Core 3.1, VS2019, Obfuscar 2.2.25
摘要:基于ASP.NET Core 3.1 WebApi搭建後端多層網站架構【15-擴充之使用Obfuscar混淆加密保護代碼】
文章目錄
此分支項目代碼
本章節介紹了使用Obfuscar混淆加密保護代碼,防止他人使用ILSpy等工具反編譯檢視到源碼,可以一定程度上防護自己的代碼
Obfuscar是開源免費的混淆加密工具,支援.NET Framework和.NET Core應用程式,官方網站、github項目位址、官方文檔
添加包引用
向
MS.WebApi
應用程式添加包引用:
<ItemGroup>
<PackageReference Include="Obfuscar" Version="2.2.25">
</ItemGroup>
添加混淆配置檔案
MS.WebApi
應用程式添加xml配置檔案,取名為obfuscar.xml:
右擊該xml檔案屬性,選擇
始終複制
到輸出目錄:
編輯obfuscar.xml配置檔案:
<?xml version='1.0'?>
<Obfuscator>
<Var name="InPath" value="." />
<Var name="OutPath" value=".\Obfuscator_Output" />
<Var name="UseUnicodeNames" value="true" />
<Module file="$(InPath)\MS.Services.dll" />
<Module file="$(InPath)\MS.Component.Jwt.dll" />
<Module file="$(InPath)\MS.Component.Aop.dll" />
</Obfuscator>
- 配置的變量值在官方文檔-配置中都有寫,可以去查閱下
- 解釋下以上我的配置含義:
- InPath即輸入路徑,"."表示從目前路徑開始找,項目編譯完,我會使用
指令跳到目前輸出目标目錄CD $(TargetDir)
- OutPath即輸出路徑,輸出到目前路徑下的Obfuscator_Output檔案夾
- UseUnicodeNames即使用Unicode編碼混淆名稱,值是true,就是開啟該功能
- var開頭的節點都是混淆配置,obfuscar還有好多配置,但是有些配置開啟後會影響代碼功能,需要自己混淆後再測試一遍功能,以上我的配置不影響代碼功能,已經自行測試過了
-
這行意思就是,将編譯完成後輸出目錄下的MS.Services.dll進行混淆(混淆後會生成在Obfuscator_Output檔案夾中)Module file="$(InPath)\MS.Services.dll"
- InPath即輸入路徑,"."表示從目前路徑開始找,項目編譯完,我會使用
添加生成事件
在
MS.WebApi
應用程式中右擊-屬性-生成事件,在“生成後事件指令行”中填寫指令:
CD $(TargetDir)
"$(Obfuscar)" obfuscar.xml
- 編譯成功後,VS便執行上面寫的兩行指令
-
這條指令很重要,決定了obfuscar.xml配置檔案中InPath的值"."的相對路徑的位置,InPath的值如果不對,會找不到要混淆的dllCD $(TargetDir)
-
便是核心,使用obfuscar.xml配置混淆代碼"$(Obfuscar)" obfuscar.xml
至此,所有的配置都已完成,下面編譯項目,驗證是否混淆
驗證是否混淆
右擊
MS.WebApi
應用程式,選擇釋出,根據上一章節的配置重新釋出編譯一次網站項目:
可以看到publish中即最終釋出的項目檔案,Obfuscator_Output就是根據配置檔案混淆過後的dll
打開Obfuscator_Output:
可以看到裡面有三個dll,即我們在obfuscar.xml中寫的三個需要混淆的dll
下載下傳并打開ILSpy,打開
Release\netcoreapp3.1\publish\MS.Services.dll(混淆前)和Release\netcoreapp3.1\Obfuscator_Output\MS.Services.dll(混淆後)進行對比
- 可以看到代碼已成功混淆(綠色框出來的地方)
- 可以看到代碼部分成員變量已經變成了unicode編碼
将Obfuscator_Output中的三個dll複制并粘貼覆寫到publish中,然後将publish中的網站項目檔案全部拷貝至IIS部署目錄website中(具體請參考上一章節),重新開機IIS,調用接口,網站可以使用混淆後的代碼正常運作(這邊就不再截圖了)