使用dnspy反编译修改源码

警告
本文最后更新于 2023-04-08,文中内容可能已过时。

解决一些混淆之后patch源码的问题。

# 前言

dnspy是csharp中反编译神器,只要你接触反编译相关的,那你一定离不开他。 官方的GitHub仓库已经不维护了,不过有人在官方基础上维护了另一个仓库。本质没变,都是反编译神器。

# 修改源码

一般情况下使用dnspy来改源码都是因为没有可编译的项目,你要是有可编译的项目那改项目就行了。

一个最简单的exe

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
using System;

namespace ConsoleApp4
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.ReadKey();
        }
    }
}

执行后打印hello字符串。

将其使用dnspy修改

image.png

不论是编辑方法、编辑类,都可以直接修改代码。

image.png

我改成输出hello bro,点击编译,然后点击保存

image.png

点确定

image.png

然后再执行exe就会输出hello bro了。

# 编辑IL指令

遇到了一个混淆之后的dll,想要在不反混淆的情况下修改dll中的一个方法体。

image.png

使用dnspy编辑方法体时,编译出错,报错内容大多是不识别Unicode字符串,导致编译不通过。

怎么解决?可以通过编辑il指令来达到修改代码逻辑的效果。

image.png

还拿前面的hello程序举例,编辑il指令,修改hellohello bro

image.png

点击确定,然后保存即可。混淆程序保存的时候勾上这几个选项可能会有所帮助。

image.png

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。