2013-02-07 51 views
4

請參閱我的previous questions之一。我正在詢問從DLL加載編譯資源。然後參考David Heffernan的答案。他的建議是使用內置機制直接從DLL的實例加載資源,甚至不使用我自己的導出函數。這給我指出了一個安全漏洞。任何第三方可以從我的項目中加載嵌入式資源嗎?

如果確實如此,如果這種類型的解決方案是可行的,那麼任何外部第三方可以從任何Delphi應用程序/ DLL中加載資源?嵌入資源的安全性如何?假設我編譯一個嵌入資源的DLL。有人可以使用此DLL並提取資源嗎?考慮到他們必須知道資源名稱,它有多容易?他們是否能夠檢測到編譯的資源並獲取已命名資源的列表?如果是這樣的話,那麼我將不得不實現我自己的安全級別並加密每個嵌入式資源並使用登錄進行解密。

回答

10

資源部分Windows Portable Executable是可訪問的,並且可枚舉給任何具有對可執行文件的讀特權的進程/用戶。

Windows API來work with resources提供了一系列功能,包括功能:

  • 添加,刪除和替換資源
  • 枚舉資源
  • 查找和加載資源
  • 資源文件格式
  • 使用資源

事實上,有很多現成的工具可以執行此操作。您自己的Delphi安裝有一個名爲資源瀏覽器的演示項目,通常安裝在文件夾Samples\Delphi\VCL\resXplor中。

正如您所見,任何知識和/或tools的人不僅可以讀取,而且可以刪除和替換windows可執行文件中找到的資源,而不管生成它的編譯器如何。

您可以在文章An In-Depth Look into the Win32 Portable Executable File Format中找到有關PE文件格式的更多信息。

+0

謝謝,這正是我所懷疑的。我將需要改變我的方法並加密我嵌入的所有內容。 –

+0

另一方面,我從來不知道嵌入式資源是整個窗口。我一直認爲這是Delphi特有的。這讓我的眼睛看到很多東西。 –

+0

@JerryDodge:你應該看到[資源管理器](http://melander.dk/reseditor)。該應用程序相當有用,並且該頁面列出了它可以從任何** Windows可執行文件(包括DLL)讀取的資源類型。您應該使用它來查看任何Delphi應用程序,並檢查「RCDATA」資源;我想至少你會有點驚訝。 –

相關問題