2013-02-13 23 views
0

我正在做一個wargame,我需要分析一個java應用程序。因此,該應用程序會加載損壞的類文件,將其轉換爲字節數組,並對其執行任何操作,然後使用該數組正確加載類。我需要分析這個類,所以我想將它保存爲一個單獨的類文件,以便稍後使用jd-gui對其進行反編譯。我使用下面的代碼來保存數組:如何在java中將字節數組作爲類文件保存並稍後進行反編譯?

FileOutputStream output = new FileOutputStream(new File("class.class")); 
output.write(arrayOfByte); 

但是這個類以後沒有被反編譯。我還需要做些什麼來使反編譯器可讀?

UPDATE:

我的意思是通過什麼損壞,是該類文件實際上是不完整的,應用程序完成了類,並使其內部有效的類文件,然後加載它。程序員已經這樣做了,以防止類被反編譯和閱讀。這個問題並不是真的需要,但我認爲如果我澄清會更好。

+0

如果它是一個損壞的類文件,你會如何期望它被反編譯?你的問題不是很清楚...... – 2013-02-13 18:26:35

+0

你能否提供更多的信息如: *爲什麼這個類沒有反編譯。來自jd-gui的任何錯誤消息? *你如何修改類文件,使代碼在加載之前從上面的代碼開始(加載已損壞的類) – 2013-02-13 18:42:27

回答

0

確保正確編寫類Java字節代碼轉換成路徑,例如

說類全名,包括類名是com.test.Sample你應該寫文件夾下的COM \測試\類的字節碼Sample.class。

此外,確保在寫入字節碼後正確關閉FileOutputStream。

// use fully qualified class name 
FileOutputStream output = new FileOutputStream(new File("c:\\com\\test\\Sample.class")); 
output.write(arrayOfByte); 
output.close(); 
+1

你可以分享什麼是問題/解決方案嗎? – 2013-02-13 18:43:51

+0

@MarkusKreusch顯然,它是重要的文件名。我將文件名更改爲正確的類名,並且已成功反編譯。 – Wise 2013-02-13 21:51:08

相關問題