2010-01-05 32 views
0

從我所瞭解的情況來看,模糊java web應用程序只會讓讀取應用程序變得困難一些,但逆向工程仍然是可能的。模糊java web應用程序

我的目標就是使它非常難讀,而不是有能力反編譯和運行(不知道如果可能的話,我想它仍然只是醜陋的變量名??運行)

所以變量名稱如:

String username =「asdfsadf」;

將變得

字符串aw34Asdf234jkasdjl_asdf2343 = 「asdfsdaf」;

這是正確的:

  1. 公共類和變量保持不變
  2. 唯一的民營串/類/方法可以改名
  3. 串encrytion可以用於像加密密鑰一些敏感字符串數據等

真的,我的目標是讓別人不能只是反編譯和釋放代碼。

+0

這是什麼問題? – 2010-01-05 03:56:19

+0

你是否害怕向世界展示你的代碼? :P – shylent 2010-01-05 08:36:41

回答

2

這裏的問題是,編譯代碼時需要使用正確的java語法。因此,無論您使用什麼模糊處理,只要能夠訪問字節碼,我都可以找出重構源代碼的方法。

http://www.program-transformation.org/Transform/JavaDecompilers#Java_Bytecode_Decompilers

什麼,你需要做的就是保持軟件的專有部分,使得你的海盜將無法看到它的地方。據我所知,這是避免劫持你的軟件的唯一方法。

3

有很多好的Java混淆器可以完成你所說的,等等。下面是一些來自谷歌:

雖然這使它更難以閱讀反編譯的代碼(和一些反編譯器將拒絕甚至嘗試) ,請記住它是總是如果他們有二進制代碼,並且知識豐富且足夠耐心,那麼有可能對代碼進行反向工程。

+0

只是爲了重申,反向工程源仍然會被混淆。 – 2010-01-05 04:05:46

+0

反編譯的代碼會被混淆; *反向工程*通常指的是「手工反編譯」的代碼,這對於混淆字節碼來說很難做到。 – 2010-01-05 04:19:08

1

您無法禁止反編譯和運行Java代碼。即使被混淆了,儘管存在混淆,但仍然有人能夠弄清楚你的代碼在做什麼。 您發佈的所有內容都可以進行反向設計。

在其他語言中,爲了防止反編譯和調試,例如磁盤拷貝保護解決方案,甚至他們經常被反向工程化和被黑客入侵,其存在更多的努力。

如果你不想讓人們對你的代碼進行逆向工程,只讓它運行在服務器端,不要發佈它並儘可能地強化服務器。

+0

「您發佈的所有內容都可以進行反向設計」 - 正確。關鍵是反向工程的成本是多少。 – 2010-07-02 20:27:53

5

Web應用程序運行服務器端。客戶不會看到代碼,除非你搞砸了。

0

沒有任何模糊處理可以保護您免遭「反編譯&再次編譯」(無需試圖瞭解代碼的作用)。反編譯器不關心不可讀的變量名,也不關心編譯器。

順便說一句,如果有人有權訪問您的代碼,他們不需要反編譯使用它。

所以問題是:你想達到什麼目的?當你知道這一點時,你可以去下一個問題:它需要多少錢,我可以賺多少錢?

通常,這個等式是:你不能從混淆中保存/賺取任何錢,但這樣做會花費你的時間和金錢(好的混淆器不是免費的)。所以這是一個負面的投資回報率。

相反,嘗試這種方法:創建一個優秀的產品(讓人們覺得它是合理的付費),快速修復錯誤( - >盜賊必須一次又一次地盜取你的工作以保持連續),添加新功能。這樣,誠實的消費者有理由向你購買。

如果你打算從盜賊和罪犯那裏得到錢,那麼忘了吧。無論如何,他們都不想付錢給你。你可以讓自己的生活變得更艱難,但需要付出代價。