反向工程DLL

本文关键字:DLL | 更新日期: 2023-09-27 18:28:14

我正在为游戏创建一个配置文件编辑器。主要问题是要弄清楚用于存储所有数据的二进制文件的结构。

为了做到这一点,我对源代码进行了反编译,并浏览了处理向保存文件保存(和从保存文件读取)的代码。然而,我撞到了墙上。我有类似的代码:

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类型对象的内部静态方法。为了继续,我需要知道至少几个数字的该方法的输出。

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

有没有一种方法可以从某个地方调用这个方法并查看它返回的结果?

我对任何这样做的方式都持开放态度,无论是编程和调用方法,还是在游戏执行期间使用工具并尝试捕捉值。

有什么办法吗?

反向工程DLL

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("");
    } 
}

如果在解决方案中引用了程序集,则执行此操作。很难把名字写对。

相关文章:
  • 没有找到相关文章