.NET程序集编辑器/调试器 dnSpy 使用介绍

news2024/9/23 17:24:17

原文链接:https://www.cnblogs.com/zhaotianff/p/17352882.html

dnSpy

dnSpy是一个.NET程序集调试器和编辑器。它可以用它来编辑和调试程序集,即使在没有源码的情况下。

主要功能:

调试.NET和Unity程序集
编辑.NET和Unity程序集
 

项目地址:

https://github.com/dnSpy/dnSpy

直接下载Release即可。

完整的功能介绍可以参考 项目下的README

这玩意儿简直就是神器啊,像平常win32程序,反汇编出来,只能通过修改汇编代码来达到修改程序的目的。

dnSpy除了具备了.NET Reflector、ILSpy等工具的反编译功能外,还具备了调试和编辑程序集的功能。

在最初我接触这个还是为了修改程序集里的资源文本,后面在论坛看到使用dnSpy修改程序集达到破解的目的。这里就系统的学习一下dnSpy,并做个总结。

反编译功能

直接通过文件菜单,打开本地程序集或者GAC程序集,就可以对程序集进行反编译。

对于.NET自带程序集里InternalXXX或XXXInternal的函数,可以参考https://www.cnblogs.com/zhaotianff/p/16555734.html

如何修改程序集资源

如果程序集里定义了字符串资源,在没有源码的情况下,可以利用dnSpy修改程序集资源

最初我用dnSpy也是修改程序集里多语言翻译的字符串

创建一个WPF工程,增加一条字符串资源 

然后在界面上增加一个按钮,在按钮事件里使用消息框输出这条字符串

然后使用dnSpy打开,找到这条字符串资源,可以直接编辑

编辑完成后,再运行程序,结果如下

说明:

dnSpy不支持修改XAML,所以定义在XAML里的字符串是无法修改的

如何调试程序集

使用dnSpy打开需要调试的程序集

找到需要调试的代码段,添加断点

点击启动

按钮,

如果调试的是DLL,需要在可执行程序这里选择调用这个DLL的程序。

中断于这里可以根据这里需求进行选择,如果想直接跳到自己设置的断点处开始调试,可以选择不要中断

单击确定,即可开始调试程序。

说明:

1.dnSpy的调试和Visual Studio调试差不多,这里就不做详细介绍了。快捷键啥的也和Visual Studio基本上差不多,如添加断点可以按F9,F10逐过程,F11逐语句等。

2.对于已经混淆过的代码,可以使用de4dot进行还原。https://www.cnblogs.com/zhaotianff/p/17229625.html。

开始调试后,在局部变量这里可以看到实时变量信息

如何修改方法/类

在没有源码的情况下,可以使用dnSpy修改方法/类的代码。

这里还是以前面的代码为例

假设我们要修改按钮点击事件的处理代码,直接在函数上右键,选择编辑方法

添加一行,然后点编译按钮

说明:如果模块的依赖库没有在dnSpy中打开,会报类型找不到,类似下面这样。

 在左下角添加类型引用即可(如果是.Net Framwork自带的类,从GAC中打开就可以)

编译通过后,打开文件菜单,选择保存模块

单击确定,就可以将刚才修改的内容保存到模块中去。此时我们再运行,点击 按钮,就会弹出Modified by dnSpy,再弹出HelloWorld

 dnSpy还提供了其它几种编辑类型,跟上面的操作大同小异,可以自行尝试。

说明:

如果要修改已经混淆过,而且不能还原的代码,可以

1.寻找能通过编译的函数进行修改,这种方式不一定能达到预期效果,因为有可能取不到自己所需要的变量值。

2.直接修改IL代码,对于不懂IL的人来说这种方式有点困难。不过可以先模仿编写C#代码,再获取IL代码。

对于异步代码,目前还需要研究async/await的实现原理,后面再更新。

到这里,已经可以使用dnSpy对一般的程序集进行调试和修改了。复杂的情况,我目前也在摸索中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows11安装WSL2 笔记240726

以管理员身份打开控制台输入 wsl --status wsl --status如果什么也没有,说明系统还未安装WSL , 执行 wsl --install 进行安装 wsl --install安装完成后, 再次执行 wsl --status 可看到 wsl --status 默认版本: 2 当前计算机配置不支持 WSL1。 若要使用 WSL1,请启用…

vuex学习day01-vuex简述、基于脚手架创建项目、基于脚手架创建项目

1、vuex简述 之所以采用vuex是因为当我们有多个公共状态的组件时,vue的简单性容易崩溃 (1)概念 Vuex 是Vue.js 应用程序的状态管理模式库。简单讲,vuex是vue的一个状态管理工具。 (2)作用 管理vue中的…

SSRF过滤攻击

SSRF绕过: 靶场地址:重庆橙子科技SSRF靶场 这个是毫无过滤的直接读取,但是一般网站会设置有对SSRF的过滤,比如将IP地址过滤。 下面是常用的绕过方式: 1.环回地址绕过 http://127.0.0.1/flag.php http://017700…

三目操作符

双目操作符有、-、*、/、% 单目操作符有--、、、- 三目操作符有表达式1&#xff1f;表达式2&#xff1a;表达式3 如果表达式1为真则表达式2计算否则表达式3计算&#xff0c;计算结果为整个表达式的结果 #include<stdio.h> int main() {int a 0;int b 0;scanf(&quo…

Transformer-Bert---散装知识点---mlm,nsp,较之经典tran的区别和实际应用方式

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点&#xff0c;有时间就会整理收录&#xff0c;希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同&#xff0c;bert是使用大量无标签的数据进行预训练&#…

