.NET混淆器 Dotfuscator保护机制——重命名

2023-11-03

Dotfuscator是一个.NET的Obfuscator。它提供企业级的应用程序保护,大大降低了盗版、知识产权盗窃和篡改的风险。Dotfuscator的分层混淆、加密、水印、自动失效、防调试、防篡改、报警和防御技术,为世界各地成千上万的应用程序提供保护。

Dotfuscator提供了一种应用程序保护的多层方法。这些层中的每一层都提供了一个重要的整体保护策略。如果一层受到损害,其他层继续提供有效保护,使攻击者更难以实现其目标。并且不仅有多个层,而且每个层都具有比其他混淆产品使用的简单技术更强大的高级功能。

从本文开始我们一起了解Dotfuscator如何对应用程序进行多层保护,层层递进,大致可分为:

  • 第一层保护——Obfuscation转换:它对编译的代码进行操作,使逆向工程变得困难或不可能。
  • 第二层保护——保护程序运行时发生的检查:当程序检测到攻击者试图篡改或反向工程时,它可以使用自定义逻辑进行自我防御。
  • 其余加强保护——包括切除和水印。
  • Dotfuscator提供某些功能帮您构建、部署和调试混淆的程序集

下载Dotfuscator最新试用版


第一层保护:Obfuscation转换

重命名

Dotfuscator能够将所有类、方法和字段重命名为短名称。这使得反编译输出更加难以理解,并且使得生成的可执行文件的大小更小。

大多数商业混淆器使用一种重命名技术,该技术应用的普通标识符可以短至单个字符。当obfuscator处理代码时,它选择下一个可用的平凡标识符进行替换。这个看似简单的重命名方案有一个关键属性:它是不可逆转的。在保留程序逻辑的同时,这些名称变得毫无意义,阻碍了所有理解代码的尝试。

▲过载感应

Dotfuscator使用了一种更深层次的混淆技术,它是为Dotfuscator开发的,并通过先发制人的解决方案获得了专利,称为过载感应™。重载归纳不是为每个旧名称替换一个新名称,而是将尽可能多的方法重命名为相同的名称。下面的简单例子说明了过载感应技术的威力:

混淆之前的原始源代码:

private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}

重载感应混淆后的反向工程源代码:

private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

实例表明,代码被混淆和压缩,这是重命名的一个积极的副作用。通过保存字符串堆条目,重命名还可以节省空间。这种方法有着明显的优点在于:

  • 重命名使反编译输出难以理解。在目标源语言中重命名不可打印字符或非法名称是无效的,因为反编译器可以重命名这些标识符。考虑到重载诱导可能使三个方法名中的一个成为“a()”,理解反编译输出是困难的。
  • 除了存在于所有重命名系统中的限制外,超载诱导没有其他限制。
  • 由于过载诱导往往更频繁地使用相同的字母,所以它进入较长名称的速度更慢(例如aa、aaa等),这也节省了空间。

Overload-Induction的专利算法确定所有可能的重命名冲突,只有在安全的情况下才会引发方法重载。这个过程可以证明是不可逆的。换句话说,重构原始方法名称关系是不可能的(即使再次运行重载诱导)。

▲增强的过载感应

Dotfuscator还通过允许将方法的返回类型或字段的类型用作确定方法或字段唯一性的标准,从而增强了超载诱导™。该特性允许在方法和字段重命名中最多增加15%的冗余。此外,由于在源语言(包括c#和Visual Basic)中通常不允许重载方法返回类型或字段类型,这进一步阻碍了反编译器。

▲限制

通常不会对包含任何XAML代码的程序集执行过载诱导,因为运行时确定XAML和代码如何链接的方式不同。因此,Use Enhanced Overload Induction选项不会更改此类程序集的任何内容。当使用任何类型的反射(包括XAML)、指定入口点的配置文件、其他应用程序调用的库等时,重命名可能会出现问题。在重命名后对应用程序进行全面测试,以确保不存在此类问题,这一点非常重要。

▲具体排除

假定库模式已关闭,Dotfuscator将尝试重命名它所能重命名的所有内容。反射的某些使用可能导致Dotfuscator在重命名时不更新对特定实体的所有引用。在下面的例子中,我们排除了四个类及其字段:

 

renaming_specific_exclusions.png

 

我们的应用程序通过反射查找这些类型和成员的名称来引用它们。如果要重命名它们,应用程序将无法在运行时找到它们。因此,我们将它们排除在通过这些复选框重命名之外。

▲自定义排除规则

有时候,您可能需要为特定的编码约定做出许多特定的排除。即使这样,当开发人员添加更多遵循该约定的代码时,他们也必须记住对新代码进行另一个特定的排除。

对此的解决方案是自定义排除规则。使用前面的示例,假设我们计算出所有名称以“Dungeon”结尾的类型,以及这些类型中的特定字段类型,都需要排除在重命名之外。与其创建一堆特定的排除,我们可以制定一个自定义规则:

 

renaming_custom_exclusion_rule.png

 

我们使用Add Type按钮添加了规则的根节点,并将其命名为.*Dungeon,并将正则表达式(regex)选项设置为true,以指示应该将该名称视为正则表达式。因此,节点将匹配名称以“Dungeon”结尾的类型。因为我们将Exclude类型(excludetype)设置为true,所以任何匹配此名称的类型都将被排除在重命名之外。如果我们将该选项设置为false,那么匹配的类型将不会被排除在重命名之外——只包含由其子节点指定的成员。

然后,通过右键单击根节点并选择Add字段,我们添加了一个子节点。我们将这个节点命名为.*,并再次指出应该将其视为正则表达式。我们将规则限制为只覆盖具有公共访问修饰符的字段(通过设置+public),以及签名为string[]的字段,因为在我们的场景中这两个字段都是必需的。

配置好规则后,您可以选择一个节点并单击Preview按钮,Dotfuscator将在左侧的树视图中突出显示与定制规则匹配的条目。在我们的示例中,我们预览子节点,因此突出显示匹配条件的字段。

▲内置规则

内置规则是自定义的排除规则,非常普遍有用;我们默认包含它们,这样用户就不必重新实现它们。

 

renaming_built_in_rules.png

 

例如,System.Web方法。服务属性转换为以下自定义规则:

Exclude all methods that are decorated with attributes from the System.Web.services namespace.

▲选项

options选项卡上有许多重命名选项,包括应该使用什么重命名方案、是否引入显式覆盖以及其他许多选项。

 

—  持续更新中


如果你有任何问题或意见,可在下方评论区留言,点击资源列表查看更多教程资源~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET混淆器 Dotfuscator保护机制——重命名 的相关文章

  • java代码混淆

    什么是代码混淆 Java 是一种跨平台的 解释型语言 xff0c Java 源代码编译成中间 字节码 存储于 class 文件中 由于跨平台的需要 xff0c Java 字节码中包括了很多源代码信息 xff0c 如变量名 方法名 xff0c
  • 使用proguard进行javaweb代码混淆

    背景 xff1a 公司需要将软件打包出售 xff0c 此时需要进行代码混淆和一些加密要求 调研 xff1a 目前此类实现包含软件和硬件实现 xff1b 硬件实现是使用类似加密狗usb工具进行防护 xff0c 应用系统通过与加密狗交互 xff
  • 如何使用Java以编程方式在 Excel 中创建图表

    图表和图形用于汇总和直观地表示数据 它们提供了可进一步用于做出决策的洞察力 图表被认为是 Excel 电子表格的一个组成部分 广泛用于各种应用程序 在本文中 将学习如何根据 Excel 工作表中提供的数据以编程方式生成图表 特别是 本文介绍
  • 代码保护软件VMProtect内置脚本的使用——Mach-O文件

    VMProtect是一种很可靠的工具 可以保护应用程序代码免受分析和破解 但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下 才能实现最好的效果 本文继续对VMProtect中强大的内置脚本的使用进行介绍 希望对您有
  • 混淆技术研究-OLLVM混淆-控制流平坦化(FLA) - WIP

    简介 控制流平坦化通过将程序中的条件分支语句转化为等价的平铺控制流来实现 通常 这包括将原始的分支语句 如if语句 switch语句 中的每个分支提取出来 并将它们放置在一系列连续的基本块中 然后使用一个状态变量或标志来选择要执行的基本块
  • JAVA代码保护工具DashO Pro v10.0.0 Beta 2重磅上线!更新DashO Gradle插件!

    DashO是一个Java和Android的混用程序 它提供企业级应用的加固和屏蔽 大大降低了知识产权盗窃 数据盗窃 盗版和篡改的风险 分层混淆 加密 水印 自动失效 反调试 反篡改 反仿真器 反挂钩 反根设备解决方案 为世界各地的应用程序提
  • 代码混淆不一定要花大价钱,Code Virtualizer也能轻松搞定!

    任何创建创新性应用程序 DLL或设备驱动程序的开发人员都希望将代码尽可能机密 以避免第三方公司 开发人员研究应用程序内的代码并为自己的利益而窃取代码 一些开发人员使用外部保护系统来打包应用程序并保护其免受攻击者的侵害 但是大多数时候 这些保
  • .NET混淆器 Dotfuscator保护机制——重命名

    Dotfuscator是一个 NET的Obfuscator 它提供企业级的应用程序保护 大大降低了盗版 知识产权盗窃和篡改的风险 Dotfuscator的分层混淆 加密 水印 自动失效 防调试 防篡改 报警和防御技术 为世界各地成千上万的应
  • java代码混淆工具Jocky的介绍

    最近给的任务是代码混淆 以前没有接触过 所以只能从最基础的东西开始了解 主要应用的工具有jocky progard dex2jar apktool jd GUI 今天简单介绍一下jocky的作用 并附上其他参考教程链接 jocky是一款ja
  • .NET 5.0发布,你的代码保护工具还够用吗?

    NET是程序员比较钟爱的一款编程工具 但它有一个致命的缺点 编译好的程序集很容易反编译成源代码 一旦被反编译 软件开发者的辛苦劳动将付诸东流 选择一款合格的 NET保护工具是非常重要的 如今 NET 5 0已经发布 你是如何评价的呢 无论怎
  • 关于SecureEngineConfig.ini有哪些用途?且看软件保护系统Themida常见问题集锦

    Themida是先进的Windows软件保护系统 它被用于满足软件开发人员对于所开发应用程序安全保护的需求 使其远离被先进的逆向工程和软件破解的危险 通过Themida 我们集中在软件保护器所具有的主要弱点 从而提供了解决这些问题的完整解决
  • vue 项目代码混淆配置(自定义插件适用)带配置项注释

    文章目录 vue 项目代码混淆配置 自定义插件适用 带配置项注释 一 概要 二 混淆步骤 1 引入混淆插件 2 添加混淆配置 3 执行代码混淆 vue 项目代码混淆配置 自定义插件适用 带配置项注释 一 概要 本文章适用 vue cli3
  • 软件加密系统Themida常见问题集锦—Themida是否支持命令行保护?

    Themida是先进的Windows软件保护系统 它被用于满足软件开发人员对于所开发应用程序安全保护的需求 使其远离被先进的逆向工程和软件破解的危险 通过下载Themida 我们集中在软件保护器所具有的主要弱点 从而提供了解决这些问题的完整
  • JAVA代码保护工具DashO Pro v10.0.0 Beta 2重磅上线!更新DashO Gradle插件!

    DashO是一个Java和Android的混用程序 它提供企业级应用的加固和屏蔽 大大降低了知识产权盗窃 数据盗窃 盗版和篡改的风险 分层混淆 加密 水印 自动失效 反调试 反篡改 反仿真器 反挂钩 反根设备解决方案 为世界各地的应用程序提
  • 如何追踪泄漏者信息?软件保护工具VMProtect独有水印快速锁定目标!

    VMProtect是一种很可靠的工具 可以保护应用程序代码免受分析和破解 但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下 才能实现最好的效果 VMProtect提供了一种独特的功能 可以将有关受保护文件所有者的隐
  • .NET混淆器 Dotfuscator v4.43.1新版发布!允许某些外部程序集输入!

    Dotfuscator是一个 NET的Obfuscator 它提供企业级的应用程序保护 大大降低了盗版 知识产权盗窃和篡改的风险 Dotfuscator的分层混淆 加密 水印 自动失效 防调试 防篡改 报警和防御技术 为世界各地成千上万的应
  • 篡改检查是什么?.NET混淆器Dotfuscator如何实现应用程序的保护?

    Dotfuscator是一个 NET的Obfuscator 它提供企业级的应用程序保护 大大降低了盗版 知识产权盗窃和篡改的风险 Dotfuscator的分层混淆 加密 水印 自动失效 防调试 防篡改 报警和防御技术 为世界各地成千上万的应
  • 代码混淆后可能出现的问题

    1 ClassNotFoundException NoSuchMethodError 原因 这种异常会在好多情况下出现 比如 本地代码通过反射调用其他的类 但是经过了混淆之后 就会出现如上异常 调用了JNI之后 C或者C 和java代码进行
  • 你知道DashO Pro/Dotfuscator有效保护应用的秘诀吗?看了这篇你就明白了

    Gartner在其2019年7月应用内保护应用内保护市场指南中将应用内保护称为 关键 该指南的摘要建议安全和风险管理负责人 在保护其应用程序客户端时应格外小心 以避免 安全性失败 这就提出了一个问题 什么构成 应有的注意 尽管术语和术语可能
  • iOS代码混淆初探

    iOS代码混淆初探 在没有对应用的代码做过特殊处理的情况下 一般应用的代码中的类名和方法都是明文的 在逆向分析中 通过class dump获取MachO可执行文件中的所有类 定义的方法和属性 就能很快的从名字入手猜到这个方法是做什么用的 所

随机推荐

  • Android.bp文件简介

    Android bp Android bp的出现就是为了替换Android mk文件 bp跟mk文件不同 它是纯粹的配置 没有分支 循环等流程控制 不能做算数逻辑运算 如果需要控制逻辑 那么只能通过Go语言编写 语法 根据设计 Androi
  • 为什么opencv用GPU实现比用CPU实现的慢?

    问题 打算通过OpenCV的GPU模块优化现有代码的运行效率 怀抱着美好愿望开始了代码的改写工作 改写的过程并不顺利 遇到了不少问题 例如 gpu模块提供的接口非常坑爹 相当一部分不支持浮点类型 像histogram integral这类常
  • SpringCloud实践(四) 通过Feign组件实现消费者

    在前面使用了RestTemplate和Ribbon来实现了服务消费者 Feign 是一个集成了Ribbon和Eureka的组件 通过声明的方式 就可以实现Http客户端 简化了http客户端 服务消费者 对于Feign 我们只要记得两个特点
  • Aspose工具实现word和ppt转pdf功能及遇到的一些问题

    Aspose工具包从word和ppt转到pdf的实现过程 直接放项目地址 说一下实现过程中遇到的坑 直接放项目地址 https github com lichangliu1098 File2Pdf 说一下实现过程中遇到的坑 jar包的引入
  • Zabbix部署详细步骤

    以下是在Ubuntu上安装Zabbix的详细步骤 1 更新系统 使用以下命令更新Ubuntu系统 sudo apt get update sudo apt get upgrade 2 安装依赖项 在安装Zabbix之前 需要先安装一些依赖项
  • 教你快速上手Flex弹性盒布局(容器属性)

    目录 简介 一 Flex布局语法 1 1 display flex 二 Flex属性 三 容器属性 3 1 flex direction 3 2 flex direction row 3 3 flex direction row rever
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为 2023A卷和2023B卷 你收
  • Tachyon内存文件系统

    Tachyon内存文件系统 Tachyon是以内存为中心的分布式文件系统 拥有高性能和容错能力 能够为集群框架 如Spark MapReduce 提供可靠的内存级速度的文件共享服务 从软件栈的层次来看 Tachyon是位于现有大数据计算框架
  • 使用GitHub的一些小知识合集

    文章目录 一 FastGithub 1 稳定可靠的github加速神器 FastGithub 2 github加速神器 FastGithub 二 README md添加图片 1 怎么给README md添加图片 两种方法 图文教程 2 在R
  • OpenCV代码提取:morphologyEx函数的实现

    Morphological Operations A set of operations that process images based on shapes Morphological operations apply a struct
  • keil软件安装与破解

    目录 目录 下载 安装 破解 下载 学习51单片机必要的开发工具是 KEIL C51 下载密码dsfs 安装 按照一般安装软件顺序即可 此处随便填写 破解 注意 需以管理员身份 运行 按照如下图片步骤 弹出如下对话框 再打开软件按如下操作
  • 解决pycharm错误:Error updating package list: connect timed out解决

    方法是在 Manage Repositories 中 修改数据来源 默认的是 https pypi python org simple 我们可将其替换为如下的几个数据来源 这些都是国内的pip镜像 清华 https pypi tuna ts
  • Vue3 emits选项将Emit派发事件可以对参数进行验证。

    Vue官方建议我们在组件中所有的emit事件都能在组件的emits选项中声明 emits参数有俩种形式对象和数组 对象里面可以配置带校验emit事件 为null的时候代表不校验 校验的时候 会把emit事件的参数传到校验函数的参数里面 当校
  • Python第三方库之MedPy

    文章目录 1 MedPy简介 2 MedPy安装 3 MedPy常用函数 3 1 medpy io load image 3 2 medpy metric binary dc result reference 3 3 medpy metri
  • < Linux >:环境变量

    目录 环境变量 常见的环境变量 基本概念 查看环境变量内容的方法 测试环境变量PATH 与环境变量相关的命令 Linux操作系统下C C 程序代码中获取环境变量的方式 环境变量的组织方式 环境变量通常具有全局属性 环境变量 问题 注意 可执
  • JavaScript基础语言

    1 JavaScript采用Unicode字符集编写的 区分大小写 但HTML不区分大小写 与JavaScript同名的标签和属性 可以大写也可以小写 2 JavaScript存在两种形式的注释 行尾注释 和 多行注释 3 标识符就是一个名
  • 光束平差法(Bundle Adjust)

    光束平差法 代价函数 代价函数求解 Levenberg Marquardt方法 代码实现 流程图 光束平差法 采用光束平差法对射影空间下的多个相机运动矩阵及非编码元三维结构进行优化 光束平差法一般在各种重建算法的最后一步使用 这种优化方法的
  • 虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)

    开个新坑详细分析一下虚幻官方发布的 CropOut 文章会同步发布到我在知乎 CSDN的专栏里 文章目录 概要 Create Island 几何体生成部分 随机种子 Step 1 Step 2 Step 3 Step 4 Step 5 St
  • Python—爬虫之BeautifulSoup模块(解析—提取数据)

    Python 爬虫之BeautifulSoup模块 解析 提取数据 安装BeautifulSoup模块 解析数据 提取数据 find 提取出满足条件的第一个数据 find all 提取出满足条件所有数据 Tag 对象的属性和方法 安装Bea
  • .NET混淆器 Dotfuscator保护机制——重命名

    Dotfuscator是一个 NET的Obfuscator 它提供企业级的应用程序保护 大大降低了盗版 知识产权盗窃和篡改的风险 Dotfuscator的分层混淆 加密 水印 自动失效 防调试 防篡改 报警和防御技术 为世界各地成千上万的应