2011-02-04 197 views
2

我正在創建一個啓動JVM的應用程序(使用JRE的副本)。如果我編輯rt.jar,例如刪除用戶不應該訪問的功能,它是否會以某種方式破壞JRE?可以修改rt.jar嗎?

編輯:應用程序涉及下載代碼到用戶的機器上,所以它會限制代碼而不是用戶。我應該澄清一點。

回答

5

通常,刪除功能的最好方法是使用SecurityManager。這允許您控制可以訪問的內容或可以執行的關鍵操作。

1

完全取決於你「刪除」。但它可能。只要你不打破任何東西,刪除依賴等...

如果你想做一些安全明智的事情。你如何確保你只有你完全控制用戶JRE?

如果是這樣的話。你的做法會對你的應用程序無法做什麼有什麼好處?

但它的可能性和一個有效的想法出於某些原因。但他們主要是基準測試,開發,調試。例如轉儲未加密的字節碼

也請注意授權問題。您可能無法合法銷售或運送此物品。

0

如果你問這是否合法,我不知道,但有可能它不是。 (如果你打算出售你的產品,那就是說,對於研究或娛樂用途來說,它可能就是這樣。)

技術上沒關係嗎?如果你知道你在做什麼,它可以。

雖然它有意義嗎?客戶端安裝另一個虛擬機有多困難,或者只是將黑客rt.jar替換爲一個未被感染的虛擬機?

而在更抽象的層面上:將潛在的罪犯對待客戶是個好主意嗎?假設他們要嘗試的第一件事是破解你的系統。 (請注意,我不知道你的客戶,所以你也許是對的,但問題是值得問的。)

1

你爲什麼問,你可能會打破一些協議/許可證,除此之外沒關係。

我不這樣做這一點,但改變引導加載程序的類路徑的rt.jar之前加載我的班,等等,這是合法的:)

到底:獲得的NoClassDefFoundError AINT冷靜,不管你如何看它。

+0

如果你有不想讓用戶訪問的功能,你最好不要這樣做 - 編寫一個ClassLoader來將API列入黑名單(或者如果你願意,可以將其列入白名單)。這部分是谷歌用Google App Engine做的。 – 2011-02-04 19:48:54

+0

@Chris Kaminski,我不這樣做,以防止任何人訪問任何東西。這是一個AppServer,它在某些庫中有一些優化/修復。防止黑名單用戶需要一個完整的SecurityModel。每個虛擬機運行多個單一用戶應用程序也不起作用,因此也可以在操作系統級別切斷功能。 – bestsss 2011-02-04 19:59:49

8

有一個很好的機會,你打破了一些東西,直到運行時纔會明顯。

但或許更重要的是發牌的問題:你的應用程序已經推出了自己的JRE,這你允許這樣做的版本,除了你不能修改你分發JRE,按the J2SE license

[...] (一)將軟件分發完整,未經修改的,只有 捆綁爲您的applet和應用程序(「程序」)的一部分,

這也是值得商榷何謂「刪除用戶不應該擁有的功能接觸到「。您的應用程序在用戶帳戶的上下文中執行,並且已經從JRE刪除任何功能:

  • 如果操作系統允許該用戶的會話的上下文特定的動作,則有另一種方式來做到這一點 - 因此,您處於與rt.jar混淆之前的相同位置。您的用戶只能進行系統調用。

  • 如果操作系統不允許在用戶會話的上下文中執行該操作,那麼無論這些類是否存在,JVM都將無法執行該操作,因此整個問題都沒有實際意義。