簡體   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