探究——C# .net 代碼混淆/加殼

来源:https://www.cnblogs.com/magicMaQaQ/archive/2023/10/17/17702951.html
-Advertisement-
Play Games

背景: 保密。 過程: 先查詢一下常見的加殼工具: DotFuscator,官方自帶,據說免費版混淆程度不高 Virbox Protector,很好很優秀,但是收費 NET Reactor,可能會被識別為病毒 Obfuscar,開源,可以用dotnet tool或項目構建的方式進行使用 那就先用Ob ...


背景:

  保密。

過程:

  先查詢一下常見的加殼工具:

  • DotFuscator,官方自帶,據說免費版混淆程度不高
  • Virbox Protector,很好很優秀,但是收費
  • NET Reactor,可能會被識別為病毒
  • Obfuscar,開源,可以用dotnet tool或項目構建的方式進行使用

  那就先用Obfuscar試試水。

方式一:nuget安裝(推薦,這種方式可以針對性下載各.net版本對應工具包)

  1、在項目中使用nuget安裝obfuscar

   2、在項目根目錄下找到packages\Obfuscar.2.2.38\tools,將Obfuscar.Console.exe拷到要加密文件的文件夾中

   3、新建一個Obfuscar.xml 文件放到相同目錄下,內容如下:

<?xml version='1.0'?>
<Obfuscator>
  <Var name="InPath" value="." />
  <Var name="OutPath" value=".\Obfuscar" />
  <Var name="KeepPublicApi" value="true" />
  <Var name="HidePrivateApi" value="true" />
  <Var name="HideStrings" value="true" />
  <Var name="UseUnicodeNames" value="true" />
  <Var name="ReuseNames" value="true" />
  <Var name="RenameFields" value="true" />
  <Var name="RegenerateDebugInfo" value="true" />

  <Module file="$(InPath)\Logic.dll" />

</Obfuscator>
View Code

  下圖中,Logic.dll是要加密的類庫:

   4、用命令提示符cmd進入到目錄下(可以在cmd里用cd指令跳轉,也可以直接打開目標文件夾,然後在上方的文件路徑那裡直接替換成cmd後enter)

   5、執行>Obfuscar.Console.exe Obfuscar.xml

   6、在生成的Obfuscar文件夾中可以找到被加殼後的同名Logic.dll

  上述得到的Logic.dll即可被其他項目直接引用,加密後類似:

  方式二:dotnet tool(.net 6)

  1、新建一個Obfuscar.xml 文件放到類庫所在目錄,內容如下:

<?xml version='1.0'?>
<Obfuscator>
  <Var name="InPath" value="." />
  <Var name="OutPath" value=".\Obfuscar" />
  <Var name="KeepPublicApi" value="true" />
  <Var name="HidePrivateApi" value="true" />
  <Var name="HideStrings" value="false" />
  <Var name="UseUnicodeNames" value="true" />
  <Var name="ReuseNames" value="true" />
  <Var name="RenameFields" value="true" />
  <Var name="RegenerateDebugInfo" value="true" />
  <Module file="$(InPath)\PlanManager.dll" />
  <Module file="$(InPath)\MapManager.dll" />

  <AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\6.0.9\" />
  <AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.9\" />
</Obfuscator>
View Code

  其中,Module對應填入想要加殼的類庫,可以添加多行,AssemblySearchPath根據自己.net的路徑進行配置。

  2、在cmd中進入到上述目錄中,執行命令:dotnet tool install --global Obfuscar.GlobalTool

  3、在cmd中執行命令:obfuscar.console Obfuscar.xml

  4、在上述目錄中找到自動生成的Obfuscar文件夾,加殼後的類庫就存放在裡面,拷貝出來即可使用。

PS:.net6的帶WebAPI的exe好像加殼失敗,待測試。

方式三:項目構建

  1、在csproj 項目文件中添加安裝Obfuscar的代碼:

  <ItemGroup>
    <PackageReference Include="Obfuscar" Version="2.2.33">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
View Code

  2、在項目中添加一個Obfuscar.xml 文件,內容跟方式一的類似,再在csproj 項目文件中設置更新

  <ItemGroup>
    <None Update="Obfuscar.xml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
View Code

  3、在csproj 項目文件中設置自動構建

  <Target Name="ObfuscarTask" AfterTargets="AfterBuild">
    <PropertyGroup>
      <ObfuscateCommand>$(Obfuscar) "Obfuscar.xml"</ObfuscateCommand>
    </PropertyGroup>
    <Exec WorkingDirectory="$(OutputPath)" Command="$(ObfuscateCommand)" />
  </Target>
View Code

 PS:這種方式還沒測試過,待測試

結語:

  懶得寫。

本文來自博客園,作者:MaQaQ,轉載請註明原文鏈接:https://www.cnblogs.com/magicMaQaQ/p/17702951.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近這段時間收到了一些讀者的私信,問我某個技術要不要學,還有一些在國外的同學竟然對 Java 圖形化很感興趣,還想找這方面的工作。 比較忙,一直沒抽出時間去回答這類問題,剛好看到我關註的一位大佬回答過,這裡分享一下,希望對你能有幫助。 下麵是正文。 原文鏈接:https://www.zhihu.co ...
  • 網路上的文件傳輸功能也是很有必要實現一下的,網路傳輸文件的過程通常分為客戶端和伺服器端兩部分。客戶端可以選擇上傳或下載文件,將文件分塊並逐塊發送到伺服器,或者從伺服器分塊地接收文件。伺服器端接收來自客戶端的請求,根據請求類型執行對應的操作,並根據發送的文件名或其他標識來確定要傳輸的文件。在實現文件傳... ...
  • 0 概述 通常聲明一個數組時需要使用一個常量來指定數組的長度,數組所占用的記憶體是在編譯時就被分配。這種方式的聲明的優點是簡單,但是存在以下幾個缺點: 使用的元素數量超過數組聲明的長度,當前數組就不能存儲相應的數據; 如果數組的長度被聲明很大,實際使用的元素又比較少會導致記憶體空間的浪費; 程式開發中會 ...
  • 正文 上一篇文章我們講解了事務的Advisor是如何註冊進Spring容器的,也講解了Spring是如何將有配置事務的類配置上事務的,實際上也就是用了AOP那一套,也講解了Advisor,pointcut驗證流程,至此,事務的初始化工作都已經完成了,在之後的調用過程,如果代理類的方法被調用,都會調用 ...
  • 如果多個客戶端同時請求修改同一個kubernetes資源,那麼很有可能收到apiserver返回失敗,本篇就來分析並復現這個問題,然後再實戰client-go官方的解決手段 ...
  • 你知道HTTP中的壓縮演算法是如何工作的嗎, 他們的壓縮比又是多少, 能起到多少作用嗎? 他的限制又是多少嗎? 他存在的意義給我們帶來了什麼? ...
  • 此博客是C#學習筆記中的進階部分,設計C#語言中的高級知識,介紹了List與ArrayList、Stack和Queue以及Hashtable等數據結構, 泛型,泛型類型數據結構,以及糾纏不清的委托與事件。還涉及到不常見但常用的一些知識小點,如匿名函數,Lambda表達式,協變和逆變,多線程, 反射和... ...
  • 資料庫設計在現代應用程式中不僅要滿足數據完整性和性能需求,還需要考慮安全性。本文將討論如何同時提高資料庫的安全性和數據檢索性能,以滿足現代應用的需求。 數據安全性的挑戰 整數 ID 的安全性問題 在傳統資料庫設計中,使用整數 ID 作為主鍵可能存在安全風險,因為它們很容易被猜測。這可能導致未經授權的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...