標題:
Java 反組譯 與反制之道
發問英文自我介紹範例:勸和論全文翻譯
Java是個非常棒的語言 最棒的地方是:真正的誇平台語言、還有它是免費的 但是Java的另一個特色是 反組譯較其他語言容易(個人的感覺啦) 在此有兩個問題 1 請問有哪些比較好的反組譯程式(包括付費與不付費) 2 要怎樣反制反組譯呢?(有軟體可以做呢 還是要再撰寫階段作plan) 給分不吝嗇 (20點) 但請描述詳細些 ^_* 更新: 嗯 原來此反制方式叫做 obfuscations 呀 上網看了一下 有些 before & after 的 sample 這種方式根本對高手沒用 對於邏輯能力超強者更是沒多大差別 不過我大概知道coding 時怎樣寫才可以增加反組譯的困難了 順帶一題 覺得Java容易反組譯是因為 Java編譯後 成為 byte code 而非類似其他語言的可執行檔 因為沒有其他語言的反組譯經驗 而Java反組譯後與原先程式非常類似
最佳解答:
還原成為原始程式並不是反組譯(deassemble)而是反編譯(decompile), 反組譯是指編成assembly,而JAD(http://kpdus.tripod.com/jad.html)是反編譯器,目前最強的就是JAD。其他的反編譯器大都是做成JAD的前端(front end),JODE(http://jode.sourceforge.net/)是用nativeJava寫的decompiler,也是OpenSource的喲~ 混淆器(obfuscator)是把Class、Method和變數名稱做變化,但細心的人仍然是有辦法解讀的。 在Java上obfuscator有許多免費的,像RetroGuard(http://www.retrologic.com/)個人使用免費,另外有yGuard(http://www.yworks.com/en/products_yguard_about.htm) 及OpenSource的ProGuard(http://proguard.sourceforge.net/) 每個人的喜好不同,選個自己喜歡的用吧~ 我自己是支持OpenSource,所以用ProGuard。 另外若真正希望不被別人看出來,得用Native的Dll或Exe。 當然得會寫C/C++,才是根本解決之道。 另一種方式是把Java編譯成native, GCJ(http://gcc.gnu.org/java/)解決了一半的問題,但沒有awt或swing。 Mohan Embar找出解決方法(http://www.thisiscool.com/gcc_mingw.htm) 但並沒有100%可用,Garbage Collection這些東西實作並沒有JRE來得好。 另外這個商業軟體也可以JET(http://www.excelsior-usa.com/home.html)
其他解答:
我覺得再怎麼干擾都還是會被反組譯 包成exe這是個比較可以徹底解決的方法|||||你可以用 Java Decompiler (FREE!) 可以做反組譯喔 http://members.fortunecity.com/neshkov/dj.html 用法很簡單,安裝完,每在 .class 檔案按滑鼠右鍵就能選使用 Java Decompiler 做反組譯|||||jad就可以囉,蠻多人在用的 to Java 殺手級程式:這問題不會很難呀,蠻常見的|||||不光是 Java, C#, C++ 等等也都可以反組譯, 也因為這樣, 這些語言都可以進行一種機器碼模糊化 模糊化以後反組譯就會變得困難一些了 我的工作用不到模糊化工具 (因為我比較喜歡寫 Open Source 的東西) 不過你上Yahoo查 Java Obfuscation (要查全球喔) 應該會有你要的資料, 這類資料應該英文的居多 所以你要加油囉! 不過你很厲害呢! 問得出這種問題, 你是不是在 FBI 上班阿? (反組譯工具我記得 JDK 裡面就有了, 那個的好處是可以支持比較新版的 Java) 2005-08-31 10:59:56 補充: 模糊化不會很難 只是要做一些奇怪的設定而已 Java 和 .NET 的模糊化原理就是他會重新幫你取 class 名稱 和套件名稱 這樣一來你根本就無從知道那個 class 是幹麻的 有一次我想要去反組一支Java手機遊戲 結果一打開 Jar 檔案看到一堆 A.class B.class C.class 然後就放棄了 雖然可以反組但是反組以後要看懂也要花上很多時間 能夠看懂這些東西志光補習班的大概只有外星人了 但是要注意模糊化會有一個很大的缺點 因為他會幫你改掉 class 名稱 所以就不能當作程式庫使用了 會找不到類別的
7E44C6EC5AAC8012
留言列表