Obfuscar:一款针对.NET程序的开源代码混淆工具

news/2024/12/18 20:43:24/文章来源:https://www.cnblogs.com/o-O-oO/p/18615820

关于Obfuscar

Obfuscar是一款针对.NET程序的开源代码混淆工具,该工具支持使用大量重载将 .NET 程序集中的元数据(包括方法、属性、事件、字段、类型和命名空间的名称)重命名为最小集合,在大多数情况下仅通过签名即可区分。

例如,如果某个类仅包含接受不同参数的方法,则可以将它们全部重命名为“A”。如果向该类添加另一个接受与现有方法相同参数的方法,则可以将其命名为“a”。简而言之,该工具可以让反编译后的代码更加难以理解。

基本上,Obfuscar 会打乱一组程序集中的元数据。它会根据签名和类型信息将所有内容重命名为可用于识别它们的最小名称集。由于这些新名称比旧名称短,因此它还会大幅缩小可执行文件的大小。

功能介绍

1、简单配置:隐藏所有私密内容,同时保持所有公开内容。您可以通过默认设置轻松实现这一点。

2、名称混淆:隐藏您不想公开的类/方法/属性/事件名称。这是不可逆的。

3、字符串压缩:字符串内容可以被压缩,这样终端用户就不容易知道它们。但是,这可以通过某些工具进行逆转。

工具要求

Visual Studio

工具安装

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/obfuscar/obfuscar.git

然后在Visual Studio中打开Obfuscar.sln并编译即可。

工具使用

工具配置

<Module file="$(InPath)\AssemblyX.exe"><!-- skip a namespace --><SkipNamespace name="Company.PublicBits" /><!-- to skip a namespace recursively, just put * on the end --><SkipNamespace name="Company.PublicBits*" /><!-- skip field by name --><SkipField type="Full.Namespace.And.TypeName"attrib="public" name="Fieldname" /><!-- skip field by regex --><SkipField type="Full.Namespace.And.TypeName"attrib="public" rx="Pub.*" /><!-- skip type...will still obfuscate its methods --><SkipType name="Full.Namespace.And.TypeName2" /><!-- skip type...will skip its methods next --><SkipType name="Full.Namespace.And.TypeName3" /><!-- skip TypeName3's public methods --><SkipMethod type="Full.Namespace.And.TypeName3"attrib="public" rx=".*" /><!-- skip TypeName3's protected methods --><SkipMethod type="Full.Namespace.And.TypeName3"attrib="family" rx=".*" /><!-- skip type and its methods --><SkipType name="Full.Namespace.And.TypeName4" skipMethods="true" /><!-- skip type and its fields --><SkipType name="Full.Namespace.And.TypeName4" skipFields="true" /><!-- skip type and its properties --><SkipType name="Full.Namespace.And.TypeName4" skipProperties="true" /><!-- skip type and its events --><SkipType name="Full.Namespace.And.TypeName4" skipEvents="true" /><!-- skip attributes can be combined (this will skip the methods and fields) --><SkipType name="Full.Namespace.And.TypeName4" skipMethods="true" skipFields="true" /><!-- skip the hiding of strings in this type's methods --><SkipType name="Full.Namespace.And.TypeName4" skipStringHiding="true" /><!-- skip a property in TypeName5 by name --><SkipProperty type="Full.Namespace.And.TypeName5"name="Property2" /><!-- skip a property in TypeName5 by regex --><SkipProperty type="Full.Namespace.And.TypeName5"attrib="public" rx="Something\d" /><!-- skip an event in TypeName5 by name --><SkipProperty type="Full.Namespace.And.TypeName5"name="Event2" /><!-- skip an event in TypeName5 by regex --><SkipProperty type="Full.Namespace.And.TypeName5"rx="Any.*" /><!-- avoid the hiding of strings in TypeName6 on all methods --><SkipStringHiding type="Full.Namespace.And.TypeName6" name="*" /></Module>

基础使用

基本上,Obfuscar 会打乱一组程序集中的元数据。它会根据签名和类型信息将所有内容重命名为可用于识别它们的最小名称集。由于这些新名称比旧名称短,因此它还会显著缩小可执行文件的大小。

该代码可以通过ILSpy反编译为:

