2013-03-01 188 views
6

我知道將dll轉換爲C++代碼是不可能的,所以我想盡可能多地收集它的細節。 這不是我的dll,所以我當然沒有源代碼。我應該使用哪個程序?如何將DLL轉換爲C++代碼?

+1

一個流行的二進制逆向工程工具是IDA Pro - 有一個免費版本,它足以滿足大多數基本需求。 – datenwolf 2013-03-01 01:36:29

+2

你對DLL的功能有一些瞭解嗎?它有多大?你知道它原來寫的是什麼語言嗎?你究竟在努力實現什麼? – 2013-03-01 01:36:42

+1

我添加了一些「關鍵短語」作爲標籤。看看他們。 – 2013-03-01 01:48:28

回答

12

好吧,如果你是熟練的,你可以拆卸的DLL和了解它的全部功能。這需要大量的時間,但如果你這樣做,你可以通過手工將其反轉回來。

否則,您可以通過使用類似的Dependency Walker工具來獲取DLL和功能,這取決於和它導出的功能開始。從那裏你可以找到你感興趣的功能,並使用像IDA這樣的反彙編程序來查看它們的功能。

+3

除了愚蠢的人在他們手上花費太多時間之外,沒有人會扭轉*一切*。你總是會喜歡IDA,並遵循你感興趣的呼叫路徑。此外,您可以在IDA中看到出口。不需要中介。 +1仍然 – 0xC0000022L 2013-03-01 02:30:54

+2

並非每個人都有IDA,或者想學習它。所以,我建議Dependency Walker作爲獲取有用信息的一種非常簡單的方法。 (當然,如果你擅長IDA,你當然可以做任何事情:)) – nneonneo 2013-03-01 02:32:49

1

你需要一個PE文件查看器。這將告訴你從DLL中導出,你可以在.text部分獲取數據來查看機器碼。

2

您可以通過使用dumpbin工具中看到的導出的函數列表。如果C++函數被導出,您可以通過名稱修改來推斷參數。

你可以只是「開放」成爲資源觀看在Visual Studio中的文件從DLL中提取所有資源。如果該DLL是一個基於COM的DLL,那麼類型庫作爲資源嵌入它的可能性很小。如果你有類型庫,你可以#導入它來重建公共接口的頭文件。

這是因爲它得到一樣好。

+1

我不同意這種說法就像它的效果一樣好 - 這一切都取決於你有多少時間/技能/努力。見nneonneo的答案。 – JBentley 2013-03-01 01:49:47