使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行
本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!
本文使用的工具下载地址为:
或 dnSpy官方下载地址:
软件界面如下:

该软件分别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有效,请自行试验,谢谢!
出处:http://www.cnblogs.com/cncc/p/7873834.html
使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行的更多相关文章
- [C#]使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 本文使用的工具下载地址为: https://github.com/cnxy/dnSpy/arc ...
- dnSpy进行反编译修改并编译运行EXE或DLL
dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行 本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 本文使用的工具下载地址为: h ...
- 使用dnSpy对无源码EXE或DLL进行反编译并且修改
背景 总有一些特殊情况,我们没有源码,但是某个C#程序集dll或者可执行程序exe影响到我们代码的正常运行,我们希望得到源码,能改掉或者修改某些bug,但是苦于没有源码,这个时候可以用dnspy进行源 ...
- 有关windows系统的EXE和DLL文件说法错误
正确答案: B C 你的答案: C (错误) EXE和DLL文件都是PE文件 EXE不能有导出函数,DLL可以有导出函数 EXE有x86和x64之分,则DLL没有 EXE可以单独运行,DLL则不行 ...
- 如何判断exe或dll的目标平台及是否是.NET?
1. COFF文件头中偏移0处的Machine指示目标机器类型(IMAGE_FILE_MACHINE_AMD64等),偏移18处的Characteristics位指示文件属性(IMAGE_FILE_3 ...
- [under the hood]Reduce EXE and DLL Size with LIBCTINY.LIB
Matt Pietrek Download the code for this article: Hood0101.exe (45KB) W ay back in my October 1996 co ...
- 如何用VS调试不属于解决方案的EXE和DLL程序
如果你手里有一个现成的EXE, 以及EXE相关联PDB文件, 还有相关联的CPP文件和H文件. 你如何用VS调试? (当然你可以选择WinDbg.不过这里就讨论VS) 你或许想问我干嘛不从一开始就用V ...
- PE头的应用---插入代码到EXE或DLL文件中
三.代码实现(DELPHI版本),采用第三种方式实现代码插入. 1. 定义两个类,一个用来实现在内存中建立输入表:一个用来实现对PE头的代码插入. DelphiCode: const MAX_SECT ...
- Qt技巧:Win7下打包发布Qt程序(解释的比较清楚,把exe和dll伪装合并成一个文件)
转自:http://www.stardrad.com/blog/qt-5%E7%A8%8B%E5%BA%8F%E5%9C%A8windows%E4%B8%8A%E7%9A%84%E5%8F%91%E5 ...
随机推荐
- 引发事件代码封装成OnEventName
引发事件的代码,通常可以封装成“On+事件名称”的方法(On:表示当“什么什么”的时候),如下所示: 1:引发事件代码: if (PropertyChanged != null)//为了实现将数据源的 ...
- Linux命令详解-cp
cp 命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在, 就会询问是否覆盖,不管你是否使用-i参数.但是如 ...
- SpringMVC - 多个同名name提交与后台参数解析
简洁来说,就是form表单有多个input(checkbox,hidden),name同名,后台是如何接收的. [1]多个inpu 同名name form表单如下: <form action=& ...
- vue iview组件表格 render函数的使用
如果要在标签中加入属性,例如img 中src属性 a标签中href属性 此时需要用到 attrs 来加入而不是props { title: '操作', key: 'action', align: 'c ...
- Hibernate[延迟加载] [三种状态] [脏检查] [缓存机制]
一.持久化对象的唯一标识 java中按内存地址不同区分同一个类的不同对象,关系数据库用主键区分同一条记录,Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系 什么是OID? 解析: ...
- C++复习14 构造函数初始化调用顺序
1.关于构造函数初始化调用顺序的问题. 首先是父类和子类的,首先调用父类的构造函数,然后调用子类的构造函数.但是对于子类中有其他类型的数据成员的时候,会在调用该类的构造函数之前,调用其数据成员的构造函 ...
- HDU 1198 Farm Irrigation(并查集+位运算)
Farm Irrigation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tot ...
- 在Linux下设置定时任务(每分钟执行一次特定的shell脚本)
在当前用户下,开始编辑定时任务 crontab -e 按键 i 进入编辑模式 输入下述命令 */ * * * * sh /***/*****.sh 然后按键 Esc 退出编辑模式,再输入 wq 保存退 ...
- 2018-2019-2 《网络对抗技术》Exp2 后门原理与应用 20165210
2018-2019-2 <网络对抗技术>Exp2 后门原理与应用 20165210 实验内容: 使用netcat获取主机操作Shell,cron启动. 使用Socat获取主机操作Shell ...
- ubuntu16扩展屏设置
new ubuntu system setting - Expansion screen settings. 1,System Settings–>Displays 1,set big scre ...