0
点赞
收藏
分享

微信扫一扫

.net工具dnSpy使用

作为微软的忠实粉丝的程序员,如果你要是不会C#语言,就别说你是忠实粉丝了。

 

C#语言是在C和C++的基础上发展起来的一门和Java类似但强于Java的编程语言(可能不太准确,其实我原来也是Java程序员,后来改的C#),C#编写的程序虽然编译后也是DLL(或者EXE),但是这却不是机器码的动态库,他是一种字节码,需要在CLR的基础上才能运行。这就给了程序员们可以反编译查看和修改别人代码的机会(使用合适的工具)。

 

最开始的时候我们查看别人的代码使用的是ILSpy,这个语言可以直接反编译,如果想修改可以使用ILSpy修改IL语言(这个和汇编差不多,好难哦)。或者使用插件直接反编译为工程再修改代码重新编码。

 

时代在发展,社会在进步,程序员工具也在不断的完善和健壮。比如这后面出现的dnSpy,它虽然是基于ILSpy的,但却比ILSpy强大了太多,可以直接在IL中修改源码来直接修改他人的程序。

 

我们基于标准的HelloWorld来介绍使用dnSpy修改编译后的程序集的方法,大家学习工具的使用。

 

首先我们写一个控制台程序,简单,就输出一个Hello World。源码如下:

 

class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Hello World!");

            Console.ReadLine();

        }

    }

 

 

运行程序,一个标准的DOS窗口输出了Hello World!

 

现在我们基于这个HelloWorld.exe程序修改它输出的内容。

 

注意dnSpy是分32位和64位架构的,根据自己的程序来确定使用dnSpy相应的程序。

 

通过菜单文件-打开选择HelloWorld.exe,

 

.net利器dnSpy使用_Java

 

 然后在类上点击右键选择菜单编辑类(C#),出现窗口:

 

.net利器dnSpy使用_字节码_02

 

首先修改输出的内容,比如改为了Hello C#,再点击编译,如果不出错的下类编辑窗口自动关闭。

 

然后在主窗口点击菜单文件-保存模块,出现如下窗口:

 

.net利器dnSpy使用_Java_03

 

在这里可以修改文件名,不修改直接覆盖原文件。然后点确定按钮进行保存。

 

运行程序,结果如下:

 

.net利器dnSpy使用_字节码_04

 

看看这强大的工具,我们在没有源代码的情况下就修改了程序集。所以这也是类Java、C#这类字节码程序的不安全之外。现在有代码混淆工具,可以对这类工具生成的字节码进行混淆(和JavaScript的混淆类似),混淆后的代码使用工具反编译后有点类似看汇编的感觉(当然比汇编要好读一些),那样的代码虽然也能修改,但肯定比没混淆的要难一些。

-----------------------------------

©著作权归作者所有:来自51CTO博客作者wangccsy爱鸿蒙的原创作品,请联系作者获取转载授权,否则将追究法律责任


举报

相关推荐

0 条评论