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是一个类,它是一个静态方法,如果它是一个属性或字段,它是一个实例方法。