public ExampleUI(){this.InitializeComponent();this.displayText.Text = new ClassX("Some Text").get_DisplayText();}

混淆后,代码可以通过ILSpy反编译为:

public A(){this.A();this.a.Text = new A.A("Some Text").A();}

工具运行演示

项目地址

https://github.com/obfuscar/obfuscar

原创 Alpha_h4ck FreeBuf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855015.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批量数据传入数据库方法方案

前端处理好的数据,不是1笔2笔的问题,而是每次几笔或是大批量数据传入数据库。实际上,还是讲求效率与性能。在Insus.NET的博客中,找到几篇以前的随笔,1 使用SqlBulkCopy导入数据至MS SQL Server https://www.cnblogs.com/insus/p/3779879.html 2 ASP.NET MVC一次删除多…

玩家结构体和枚举

玩家结构体包含了玩家类型,玩家位置,玩家初始化构造函数还有画自己的函数方法玩家结构体 enum E_PlayerType//玩家类型的枚举 {Player,Robot, } struct Player {public E_PlayerType type;//用地图上的索引代替坐标public mapIndex;public Player(int index,E_PlayerType typ…

Windows Server 2019 配置PHP环境(图文教程)

操作系统:Windows Server 2019运行模式:IIS10 + fastcgi + PHP(安装IIS的时候选择上CGI)软件版本:MySQL 5.7.37 解压版 / PHP 7.4.29 / PHP Manager 1.5.0 / phpMyAdmin 5.1.31、MySQL 5.7.37 解压版安装: 为什么我会选择解压版而不是安装版?一是因为安装版没有64位版本…

微服务的终极 Golang 框架:GoFr

微服务的终极 Golang 框架:GoFr 原创 南丞 PFinalClub2024年12月18日 13:18 上海PFinalClub 一个有信念者所开发出的力量,大于99个只有兴趣者。 113篇原创内容公众号微服务的终极 Golang 框架:GoFr 前言 Go 语言因其出色的并发处理能力和简洁的语法,成为开发微服务的理想选…

R机器学习:朴素贝叶斯算法的理解与实操

最近又看了很多贝叶斯算法的一些文章,好多的文章对这个算法解释起来会放一大堆公式,对代数不好的人来说真的很头疼。本文尝试着用大白话写写这个算法,再做个例子,帮助大家理解和运用。Naive Bayes is a probabilistic machine learning algorithm based on the Bayes Theor…

[Linux]线程

线程 页表 每个进程都有一个虚拟地址空间,虚拟地址通过页表的映射找到对应的物理地址。那页表是如何完成虚拟地址到物理地址的映射的呢?其实一个程序在磁盘上的时候就以4KB为单位被划分成块,每一块称为页帧;而物理内存同样是以4KB为单位被划分,每一块称为页框。所以程序都…

Java框架 —— SpringMVC

MVC 分层MVC:Model View Controller(模型-视图-控制器)模型(Model):处理数据逻辑的部分;在web应用中,他通常包含与数据库交互的代码,负责数据的存储、检索和更新视图(View):将数据渲染为用户界面,视图只展示页面,不包含业务逻辑控制器(Controller):模型和视图…

2024-12-18 17 55 记录 Cambly trip`s summary and wher 1607b517085581159d14fe7750337be7

2024-12-18 17:55 记录 Cambly trip`s summary and where is the next ?https://tingwu.aliyun.com/doc/transcripts/g2y8qevxaayxnbeo?sl=1# 《2024-12-18 17:55 记录 Cambly trip`s summary and where is the next ?》1. 全文摘要 对话讲述了一个人通过使用美好的旅行来…

实验六 模板类、文件I/O和异常处理

1、实验任务一 Complex.hpp#pragma once#include <iostream> #include <stdexcept>// 声明 //////////////////////////////////////////////////// // 复数模板类声明 template<typename T> class Complex { public:Complex(T r = 0, T i = 0);Complex(cons…

免费设计Logo的新神器Slea.ai

使用Slea.ai,你可以在几分钟内设计出专业、高质量的Logo,支持多种场景应用,免费下载,实现自定义设计。品牌打造从未如此轻松!作为一名注重品牌形象的创作者或企业主,你是否苦于设计一款专业又独特的Logo?今天我要向大家推荐一个超级实用的网站——Slea.ai,它是一款免费的…