[英]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.