反向工程DLL

时间:2015-12-27 17:27:00

标签: c# dll reverse-engineering

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

为此,我反编译了源代码,并且我正在查看处理保存(和读取)保存文件的代码。但是,我碰到了一堵墙。我有类似的代码:

if then else

这会出现在更多地方,可能会有很多this.entity个陈述。

现在,我知道Q.FG(int num)的值,因为它的值已从代码中较早的保存文件中读取。但是,我不知道Q的价值。代码用C#编写。

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

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

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

我可以采用任何方式这样做,无论是编程和调用方法,还是使用工具并尝试在游戏执行过程中捕获值。

有没有办法这样做?

1 个答案:

答案 0 :(得分:2)

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

如果在解决方案中引用了程序集,则会执行此操作。让名字完全正确的麻烦。