MENU

CSharp 程序混淆与还原

March 30, 2021 • Read: 231 • CSharp,编程相关阅读设置

0x00 前言

拿到了某个CSharp编写的工具,想尝试看下源码编写逻辑,竟然失败了,于是乎找了个对应场景的解决方法。

0x01 过程

.net Reflector

CSharp编写的程序,通常可以用.net Reflector这个反编译工具去进行分析查看,入手既用,很直观。直接看到主方法和调用。

image-20210330180317121.png

在某次调试某个工具的时候遇到了一个情况,尴尬报了索引超出了数组界限。

image-20210330180425465.png

通过简单的查下壳发现经过了.net Reactor这款壳混淆。

image-20210330231945149.png

在这里尝试用了de4dot这款CSharp编写的神器,通过他可以尝试对CSharp程序尝试解混淆并脱壳。

非常强大并且开源:

de4dot

https://github.com/de4dot/de4dot

从github可以直接获取编译好的二进制程序,或者在本地编译。

使用实例:

de4dot.exe -r c:\my\files -ro c:\my\output
de4dot.exe file1 file2 file3
de4dot.exe file1 -f file2 -o file2.out -f file3 -o file3.out
de4dot.exe file1 --strtyp delegate --strtok 06000123

常用-d检测混淆器或者直接解混淆。

.\de4dot.exe -d xxx.exe
.\de4dot.exe xxx.exe

尝试直接解混淆,会在当前文件目录生成一个xxx-cleaned.exe文件,即为解混淆后的程序。

image-20210330233324238.png

再次拖入.net Reflector即可看到反编译后的程序集方法类。

目前发现的弊端有不能还原自定义变量名和字符串阅读较为麻烦,但是已经可以看到主要调用的方法和程序逻辑。

image-20210330233612115.png

然后测了另一个CSharp混淆工具ConfuserEx

ConfuserEx

发现效果要好一些,前者解混淆后可以看到程序主要逻辑。

后者拖进.net Reflector仅仅只能看到部分api调用,主方法逻辑这里没法直接看到。

image-20210330234535086.png

这里只测试了这两款混淆工具,根据不同的混淆用途,相较而言,可以有个对比。

原文作者:Keefe

原文链接:CSharp 程序混淆与还原

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

Last Modified: April 17, 2021