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

原文链接: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.rhkb.cn/news/383665.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25.x86游戏实战-理解发包流程

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

IOS微软语音转文本,lame压缩音频

在IOS开发中,用微软进行语音转文本操作,并将录音文件压缩后返回 项目中遇到了利用微软SDK进行实时录音转文本操作,如果操作失败,那么就利用原始音频文件通过网络请求操作,最终这份文件上传到阿里云保存,考…

Golang学习笔记20240725,Go语言基础语法

第一个Go程序 package mainimport "fmt"func main() {fmt.Println("hello world") }运行方式1: go run main.go运行方式2: go build .\hello_go.exe运行方式3:goland右键运行 字符串拼接 使用加号可以对字符串进行…

基于微信小程序的校园警务系统/校园安全管理系统/校园出入管理系统

摘要 伴随着社会以及科学技术的发展,小程序已经渗透在人们的身边,小程序慢慢的变成了人们的生活必不可少的一部分,紧接着网络飞速的发展,小程序这一名词已不陌生,越来越多的学校机构等都会定制一款属于自己个性化的小程…

UML通信图建模技术及应用例

新书速览|《UML 2.5基础、建模与设计实践》 在对系统的动态行为进行建模时,通信图常被用于按组织结构对控制流进行建模。与顺序图一样,一个单独的通信图只能显示一个控制流。 使用通信图建模时可以遵循如下策略: (1&#xff09…

Centos 8 配置网络源

备份当前的软件源配置文件: sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak 清理原有的 yum 仓库配置信息: sudo rm -f /etc/yum.repos.d/*.repo 获取阿里云的 CentOS 8 源配置: sudo curl -o /etc/yum.repos.d/CentOS-Base.repo ht…

错误解决 error CS0117: ‘Buffer‘ does not contain a definition for ‘BlockCopy‘

Unity 2022.3.9f1 导入 Runtime OBJ Importer 后出现: error CS0117: ‘Buffer’ does not contain a definition for ‘BlockCopy’ 解决办法: 源代码: int DDS_HEADER_SIZE 128; byte[] dxtBytes new byte[ddsBytes.Length - DDS_HEAD…

【Vue实战教程】之Vue工程化项目详解

Vue工程化项目 随着多年的发展,前端越来越模块化、组件化、工程化,这是前端发展的大趋势。webpack是目前用于构建前端工程化项目的主流工具之一,也正变得越来越重要。本章节我们来详细讲解一下如何使用webpack搭建Vue工程化项目。 1 使用we…

Axure Web端元件库:从Quick UI到500+组件的飞跃

在快速变化的数字世界中,产品设计不仅仅是功能的堆砌,更是用户体验的精心雕琢。原型设计作为产品开发过程中的关键环节,其重要性不言而喻。Axure,作为业界领先的原型设计工具,凭借其强大的交互设计和丰富的功能&#x…

智慧工地视频汇聚管理平台:打造现代化工程管理的全新视界

一、方案背景 科技高速发展的今天,工地施工已发生翻天覆地的变化,传统工地管理模式很容易造成工地管理混乱、安全事故、数据延迟等问题,人力资源的不足也进一步加剧了监管不到位的局面,严重影响了施工进度质量和安全。 视频监控…

外行对自动驾驶汽车的一些想法-2024-

起源 前段时间有关于自动驾驶汽车的讨论,现在热度终于快过去了。 (⊙﹏⊙) 其实,完全不用担心自动驾驶取代人类。 引用 这是一篇24年4月的报道。 上图为引用,可以看到打工人的忙碌。 2023 一个热爱自动驾驶但妥妥外行之人的思考-2023-C…

mac怎样清理photoshop垃圾的方法 ps清理缓存和垃圾 苹果电脑暂存盘已满怎么清理

很多使用过ps,尤其是Adobe全家桶的小伙伴会发现,这些软件占用缓存很多,而且随着使用时间的增长,缓存也会越多,并不会自动清理。那么mac系统怎么清理ps暂存盘呢?mac又该怎么最高效清理磁盘空间呢&#xff1f…

芯片的计算能力由什么决定

芯片的计算能力由什么决定 芯片的计算能力由多个因素决定。 包括但不限于: 架构设计: 芯片的架构设计决定了其计算单元的数量和类型,以及它们之间的连接方式和通信方式。不同的架构可以提供不同的计算能力和性能。处理器速度: 处…

快速安装torch-gpu和Tensorflow-gpu(自用,Ubuntu)

要更详细的教程可以参考Tensorflow PyTorch 安装(CPU GPU 版本),这里是有基础之后的快速安装。 一、Pytorch 安装 conda create -n torch_env python3.10.13 conda activate torch_env conda install cudatoolkit11.8 -c nvidia pip ins…

LeetCode_122(买卖股票的最佳时机)

public int maxProfit(int[] prices) {int ans 0;//int prices[] {7,1,5,3,6,4};for(int i1;i<prices.length;i){ansMath.max(0,prices[i]-prices[i-1]);}return ans;}

DevExpress WinForms自动表单布局,创建高度可定制用户体验(二)

使用DevExpress WinForms的表单布局组件可以创建高度可定制的应用程序用户体验&#xff0c;从自动安排UI控件到按比例调整大小&#xff0c;DevExpress布局和数据布局控件都可以让您消除与基于像素表单设计相关的麻烦。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&a…

openmv学习笔记(24电赛笔记)

感光元件 openmv采用小孔摄像模式&#xff0c;将图像映射到感光原件上面&#xff0c;来传递图片&#xff0c;通过图片快速的刷新行成视频&#xff0c;在IDE中通过对感光原件的编辑可以控制视频的效果。 重置感光元件到默认状态 import sensor #导入感光元件这个库sensor.res…

IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验

研发项目往往包含很多复杂的流程和具体的细节。因此&#xff0c;一套完整且标准的研发项目管理制度和流程对项目的推进至关重要。研发项目管理是成功推动创新和技术发展的关键因素。然而在实际管理中&#xff0c;研发项目管理常常面临着需求不确定、技术风险、人员素质、成本和…

如何在 Windows 上安装并配置 VNC 远程连接树莓派,并结合Cpolar实现公网远程访问

目录 ⛳️推荐 前言 1. 使用 Raspberry Pi Imager 安装 Raspberry Pi OS 2. Windows安装VNC远程树莓派 3. 使用VNC Viewer公网远程访问树莓派 3.1 安装Cpolar步骤 3.2 配置固定的公网地址 3.3 VNC远程连接测试 4. 固定远程连接公网地址 4.1 固定TCP地址测试 ⛳️推荐…

Godot游戏制作 05收集物品

创建新场景&#xff0c;添加Area2D节点&#xff0c;AnimatedSprite2D节点 &#xff0c;CollisionShape2D节点 添加硬币 按F键居中&#xff0c;放大视图。设置动画速度设为10FPS&#xff0c;加载后自动播放&#xff0c;动画循环 碰撞形状设为圆形&#xff0c;修改Area2D节点为Co…