繁体   English   中英

反向工程DLL

[英]Reverse engineering a DLL

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

为此,我对源代码进行了反编译,然后遍历了与保存文件进行保存(和读取)的代码。 但是,我碰到了墙。 我有与此类似的代码:

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

有没有办法可以从某个地方调用此方法并查看其返回的结果?

我愿意采取任何方式,无论是通过编程和调用方法,还是使用工具并尝试在游戏执行期间获取价值。

有什么办法吗?

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

如果解决方案中引用了程序集,则会执行此操作。 在正确命名名称时遇到了麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM