NET反混淆工具-de4dot

一个针对net文件的反混淆工具,一个广受认可的开源工具。

目录:

一、工具的下载和配置

二、工具的基本命令和使用


一、工具的下载和配置

开源工具源地址:https://github.com/de4dot/de4dot

下载源代码后,需要自行编译,其开发语言是C#,开发分为两个版本:一个是基于.NET Core的(de4dot.netcore.sln),一个是基于.NET Framework的(de4dot.netframework.sln),可以依据目标程序选择想要执行编译的版本。

dotnet build de4dot.netcore.slndotnet build de4dot.netcore.sln -c Release  //release版本

也可以使用VS studio编译。

需要注意的是如果使用.net core版本,需要安装netcoreapp3.1和netcoreapp2.1;如果使用.net framework版本,需要安装net 35和net45。(VS studio2019以下版本默认有net45)

如果不想自己编译,有编译好的也可以直接用:

https://github.com/kant2002/de4dot/tree/v3.2.0

二、工具的基本命令和使用

1.工具支持的混淆类型

  • Agile.NET (aka CliSecure)

  • Babel.NET

  • CodeFort

  • CodeVeil

  • CodeWall

  • CryptoObfuscator

  • DeepSea Obfuscator

  • Dotfuscator

  • .NET Reactor

  • Eazfuscator.NET

  • Goliath.NET

  • ILProtector

  • MaxtoCode

  • MPRESS

  • Rummage

  • Skater.NET

  • SmartAssembly

  • Spices.Net

  • Xenocode

2.基本使用

直接把目标程序用de4dot.exe打开即可,也可以命令行

de4dot.exe <目标程序地址>

运行后文件在程序集的目录下生成一个带-cleaned的新程序集。

也可以通过 -f (指定目标net文件夹)和-o (指定输出路径)参数,指定输出路径

de4dot.exe file1 -f <目标程序文件夹地址> -o <输出文件夹>

或者是反混淆大型的NET项目,需要反混淆整个项目文件可以使用如下命令

1 de4dot -r <目标程序文件地址> -ru -ro <输出程序文件地址>

其中,-r:指定输入文件夹,包括子文件夹;-ru : 跳过不支持的混淆工具混淆过的文件;-ro : 指定输出文件夹。

这个工具还可以查看目标程序使用的混淆工具是什么,从而对症下药,寻找更有针对性的工具

de4dot.exe -f "D:\a\xxx.exe" -d

其中,-d就是扫描混淆工具,如果使用-r替换-f则输出整个文件的所有net混淆工具,实现遍历扫描

如果de4dot反混淆失败,而目标函数的混淆工具de4dot又支持,那么可能是de4dot反混淆识别出错导致,可以使用如下命令指定反混淆工具。

1 de4dot <目标程序地址> -p sa

其中sa是一个混淆工具的简称,具体工具和简称,可以在help界面查看,作者也罗列如下:

类型

参数

描述

默认值

Agile.NET(an)--an-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--an-methods

解密方法

True

--an-rsrc

解密资源

True

--an-stack

移除所有 StackFrameHelper 代码

True

--an-vm

还原 VM 代码

True

--an-initlocals

在方法头中设置 initlocals

True

Babel .NET(bl)--bl-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--bl-inline

内联短方法

True

--bl-remove-inlined

移除内联方法

True

--bl-methods

解密方法

True

--bl-rsrc

解密资源

True

--bl-consts

解密常量和数组

True

--bl-embedded

转储嵌入程序集

True

CodeFort(cf)--cf-name

有效名称正则模式

!^[a-zA-Z]{1,3}$&!^[_<>{}$.

-]$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.-]*$

--cf-embedded

转储嵌入程序集

True

CodeVeil(cv)--cv-name

有效名称正则模式

!^[A-Za-z]{1,2}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

CodeWall(cw)--cw-name

有效名称正则模式

!^[0-9A-F]{32}$&!^[_<>{}$.

-]$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.-]*$

--cw-embedded

转储嵌入程序集

True

--cw-decrypt-main

解密主嵌入程序集

True

Confuser(cr)--cr-name

