2013-07-18 49 views
0

我編譯了我的應用程序項目的發佈版本。當我用二進制編輯器查看我編譯的最終exe文件時,我可以看到我自己創建的對象的所有類名,例如:TPolygon,TRectangle等等,作爲exe文件中的二進制文本數據。從編譯版本exe中刪除類字符串名稱

我怎樣才能從exe中刪除這些信息。我嘗試刪除在dpr中使用禁用RTTI:

{$WEAKLINKRTTI ON} 
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} 

但不是運氣,任何提示。

+1

而不是刪除類名稱,您可以嘗試使用加密和/或混淆exe的工具。 – RRUZ

+0

@RRUZ,我嘗試使用一些打包器進行混淆處理,但在exe運行並轉儲內存快照後,這些類名稱位於內存流中。 –

+1

如果你想要做的只是隱藏一些名字,任何好的黑客都會破解你的應用。如果他們能夠檢查內存中的解壓縮可執行文件,那麼他們將能夠完成剩下的工作。這個問題似乎有所變化。 –

回答

2

如果您要從可執行文件中刪除類名,那麼您的應用程序將停止工作。編譯到您的應用程序中的.dfm文件包含類名稱。運行時流式處理框架需要能夠在類註冊表中查看這些類,並且不需要名稱,那麼您的表單及其屬性就不能流式傳輸。

最重要的是,正如AlexSC指出的那樣,TObject.ClassName的實現要求類的名字在可執行文件中出現。

+0

除此之外,這些字符串也由方法TObject.ClassName返回。所以,就像大衛說的那樣,這些名字必須在.EXE文件中。 – AlexSC

+0

@David Heffernan,對於可視化組件的表單沒問題,但是例如爲了驗證我的串行應用程序,我使用了一些安全類,並且我沒有在我的TSerialCheckSum對象的任何地方使用TObject.ClassName。所以可能會擦除類名,至少在安全類中是這樣。 –

+8

只給這個類別一個非描述名稱 –