首页 > 编程语言 >探究——C# .net 代码混淆/加壳

探究——C# .net 代码混淆/加壳

时间:2023-10-17 11:55:42浏览次数:30  
标签:xml Code C# cmd 加壳 net Obfuscar

背景:

  保密。

过程:

  先查询一下常见的加壳工具:

  • 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:这种方式还没测试过,待测试

结语:

  懒得写。

标签:xml,Code,C#,cmd,加壳,net,Obfuscar
From: https://www.cnblogs.com/magicMaQaQ/p/17702951.html

相关文章

  • CCS基础
    rts2800_fpu32_fast_supplement.lib与rts2800_fpu32.lib的对比  TMS320F28335的浮点库有rts2800_fpu32_fast_supplement.lib与rts2800_fpu32.librts2800_fpu32_fast_supplement.lib是rts2800_fpu32.lib的一个函数子集,它是对rts2800_fpu32.lib中一些函数进行重写,提高运算速度,......
  • select 里列运算 求年薪
    表的列是支持运算符的 起别名时需要加单引号 #获取年薪descemp;selectENAME,SAL*12as'年薪'fromemp; ......
  • 【Java 并发编程】synchronized
    synchronized关键字synchronized是Java中的一个关键字,翻译成中文是同步的意思,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。使用方法修饰实例方法给当前对象实例加锁,进入同步代码前要获得当前对象实例的锁......
  • CF1213 合集
    CF1213AChipsMoving考虑是一道非常简单的入门题就是奇数的个数和偶数的个数取\(\min\)即可code#include<bits/stdc++.h>usingnamespacestd;constintNN=108;intn;inta,cnt[2];intmain(){ scanf("%d",&n); for(inti=1;i<=n;++i){ scanf("......
  • 【Java 并发编程】ReentrantLock
    目录ReentrantLock公平锁和非公平锁synchronized和ReentrantLock有什么区别?ReentrantLockReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等......
  • Qt ObjectARX 2022
    QT中的ARX配置LoadQtDlls.pro1TARGET=QTARXLoadQtDlls2#thesdkincludepath3INCLUDEPATH+="D:\ObjectARX2022\inc"4INCLUDEPATH+="D:\ObjectARX2022\inc-x64"56#rxapi.lib;acdb21.lib;acge21.lib;acad.lib;ac1st21.li......
  • Revit 二次开发 C# 添加配置 Add-In Manager
    第一步:安装SDK,在SDK目录下获取Add-InManager插件第二步:将Add-InManager文件夹整个拷贝到C:\ProgramData\Autodesk\Revit\Addins\2022目录下;(注意:不是Revit安装目录,而是Revit的ProgramData目录,默认:C:\ProgramData\Autodesk\Revit\Addins\2022)第三步:将Add-InManager目录下Auto......
  • 【Java 并发编程】ThreadLocal
    目录ThreadLocalThreadLocal实现线程隔离的原理ThreadLocal内存泄漏场景ThreadLocalThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类;当使用ThreadLocal来维护变量时,ThreadLocal会为每个线程创建单独的变量副本,避免因多线程操作共享变量而导致的数据不......
  • MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸
    编辑:llMBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸型号:MBR20100CT品牌:ASEMI芯片个数:2封装:TO-220恢复时间:>50ns工作温度:-65°C~175°C浪涌电流:150A正向电流:10A反向耐压:100V正向压降:0.8V引脚数量:3MBR20100CT特性:ASEMI品牌MBR20100CT是采用工艺芯片,该芯片具有良......
  • WPF控件ItemsControl、ListBox、ListView、DataGrid、TreeView、TabControl用法及区别
    1.ItemsControltemsControl是WPF中最基本的控件之一,用于显示一个数据项集合。它允许按照自定义方式呈现任何类型的对象,可以在其中使用不同的布局和面板来展示数据。ItemsControl非常灵活,可以满足各种需求。以下是一个简单的ItemsControl的XAML示例,它使用StackPanel作为布局容器,......