有效名称正则模式

^[a-zA-Z_<{$][a-zA-Z_0-9<>{}$.

-]*$`

--cr-antidb

移除反调试代码

True

--cr-antidump

移除反转储代码

True

--cr-decrypt-main

解密主嵌入程序集

True

Crypto Obfuscator(co)--co-name

有效名称正则模式

!^(get_|set_|add_|remove_)?[A-Z]{1,3}(?:

\d+)?$&!^(get_|set_|add_|remove_)?c[0-9a-f]{32}(?:\d+)?$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.-]*$`

--co-tamper

移除篡改保护代码

True

--co-consts

解密常量

True

--co-inline

内联短方法

True

--co-ldnull

还原 ldnull 指令

True

DeepSea(ds)--ds-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--ds-inline

内联短方法

True

--ds-remove-inlined

移除内联方法

True

--ds-rsrc

解密资源

True

--ds-embedded

转储嵌入程序集

True

--ds-fields

还原字段

True

--ds-keys

重命名资源键

True

--ds-casts

反混淆类型转换

True

Dotfuscator(df)--df-name

有效名称正则模式

!^(?:eval_)?[a-z][a-z0-9]{0,2}$&!^A_[0-9]+$&^[\u2E80-\u8FFFa-zA-Z_<{$][\u2E80-\u8FFFa-zA-Z_0-9<>{}$.

-]*$`

--df-inline

内联短方法

True

--df-remove-inlined

移除内联方法

True

.NET Reactor (dr3)--dr3-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--dr3-types

还原类型(object -> 实际类型)

True

--dr3-inline

内联短方法

True

--dr3-remove-inlined

移除内联方法

True

--dr3-ns1

如果命名空间中只有一个类则清除命名空间

True

--dr3-sn

移除反强名称代码

True

.NET Reactor (dr4)--dr4-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--dr4-methods

解密方法

True

--dr4-bools

解密布尔值

True

--dr4-types

还原类型(object -> 实际类型)

True

--dr4-inline

内联短方法

True

--dr4-remove-inlined

移除内联方法

True

--dr4-embedded

转储嵌入程序集

True

--dr4-rsrc

解密资源

True

--dr4-ns1

如果命名空间中只有一个类则清除命名空间

True

--dr4-sn

移除反强名称代码

True

--dr4-sname

重命名短名称

False

Eazfuscator.NET(ef)--ef-name

有效名称正则模式

!^[a-zA-Z]$&!^#=&!^dje_.+_ejd$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

Goliath.NET(go)--go-name

有效名称正则模式

!^[A-Za-z]{1,2}(?:

\d+)?$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.-]*$

--go-inline

内联短方法

True

--go-remove-inlined

移除内联方法

True

--go-locals

还原局部变量

True

--go-ints

解密整数

True

--go-arrays

解密数组

True

--go-sn

移除反强名称代码

True

ILProtector(il)--il-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

MaxtoCode(mc)--mc-name

有效名称正则模式

!^[oO01l]+$&!^[A-F0-9]{20,}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--mc-cp

字符串代码页

936

MPRESS(mp)--mp-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

Obfuscar(ob)--ob-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]{1,}$`

Rummage(rm)--rm-name

有效名称正则模式

!.
Skater .NET(sk)--sk-name

有效名称正则模式

!

[^0-9]+&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.-]*$

SmartAssembly(sa)--sa-name

有效名称正则模式

^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--sa-error

移除自动错误报告代码

True

--sa-tamper

移除篡改保护代码

True

--sa-memory

移除内存管理器代码

True

Spices.Net(sn)--sn-name

有效名称正则模式

!^[a-zA-Z0-9]{1,2}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

--sn-inline

内联短方法

True

--sn-remove-inlined

移除内联方法

True

--sn-ns1

如果命名空间中只有一个类则清除命名空间

True

--sn-rsrc

还原资源名称

True

Xenocode(xc)--xc-name

有效名称正则模式

!^[oO01l]{4,}$&!^(get_|set_|add_|remove_|_)?[x_][a-f0-9]{16,}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.

-]*$`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值