[C#]使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行

本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢![http://www.cnc6.cn]

本文使用的工具下载地址为:

https://github.com/cnxy/dnSpy/archive/v4.0.0.zip

或 dnSpy官方下载地址:

https://github.com/0xd4d/dnSpy/releases/download/v4.0.0/dnSpy.zip

软件界面如下:

该软件分别64位版本及32位版本,分别为dnSpy.exe 及 dnSpy-x86.exe,调试时请注意调试所对应软件版本。

现在进入话题:

一、首先编写一个Hello World的控制台运行程序,如下图所示:

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ChangeString
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "Hello World!";
            Console.WriteLine(str);
            Console.ReadKey();
        }

    }
}

二、编译并运行,如下图所示:

在这里程序内部的str变量为“Hello World!”,现在,需要使用dnSpy工具,将内部str的变量改变并在线调试。

三、使用dnSpy工具对程序进行反编译:

 ①使用dnSpy工具对刚才生成的ChangeString.exe进行反编译,如下图所示:

②在Main函数内右键点击菜单,在弹出的上下文菜单中选择“编辑方法(C#)”,如下图所示:

③将str变量的内容改为“Just For Test”,并点击“编译”按钮,如下图所示:

④点击“全部保存”按钮,在弹出的界面保持默认值并点击“确定”按钮,如下图所示:

⑤保存完成后,点击“启动”按钮,在弹出的界面保持默认值并点击“OK”按钮,接着自动启动应用程序,如下图所示:

程序成功地运行!

注意:

编译时请注意以下事项,否则将不能进行编译:

①还有其他DLL模块的,必须把它包含进来;

②如有其他反编译后有不能识别的字符,请手工修改OK之后再进行编译。

另外,这个程序不仅对EXE有效,同样对DLL有效,请自行试验,谢谢!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Esofar 开发日记

[译]RabbitMQ教程C#版 - “Hello World”

RabbitMQ是一个消息中间件:它接收并转发消息。您可以把它想象为一个邮局:当您把需要寄出的邮件投递到邮箱,邮差最终会把邮件送给您的收件人。在这个比喻中,Ra...

13630
来自专栏程序员同行者

redis 优化

39630
来自专栏周奇的专栏

mongodb 3.4与 mongodb 3.2性能对比

本文主要将 mongodb 3.4与 mongodb 3.2的性能进行对比分析,按照官方 release note,mongodb 3.4 版本相较3.2 版本...

3.3K00
来自专栏Java编程技术

常用开源框架中设计模式使用分析- 门面模式(Facade Pattern)

门面模式是一种结构性模式,它通过新增一个门面类对外暴露系统提供的一部分功能,或者屏蔽了内部系统的复杂性,对外部仅仅暴露一个简单的接口,或者通过调用不同的服务对外...

15110
来自专栏Porschev[钟慰]的专栏

CodeSmith 创建Ado.Net自定义模版(二)

CodeSmith 创建Ado.Net自定义模版(二) 接第一篇:  CodeSmith 创建Ado.Net自定义模版(一) 建立第二个C# Template:...

19960
来自专栏C# 编程

[C#]使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行

 本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢! 本文使用的工具下载地址为: https://gith...

36100
来自专栏圣杰的专栏

RabbitMQ知多少

1.引言 RabbitMQ——Rabbit Message Queue的简写,但不能仅仅理解其为消息队列,消息代理更合适。RabbitMQ 是一个由 Erlan...

28570
来自专栏后端技术探索

nginx,memcached,redis网络模型总结

nginx采用多进程模型,含一个master进程和多个worker进程,worker进程数目可配置,一般与机器CPU核心数目一致,master进程主要职责是:接...

27320
来自专栏逸鹏说道

用微信二维码登录自己的网站

一、当用户选择用微信二维码登录时,我们要在用户页面里生成一个guid做为客户端的唯一标识,然后带着这个guid请求二维码图片地址,得到地址后,显示给用户。请求到...

390140
来自专栏性能与架构

体验 Mysql shell 控制台

以前登录Mysql的控制台后,使用SQL语言来操作数据库,如 mysql> select * from tablename; Mysql 5.7.12 之后有了...

394100

扫码关注云+社区

领取腾讯云代金券