C#入门教程08.05:代码混淆
系列索引:C#入门系列教程索引
说明
- 混淆,比如说函数名为license_check(),这样别人一眼丁真发现这个函数是证书检测相关,需要混淆一下,把它变为abc_123(),这样就增加了分析难度。
- 加密(加壳),代码指令
mov eax,1;
把他加密为abc defgf;
普通状态下是无法运行的,只有解密后才能正常运行。
本文测试使用PreEmptive Protection - Dotfuscator 6.0.1 破解版
混淆
点击打开
点击+
按钮选择需要混淆的dll/exe
选择后取消Library
的勾选,否则的话,几乎所有的公共函数变量,不会被加密和混淆,还是可以很容易的看到代码。
点击Settings
页面,将Disable String Encryption
置为No
点击Rename
页面,勾选Use Enhanced Overload Induction
点击String Encryption
页面,勾选文件
如果dll原本就有签名,需要重新签一个。
点击编译按钮
会提示保存为文件,随便填一个名字就可以了。
混淆日志输出为:
1 |
|
切换到output界面
函数下有个盾牌,应该是他把原本的类修改为a了。
在dll所在目录下会生成一个新目录,编译结果就在里面
效果
打开dll文件,未混淆的可以直接看出代码
打开混淆后的dll
增加了许多无用代码,但是参数没变,而且仔细分析还是可以看出原来的流程的。
代码混淆后,类名变了,函数名也变了,那么调用方法就要改了
1 |
|
然后编译运行,运行结果正常。
去混淆
使用de4dot反混淆
只是捋了一下名称,可读性增加。
下一篇:C#入门教程08.06:代码加壳
C#入门教程08.05:代码混淆
https://blog.jackeylea.com/csharp/how-to-obfuscate-csharp-app/