前因

前几天在分析某款软件时,遇到了使用开源混淆器ConfuserEx的dll(动态链接库),当时使用dnspy加载dll文件时部分方法反编译不了,部分变量为unicode编码,无法进行反编译。

后来经过多个工具配合使用成功的进行了反混淆,故在此记录下对ConfuserEx反混淆的过程。

过程

直接使用dnspy加载

直接使用dnspy进行反编译可以看到变量为unicode编码、大部分方法无法进行反编译。

7269181628e7d76b19fa275b7011292c.png

31114dec37cf2caacf29fbd8b51b3b08.png

没有任何的可读性,且无法追踪具体方法实现代码。

查壳

先使用查壳工具ExeinfoPe进行检查下是什么壳或混淆,这里可以看到提示了使用ConfuserEx混淆。

d1a052b90dd4e74f44c9d84af09ff1e6.png

可以看到使用了开源.net 混淆器ConfuserEx ,这里我参考了大佬的一篇文章https://www.suajin.com/detail/891 ,里面用到的unConfuserEx工具如下:
1264812240972943360.zip

反混淆处理

解包

先使用UnConfuserEx进行“解包”操作

22297f08fb275853287e4f2f978fc2bd.png

这时反混淆后的dll仍为不可读的,虽然能成功反编译,但还是有大量的乱码等方法名。
0629359570bfdca855b16aca12aad11b.png

Remove Junk Methods

使用Fixer工具来删除垃圾方法,这一步直接勾选Remove Junk Methods就好了

4fee357a9e065c5bca5cf71f2fa53ee4.png

Decrypt strin

使用ConfuseExStringDecryptor工具来解密字符串(dnspy上看到的那一大坨unicode等编码的字符串)

cddef23a9483ed58969cd9f0d102bcc6.png

deobfuscate

使用ConfuserEX Switch Killer工具进行反混淆操作

a26ad1c218e127bc436a6841a3840ca3.png

rename symbols

上述生成的文件经过de4dot工具进行更改符号表等操作,使之更有可读性

f6f71d96a549b8a0ae822ac9ca60842c.png

成果

把反混淆处理后的dll文件拖入dnspy工具中查看,可以看到已经能成功的还原出来具有高度可读性的代码了

62e6b78615bf8ede6c8a58193dfcf185.png