如何使用de4dot

发布时间:2020-06-08编辑:佚名阅读(2562)

N00b用户

将文件拖放到de4dot.exe并等待几秒钟。

一次反复处理多个文件

如果对多个程序集进行了模糊处理,除非禁用符号重命名,否则很可能必须同时对它们进行反混淆处理。原因是如果程序集A在程序集B中引用了类C,并且只在程序集B中重命名符号,则可以将类C重命名为例如。Class0但程序集A中的引用仍然引用程序集B中名为C的类。如果同时对两个程序集进行反混淆处理,则所有引用也将更新。

找到所有混淆的文件并对其进行反混淆处理

以下命令行将对由支持的混淆器进行模糊处理的所有程序集进行反混淆处理,并将程序集保存到 c:\output

de4dot -r c:\input -ru -ro c:\output

-r意味着递归搜索。-ru意味着它应该忽略未知文件。-ro意味着它应该将输出文件放在以下目录中。通常,您首先复制c:\input到c:\output,然后运行该命令。这样所有文件都将进入c:\output,甚至是非组件和非处理组件。当de4dot完成后,你只需双击主程序集就可以了c:\output,它应该有希望开始。

检测混淆器

使用该-d选项可以在不对任何程序集进行反混淆处理的情况下检测混淆器。

查找所有.NET程序集并检测混淆器。如果它是一个不受支持的混淆器,或者它没有被混淆,它将打印“Unknown obfuscator”。

de4dot -d -r c:\input

与上面相同,只是它只显示受支持的混淆器对哪些文件进行了模糊处理。

de4dot -d -r c:\input -ru

检测混淆器

de4dot -d file1.dll file2.dll file3.dll

保留元数据令牌

有时在极少数情况下,您需要保留元数据令牌。使用--preserve-tokens或--preserve-table。还要考虑使用,--keep-types因为它不会删除混淆器添加的任何类型和方法。另一个有用的选择是--dont-create-params。如果使用,重命名器将不会为没有Param行的方法参数创建Param行。这样,ParamPtr表将不会添加到您的程序集中。Peverify有一个bug并且不支持它(你会看到很多“错误”)。

的#Strings,#US和#Blob堆也可以通过使用保存--preserve-strings,--preserve-us和--preserve-blob分别。其中三个--preserve-us是自ldstr指令以来最有用的一个并module.ResolveString()直接引用#US堆。

--preserve-sig-data如果混淆器在其用于其自身目的的签名末尾添加额外数据,则应使用,例如。作为解密密钥。Confuser是一个这样做的混淆器。

--preserve-tokens保留所有重要的令牌,但也会启用--preserve-us,--preserve-blob和--preserve-sig-data。

如果它被检测为未知(不支持)的混淆器(或者如果强制它-p un),则会保留所有令牌,包括#US堆和签名末尾的任何额外数据。此外,不会删除混淆器类型,字段或方法。

保留所有重要的令牌,#US,#Blob,额外的sig数据。

de4dot --preserve-tokens file1.dll

保留所有重要的令牌,#US,#Blob,额外的sig数据,不要删除混淆器添加的类型/字段

de4dot --keep-types --preserve-tokens file1.dll

保留所有重要的令牌,#US,#Bubb,额外的sig数据,不要创建额外的Param行以防止创建ParamPtr表。

de4dot --dont-create-params --preserve-tokens file1.dll

保留除Param令牌之外的所有重要令牌。

de4dot --preserve-table all,-pd file1.dll

动态解密字符串

虽然de4dot支持很多混淆器,但仍有一些它不支持。要解密字符串,首先需要确定哪些方法可以解密字符串。要获取这些字符串解密器的方法标记,可以使用ILDASM并启用“show metadata tokens”选项。方法令牌是32位数字,以06开头,例如。06012345。

此命令将通过调用将程序集file1.dll加载到内存中Assembly.Load()。当它检测到对两个字符串解密器(06012345和060ABCDE)的调用时,它将通过创建动态方法来调用它们,并保存结果(解密的字符串)。将删除对字符串解密器的调用,并且解密的字符串将在其位置。

de4dot file1.dll --strtyp delegate --strtok 06012345 --strtok 060ABCDE

由于程序集已加载并执行,因此如果您怀疑该文件是恶意软件,请确保在沙箱中运行此程序集。

强制检测某个混淆器

de4dot并不完美。如果它无法检测到混淆器,您可以使用该-p选项强制它假定它已被混淆。

强制SmartAssembly

de4dot file1.dll -p sa

强制不支持的混淆器

de4dot file1.dll -p un

对于其他混淆器类型,请参阅帮助屏幕。

禁用符号重命名

重命名符号并不像在涉及反射时将A重命名为B一样容易。de4dot目前不支持重命名XAML,因此如果您怀疑它使用WPF(或者如果它是Silverlight应用程序),则应该在程序集无法运行时禁用重命名。

de4dot --dont-rename file1.dll file2.dll

--keep-names也可以用来告诉de4dot不要重命名某些符号,例如。“不要重命名字段”。

重命名除属性,事件和方法之外应重命名的所有内容。

de4dot --keep-names pem file1.dll

使用不同的重命名正则表达式

默认正则表达式应该足够,除了可能是检测到不支持的混淆器时使用的正则表达式。要查看所有默认正则表达式,请在de4dot不带任何参数的情况下启动,它将列出所有选项和所有默认值。

例如,目前以下是检测到Dotfuscator时使用的默认正则表达式

!^[a-z][a-z0-9]{0,2}$&!^A_[0-9]+$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$

正如您所看到的,它不仅仅是一个正则表达式,它不止一个。每一个都被分开&,每个正则表达式都可以通过!在它前面使用来否定。为了更清楚地显示它们,使用了这些正则表达式:

(negated) ^[a-z][a-z0-9]{0,2}$(negated) ^A_[0-9]+$^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$

要更改正则表达式,您必须知道混淆器的短类型名称(请参阅帮助屏幕)。例如。它是saSmartAssembly,un如果它是一个不受支持/未知的混淆器。使用的选项是--TYPE-name(例如,--sa-name对于SmartAssembly和--un-name未知/不支持的混淆器):

de4dot --un-name "^[a-zA-Z]\w*$" file1.dll

其他选择

从de4dot没有任何参数开始,它将显示所有选项。

  关键字:如何使用de4dot


鼓掌

0

正能量

0

0

呵呵

1


评论区
  • 游客

    别照着抄啊,整点自己的理解啊