.net 的程序为了安全性,往往加混淆,混淆后的程序能调试,但是可读性差,增加逆向分析的难度;
一、混淆识别
使用dnspy打开,发现文件名、类名、成员名显示为一串数值,表明加了混淆;
二、解决方法
使用开源的工具de4dot v3,可以网上下载得到;
cmd运行(shift + 右键:当前路径进入cmd),语法:de4dot.exe <option> <filename>
其实,我们直接运行de4dot.exe 就能看到里面的运行参数含义和例子,比较常用的就是 de4dot.exe -r C:\myfileA -ro C:\myfileB,表示将文件夹A下的文件去混淆后输出到文件夹B下,文件名不变;
注意:文件名不能有空格,否则报错;
将去混淆的模块B,复制粘贴到源软件A(最好先备份源软件),然后运行修改后的软件,如果允许成功那么就破解OK了(比较理想的状态),如果报错,就使用dnspy启动软件,找到出错的地方,查看原因。
三、de4dot 的运行
de4dot先时Detected 文件,然后再Clean文件,再Saving文件; 只有显示Detedted Crypto obfuscator XXX的模块才是加了混淆的模块;
de4dot的一些替换规则也许有误,如大小字母替换,我们可以使用dnspy打开de4dot,然后修改转换规则;
常见问题:
1、“Two modules in the same assembly are main module”
原因: 不同的文件夹下面有相同的模块
解决: 可以去掉同名模块,去混淆后再复制到对应位置;