使用反编译工具dnspy动态修改代码

目前dnspy的最新版是6.0

今天使用的是4.5.3来演示,因为6.0需要安装.NET4.7.2,但是电脑内存快不足了,推荐大家使用最新版6.0

1.打开dnspy

bin目录下有dnspy.exe和dnspy_x86.exe,若是32位程序则选择_x86.exe

2.点击文件-->打开,选择要调试的dll

3.点击调试-->启动调试,选择要调试的应用程序,一般为.exe;

或者点击调试-->附加到进程,选择正在运行的程序

4.选择要编辑的文件,右键

使用反编译工具dnspy动态修改代码_第1张图片

5.选择编辑类或者编辑方法,然后进行你想要的编辑,编辑完成后点击编译

建议选择编辑方法,因为这样在编译的时候只会编译这个方法单元,而不会编译这个类,若编辑整个类,编译的时候会报比较多的错误,需要修复

使用反编译工具dnspy动态修改代码_第2张图片

我在代码中添加了一句 int x=0; ,然后选择编译,但是可以看到下方报错了,这是由于没有引入该类所引用的依赖项导致

很多人都会卡在这一步,编译不过,报一些奇奇怪怪的错误,以下是我的一些经验:

上面这个错误是缺失dll,既红框圈出的Newtonsoft.dll,所以我们需要引入这个dll,菜单栏-->打开-->选择需要的dll,引入即可

如果还是报错,可以查看该dll引用的dll, 如果还有dll没引入,选择dll引入

或者看dnspy的提示,标红的代码就是出错的地方,可以尝试手动修改错误,就像是在VS上开发一样

有时候错误会很奇怪,明明有这个变量,却提示没有,这时可以对比下真正的源代码,你会发现,反编译后的代码是错的,会自动添加一些莫名其妙的逻辑,尤其是在使用匿名函数的时候,这个时候就需要我们手动删除这些错误的逻辑,是的没错,你不太可能用dnsny对应用程序做大量的修改,hook整个程序(如果有大神这么干了,请告诉我怎么做!) ,一般只是做一些外科式手术般的改动,既修改一些关键地方,做一些小的改动,那么就可以尝试删除一些错误的代码和无关的代码,使编译能通过!

6.保存

点击编译后如果没有错误了,则已经成功,但是没有任何提示

但实际上已经保存在右侧菜单栏中了,可以看到有两个同名的dll

点击菜单栏-->文件->保存模块或者全部保存,即可

7.然后使用新的dll替换老的dll,就可以测试了

 

你可能感兴趣的:(C#,调试,dnspy,反编译)