14 集合运算符和矩阵乘法运算符@

集合的交集、并集、对称差集等运算借助于位运算符来实现&#xff0c;而差集则使用减号运算符实现。 print({1, 2, 3} | {3, 4, 5}) # 并集&#xff0c;自动去除重复元素 print({1, 2, 3} & {3, 4, 5}) # 交集 print({1, 2, 3} - {3, 4, 5}) # 差集 print({1, 2, 4, 6, …

STM32CUBEMX部署生成FreeRTOS创建LED闪烁任务

目录 一、前言 二、详细步骤 三、总结 一、前言 从本文开始&#xff0c;将会逐步介绍FreeRTOS的一些功能&#xff0c;由浅入深。本文将上手通过STM32CUBEMX快速实现FreeRTOS的移植。随后创建点灯任务。 芯片选型&#xff1a;STM32F103C8T6 二、FreeRTOS 如果你想要在单片机…

昇思25天学习打卡营第22天|munger85

LSTMCRF序列标注 我们希望得到这个模型来对词进行标注&#xff0c;B是开始&#xff0c;I是实体词的非开始&#xff0c;O是非实体词。 我们首先需要lstm对序列里token的记忆&#xff0c;和计算每个token发到crf的分数&#xff0c;发完了再退出来&#xff0c;最后形成1模型。那么…

k8s v1.30 完整安装过程及CNI安装过程总结

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

自动灭火绳品牌怎么选?欢迎进入自动灭火时代

伴随着科技的快速发展和自动灭火技术的广泛应用&#xff0c;各种各样的自动灭火装置及自动灭火系统已经成为了保障人们生命及财产安全的重要防线。面对不断涌现的自动灭火绳品牌&#xff0c;我们该怎么选择呢&#xff1f; 第一&#xff0c;首先看自动灭火绳的材料成分。 传统的…

计算机网络知识-面试点1

1. 三握四挥 定义&#xff1a; 在计算机网络中&#xff0c;特别是TCP/IP协议中&#xff0c;“三握”指的是三次握手&#xff08;Three-way Handshake&#xff09;&#xff0c;而“四挥”则指的是四次挥手&#xff08;Four-way Handshake&#xff09;。这两个过程分别用于TCP连接…

C# dataGridView 去掉左边多出来空列

1.问题 在使用winform做界面程序时&#xff0c;dataGridView控件创建好后&#xff0c;左侧会多出一列为空&#xff0c;如何删除呢 2.解决方法 你可以在属性窗口中进行设置 如图&#xff1a; 将RowHeadersVisible 属性设置为False 或者代码设置 this.dataGridView1.RowHea…

MFC列表框示例

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.示例内容 2.程序步骤 3.运行结果 4.代码全文 1.示例内容 编写一个对话框应用程序CMFC_Li6_4_学生信息Dlg&#xff0c;对话框中有一个列表框&#xff0c;当用户…

使用vscode连接开发机进行python debug

什么是debug&#xff1f; 当你刚开始学习Python编程时&#xff0c;可能会遇到代码不按预期运行的情况。这时&#xff0c;你就需要用到“debug”了。简单来说&#xff0c;“debug”就是能再程序中设置中断点并支持一行一行地运行代码&#xff0c;观测程序中变量的变化&#xff…

【MySQL进阶之路 | 高级篇】锁的概述以及读写并发问题

事务的隔离性是由锁来实现的。 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在很多线程同步的问题&#xff0c;当多个线程并发访问某个数据的时候&#xff0c;尤其是针对一些敏感的数据&#xff08;如订单&#xff0c;金额等&#xff09;&…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中&#xff0c;有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量&#xff08;结构更清晰&#xff0c;语义更明确&#xff0c;可读性更好&#xff09;在长字…

基于Delaunay三角网的平面点云面积计算(python)

1、背景介绍 三维点云密度比较高&#xff0c;可以根据点云数据精确计算物体表面面积&#xff0c;如建筑物水平占地面积、室内房间墙面面积等&#xff0c;如下图&#xff0c;这在实际应用中具有非常重要的作用。其实归根到底&#xff0c;计算上述面积&#xff0c;可以认为计算平…

【Linux】基本指令1

文章目录 1. find2. which3. alias4.whereis5.grep6. sort 、uniq7. linux怎么编辑文件中的内容 1. find 1.1 find: 查找文件所在的位置。&#xff08;当我们进行find搜索的时候&#xff0c;可能需要访问磁盘进而导致效率低下。&#xff09; 1.2 find / file.txt 在Linux系统是…

掏耳神器哪种最好用?力荐四款优质高口碑产品

要说到掏耳神器&#xff0c;市面上有不少声称能掏掏干净耳垢的挖耳勺。例如棉签、螺旋掏耳勺、可视掏耳勺等。那么那种掏耳神器最好用呢&#xff1f;有着多年采耳经验的我&#xff0c;当然把这三种神器都买来尝试过&#xff0c;很明确地告诉大家&#xff0c;只有可视掏耳勺最好…

Oracle集群RAC磁盘管理命令asmcmd的使用

文章目录 ASM磁盘共享简介ASM磁盘共享的优势ASM磁盘组成ASM磁盘共享的应用场景Asmcmd简介Asmcmd的功能Asmcmd的命令Asmcmd的使用注意事项Asmcmd运行模式交互模式运行非交互模式运行ASMCMD命令分类实例管理命令:文件管理命令:磁盘组管理命令:模板管理命令:文件访问管理命令:…