C# 对DLL进行反向工程

C# 对DLL进行反向工程,c#,dll,reverse-engineering,C#,Dll,Reverse Engineering,我正在为一个游戏创建一个个人资料编辑器。主要的问题是找出用于存储所有数据的二进制文件的结构 为此,我对源代码进行了反编译,并对保存文件进行了保存(和读取)操作。然而,我撞到了一堵墙。我有类似的代码: if (this.entity == Q.FG(45768)) { //read data in one manner } else if (this.entity == Q.FG(96583)) { //read data in another manner } 这会出现在更多的地方,并且可能

我正在为一个游戏创建一个个人资料编辑器。主要的问题是找出用于存储所有数据的二进制文件的结构

为此,我对源代码进行了反编译,并对保存文件进行了保存(和读取)操作。然而,我撞到了一堵墙。我有类似的代码:

if (this.entity == Q.FG(45768))
{
//read data in one manner
}

else if (this.entity == Q.FG(96583))
{
//read data in another manner
}
这会出现在更多的地方,并且可能有相当多的
if-then-else
语句

现在,我知道了
this.entity
的值,因为它的值是在代码前面的保存文件中读取的。但是,我不知道Q.FG(int num)的值。代码是用C#编写的

Q
是一个内部静态类,
FG(int num)
是一个内部静态方法,返回一个
string
类型对象。为了继续,我需要知道该方法至少几个数字的输出

另一个问题是,该方法使用DLL资源文件和名称,并手动提供这些文件和名称,结果无效。我可以检查输出,因为其中一个数字的输出必须与
this.entity
匹配

有没有一种方法可以从某处调用此方法并查看它返回的结果

我愿意接受任何这样做的方式,无论是编程和调用方法,还是使用工具并试图在游戏执行过程中捕捉价值

有什么办法吗

public class Program
{
    static void Main(string[] args)
    {
        MethodInfo info2 = Type.GetType("A.PW, Assembly-CSharp").GetMethod("G", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[] { typeof(int) }, null);

        System.Diagnostics.Debug.WriteLine("");
        System.Diagnostics.Debug.WriteLine("");
        System.Diagnostics.Debug.WriteLine((string) info2.Invoke(null, new object[] {75432}));
        System.Diagnostics.Debug.WriteLine((string)info2.Invoke(null, new object[] {45634}));
        System.Diagnostics.Debug.WriteLine((string)info2.Invoke(null, new object[] {70345}));
        System.Diagnostics.Debug.WriteLine((string)info2.Invoke(null, new object[] {3456}));
        System.Diagnostics.Debug.WriteLine((string)info2.Invoke(null, new object[] {4734}));
        System.Diagnostics.Debug.WriteLine("");
        System.Diagnostics.Debug.WriteLine("");
    } 
}

如果在解决方案中引用了程序集,则会执行此操作。在获取正确的名称时遇到问题。

下载并反映
FG
。或者,您可以在Visual Studio中使用调试器打开应用程序并逐步执行
MSIL
代码。在VS中,转到调试/附加到ProcessCare以提供更多细节?我该如何思考,因为所有那些typeof()和getType()的东西都没有真正起作用?如何使用调试器打开整个应用程序?附加到进程不会得到任何变量,如果这是您所指的。
FG
Q
的方法,如果Q是一个类,它是一个静态方法,如果它是一个属性或字段,它是一个实例方法。