當前位置:首頁 » 編程軟體 » 反編譯軟體運行速度

反編譯軟體運行速度

發布時間: 2022-05-29 20:48:32

A. 安卓APP的廣告如何去除嚴重影響軟體打開速度。如圖:

理論上可以反編譯破除,但是反編譯之後除非破解Android核心,不然不能安裝,雖然可以自己簽個名,但是回導致簽名沖突無法升級,反編譯需要掌握編程語言,c啟蒙,java撐大梁

B. linux 下,編譯時啟用-g選項,會不會影響運行速度。發布版本時,要不要啟用-g選項

加上-g後肯定會影響運行效率的,而且包含代碼的很多信息,一來為了提高效率,二是防止被別人很容易的反編譯,發布時使用strip去除debug信息。

C. JAVA反編譯軟體

由於JAVA語言安全性高、代碼優化、跨平台等特性,從1995年5月由SUN公司發布後,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。 不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環境中,這使得JAVA的反編譯要比別的高級語言容易實現,並且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。 為了更好地保護知識產權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地採取保護措施。 目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品: 一、 應用廣泛的JAD 在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI』s Java Class Viewer和國產的JAVA源代碼反編譯專家。 JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。 JAD是使用Microsoft Visual C++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD 1.5.8f版本為例): -d - 用於指定輸出文件的目錄 -s - 輸出文件擴展名(默認為: .jad),通常都會把輸出文件擴展名直接指定為.java,以方便修改的重新編譯。 -8 - 將Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正確顯示。 最常用的反編譯指令如下所示: Jad –d c:\javasource –s .java -8 javatest.class 這條指令將當前目錄下的javatest.class反編譯為javatest.java並保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。 二、 源碼開放的JODE JODE是全球最大的開源項目網站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術等,更是出類拔粹。 JODE本身也是純JAVA開發的,最近越來越多的JAVA反編譯軟體也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit』s JavaInsight plugin等。 JODE是一個可運行的JAR文件,在windows環境下雙擊即可運行。 需要特別說明的是,JODE不是通過常規的Open->File的方式來載入JAVA編譯後的類文件(*.class)或是類包(*.jar)的, 而是通過在Options菜單中的Set Classpath來實現的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然後再選擇Reload Classpath即可。 新加入的類包或是類的名字會在左側窗口出現,雙擊類包名可以展開目錄樹結構,雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯後的源代碼。 三、 獨樹一幟的DAVA DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優化工具Soot的一部分。Soot和JODE一樣是純JAVA開發的,也是一個獨立的JAR包,但卻不能通過雙擊直接運行,而是象JAD一樣在命令行狀態運行。 Soot對環境變數的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設置: Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.; 其中的c:\sootdi

D. apk反編譯出現異常,誰能告訴我是怎麼回事

我用的是apk改之理,反編譯異常應該是apk安裝包不完整,也就是說系統把apk進行了odex優化,把apk安裝包里後綴dex的文件提取出來,從而加快軟體運行速度,網上下個odex合並工具試一下,雖然我試過合並odex和apk文件,結果還是反編譯失敗。

E. JAVA反編譯軟體

由於JAVA語言安全性高、代碼優化、跨平台等特性,從1995年5月由SUN公司發布後,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。
不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環境中,這使得JAVA的反編譯要比別的高級語言容易實現,並且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。
為了更好地保護知識產權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地採取保護措施。
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:
一、 應用廣泛的JAD
在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI』s Java Class Viewer和國產的JAVA源代碼反編譯專家。
JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。
JAD是使用Microsoft Visual C++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD 1.5.8f版本為例):
-d
- 用於指定輸出文件的目錄
-s - 輸出文件擴展名(默認為: .jad),通常都會把輸出文件擴展名直接指定為.java,以方便修改的重新編譯。
-8 - 將Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正確顯示。
最常用的反編譯指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
這條指令將當前目錄下的javatest.class反編譯為javatest.java並保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。

二、 源碼開放的JODE
JODE是全球最大的開源項目網站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術等,更是出類拔粹。
JODE本身也是純JAVA開發的,最近越來越多的JAVA反編譯軟體也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit』s JavaInsight plugin等。
JODE是一個可運行的JAR文件,在windows環境下雙擊即可運行。
需要特別說明的是,JODE不是通過常規的Open->File的方式來載入JAVA編譯後的類文件(*.class)或是類包(*.jar)的, 而是通過在Options菜單中的Set Classpath來實現的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然後再選擇Reload Classpath即可。
新加入的類包或是類的名字會在左側窗口出現,雙擊類包名可以展開目錄樹結構,雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯後的源代碼。

三、 獨樹一幟的DAVA
DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優化工具Soot的一部分。Soot和JODE一樣是純JAVA開發的,也是一個獨立的JAR包,但卻不能通過雙擊直接運行,而是象JAD一樣在命令行狀態運行。
Soot對環境變數的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當前目錄,如果不加上這個的話Soot經常會報一個找不到類的錯誤。
DAVA是作為Soot的一個參數使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最後的類名不用帶.class後綴,因為它默認是處理class文件,這個操作與前述的JAD的參數效果相同。
DAVA採取了流程優化的方式進行反編譯,與傳統反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。
上述的三種工具各有千秋,但效果都非常不錯。經測試,它們基本上都可以把JDK自帶的一些常式完全反編譯,然後不加任何修改可再編譯成功,並能正常運行!

F. 請各位高手幫幫忙,關於電腦病毒的問題

explorer.exe是Windows程序管理器或者Windows資源管理器,它用於管理Windows圖形殼,包括開始菜單、任務欄、桌面和文件管理。刪除該程序會導致Windows圖形界面無法適用。注意:explorer.exe也有可能是w32.Codered和w32.mydoom.b@mm病毒。該病毒通過email郵件傳播,當你打開病毒發送的附件時,即被感染。該病毒會在受害者機器上建立SMTP服務。該病毒允許攻擊者訪問你的計算機、竊取密碼和個人數據。該進程的安全等級是建議刪除。

2.適時砍掉Explorer.exe

大家都知道WINDOWS在運行時會自動載入Explorer.exe進程,這個進程主要負責顯示系統桌面的圖標,任務欄等,相當於WINDOWS的臉面,有時放下系統的面子,卻能解決不少問題!請看:

1.讓注冊錶快速生效
有時候修改完注冊表信息後需要點擊F5按鈕,當F5沒用時候則需要重新啟動,才能使修改生效,其實不需要這么麻煩.按下"CTRL+ALT+DEL",打開任務管理器結束進程選項中的Explorer.exe,然後在點擊"任務管理器"中的"新建任務",在打開的文本框中輸入Explorer.exe,然後回車確認,就重新載入了Explorer.exe,讓注冊錶快速生效.
2.刪除頑固文件,替換系統文件
當要刪除文件的時候,.提示"該文件正被別的進程使用,不能刪除",如果關閉使用該文件的程序或在"任務管理器中"結束該文件中後好不能刪除,可以結束Explorer.exe然後在命令提示符窗口進入該文件的所在目錄,用"DEL"命令刪除後,重新載入Explorer.exe即可.
替換系統文件時,按照以上方法在命令提示符窗口用"COPY"命令或者"RELAACE"命令就可以替換系統文件.
3.緩解系統反應遲緩
如果打開太多的應用程序,WINDOWS就會停止響應而類似死機時,可以不需要重啟系統,可以按下"CTRL+ALT+DEL"組合鍵,打開"任務管理器"結束佔用大部分CPU資源的Explorer.exe,然後再重新載入.就可以恢復正常.
4.加速軟體運行速度
在低配置系統中使用很耗系統資源的軟體比如"PHOTOSHOP,AUTOCAD"等是,在打開軟體後,結束Explorer.exe進程,騰出比較多的內存空間,加快軟體運行速度,要返回桌面只要重新載入Explorer.exe進程。信息來源:不詳

IEXPLORE.EXE是病毒嗎?
在進程里先結束IEXPLORE.EXE然後到網上找相關的殺毒工具

iexplore.exe是Microsoft Internet Explorer的主程序。這個微軟Windows應用程序讓你在網上沖浪,和訪問本地Interanet網路。這不是純粹的系統程序,但是如果終止它,可能會導致不可知的問題。iexplore.exe同時也是Avant網路瀏覽器的一部分,這是一個免費的基於Internet Explorer的瀏覽器。注意iexplore.exe也有可能是Trojan.KillAV.B病毒,該病毒會終止你的反病毒軟體,和一些Windows系統工具,該進程的安全等級是建議刪除
這個東西可以說是病毒,也可以說不是病毒。
因為微軟的瀏覽器就是IEXPLORE.EXE,但是它一般情況隨系統被安裝在C:\Program Files\Internet Explorer下面。那麼,如果發現這個文件是在這個目錄下面的,一般情況不是病毒,當然,不包括已經被感染了的情況;還有一種情況,就是IEXPLORE.EXE在C:\WINDOWS\system32\下面,那麼這個十有八九都是病毒。

動態鏈接庫函數啟動器——Rundll32

經常聽到有些朋友說:呀!系統的注冊表啟動項目有rundll32.exe,系統進程也有rundll32.exe,是不是病毒呀?其實,這是對rundll32.exe介面不了解,它的原理非常簡單,了解並掌握其原理對於我們平時的應用非常有用,如果能理解了原理,我們就能活學活用,自己挖掘DLL參數應用技巧。

Rundll32.exe和Rundll.exe的區別

所謂Rundll.exe,可以把它分成兩部分,Run(運行)和DLL(動態鏈接庫),所以,此程序的功能是運行那些不能作為程序單獨運行的DLL文件。而Rundll32.exe則用來運行32位DLL文件。Windows 2000/XP都是NT內核系統,其代碼都是純32位的,所以在這兩個系統中,就沒有rundll.exe這個程序。

相反,Windows 98代碼夾雜著16位和32位,所以同時具有Rundll32.exe和Rundll.exe兩個程序。這就是為什麼Windows 98的System文件夾為主系統文件夾,而到了Windows 2000/XP時就變成System32為主系統文件夾(這時的System文件夾是為兼容16位代碼設立的)。

Rundll.exe是病毒?

無論是Rundll32.exe或Rundll.exe,獨立運行都是毫無作用的,要在程序後面指定載入DLL文件。在Windows的任務管理器中,我們只能看到rundll32.exe進程,而其實質是調用的DLL。我們可以利用進程管理器等軟體來查看它具體運行了哪些DLL文件。

有些木馬是利用Rundll32.exe載入DLL形式運行的,但大多數情況下Rundll32.exe都是載入系統的DLL文件,不用太擔心。另外要提起的是,有些病毒木馬利用名字與系統常見進程相似或相同特點,瞞騙用戶。所以,要確定所運行的Rundll32.exe是在%systemroot%system32目錄下的,注意文件名稱也沒有變化。

相信大家在論壇上很常看見那些高手給出的一些參數來簡化操作,如rundll32.exe shell32.dll,Control_RunDLL,取代了冗長的「開始→設置→控制面板」,作為菜鳥的我們心裡一定癢癢的。他們是怎麼知道答案的?我們如何自己找到答案?分析上面命令可以知道,其實就是運行Rundll32.exe程序,指定它載入shell32.dll文件,而逗號後面的則是這個DLL的參數。了解了其原理,下面就可以自己挖掘出很多平時罕為人知的參數了。

第一步:運行eXeScope軟體,打開一個某個DLL文件,例如shell32.dll。

第二步:選擇「導出→SHELL32.DLL」,在右邊窗口就可以看到此DLL文件的參數了。

第三步:這些參數的作用一般可以從字面上得知,所以不用專業知識。要注意的是,參數是區分大小寫的,在運行時一定要正確輸入,否則會出錯。現在隨便找一個參數,例如RestartDialog,從字面上理解應該是重啟對話框。組合成一個命令,就是Rundll32.exe shell32.dll,RestartDialog ,運行後可以看見平時熟悉的Windows重啟對話框。

現在,我們已經學會了利用反編譯軟體來獲取DLL文件中的參數,所以以後看到別人的一個命令,可以從調用的DLL文件中獲取更多的命令。自己摸索,你就能了解更多調用DLL文件的參數了。

小資料

常用的rundll32參數

命令: rundll32.exe shell32.dll,Control_RunDLL

功能: 顯示控制面板

命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1

功能: 顯示「控制面板→輔助選項→鍵盤」

命令: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1

功能: 執行「控制面板→添加新硬體」

命令: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter

功能: 執行「控制面板→添加新列印機」

命令:rundll32.exe DISKCOPY.DLL,DiskCopyRunDll

功能:啟動軟盤復制窗口

G. 關於學JAVA

一. 工具的重要性

江湖中人為搶奪"屠龍刀"等神兵利器而掀起陣陣腥風血雨。世界列強為稱霸世界或求自保而爭相研發核武器、航空母艦。為什麼?是因為認識到工具對人類的重要性。

《現代漢語詞典》上對人的定義是:人是能製造工具並使用工具進行勞動的高等動物。一部生產力發展史,就是人的生產工具不斷發明改變的歷史;一部社會發展史,是社會工具即組織及其制度發明、運用和變更的歷史;而一部科學史,就是人用自然和人工的語言、邏輯規范,以及使用多種實驗工具的認識史或發現史。可見工具之於人類是多麼的重要。JAVA開發人員當然也不例外,在開發過程中需要用到形形色色的工具,這些工具可以幫助我們高效率的開發出滿足客戶需要的產品。

2004年01月07日, 由10家軟體公司組成的JavaToolsCommunity(JTC)組織宣布成立。該組織致力於為開發商提供更為簡單和高效的Java工具。JTC還希望為Java整合開發環境(IDE)提供一個通用的插件(add-on,plug-in)系統。通過建立一個插件與Java工具連接的標准化途徑,開發商就能夠混合使用來自不同供應商的各種不同工具。JTC目前正在開發一個名為JSR198的插件標准化系統。令人關注的Java工具重量級企業IBM和Borland目前還拒絕加入該組織,原因是什麼?筆者認為根本原因在於這兩家公司都擁有出色的JAVA開發工具。Borland的JBuilder,IBM支持的Eclipse,這兩種IDE占據了絕大多數的市場份額。因此他們不想加入由SUN公司把持話語權的JTC也就可想而知了。在工具的標准方面,又一場龍虎鬥拉開了序幕。

二.工具分類

那麼JAVA開發人員需要什麼類型的工具?如何選擇工具?我們下面就開始分類進行探討。

1. 純文本開發工具

在開始學習JAVA的時候,我們一般使用純文本的開發工具來編寫JAVA程序。常見的純文本編輯工具有Notepad記事本、Editplus、VI、Emacs、JCreator、UltraEdit等等。其中VI、Emacs是在Linux環境下使用,其餘工具在Windows下使用。Notepad不支持關鍵詞高亮顯示,並且需切換到命令終端編譯運行,因此一般使用在機器上沒有別的編輯器的臨時場合。JCreator支持關鍵詞高亮顯示,但只能夠用於編寫JAVA Applet及Application,在學習J2SE的時候使用的人還挺多的。

UltraEdit是一個很好的文字、Hex、ASCII 碼編輯器,它的默認配置可以對C/C++, VB, HTML, Java和 Perl進行語法著色。可同時編輯多個文件。一般常會用其來修改EXE或DLL文件,如破解軟體、修改游戲等等。與EditPlus很相似。

EditPlus 是 32 位文本編輯程序器,它可以完全替換記事本,它也提供網頁開發人員及程序設計師許多強悍的功能。支持HTML、CSS、PHP、ASP、Perl、C/C++、Java、JavaScript 及 VBScript的語法關鍵詞高亮顯示。並且它可以在自定義語法文件後擴充支持其他的程序設計語言。嵌合網頁瀏覽器作 HTML 頁的預覽,及 FTP 命令做本地文件上傳到 FTP 伺服器。在JAVA開發人員中很有市場,尤其是初學者。我們把編輯、編譯、運行Applet/Application都集成在Editplus中,可以認為它就是一個小型的IDE。也是筆者鍾愛的開發工具,強烈推薦。

2.反編譯、混淆器工具

由於黑客的頻繁活動,使得Java類文件面臨著反編譯的挑戰。有一些工具能夠對Java源代碼進行反工程,其結果甚至以比普通Java文件更可讀的方式, 盡管普通的Java文件(由於代碼風格不同)有注釋。許可證和軟體過期對於用戶們來說將變得無用 。因此,防止軟體被反編譯或使得反編譯的結果變得無意義對於Java來說非常重要。混淆器能夠保護軟體使之不被反編譯。它通過混淆類文件使得反編譯無效,並把敏感的名字指代變成另一個名字空間,這樣可以使反編譯的結果毫無疑義。

反編譯器能夠把位元組碼class文件反編譯成源代碼, 混淆器能夠保護軟體使之不被反編譯, 反編譯器與混淆器是矛與盾的關系。

JAD、Decafe Pro、DJ Java Decompiler都是Java Class文件的反編譯軟體。JAD是字元終端的工具,Decafe Pro與DJ Java Decompiler都是GUI界面,在功能上幾乎所有的反編譯器都差不多,選擇哪種就看你的愛好了。不過值得一提的是DJ Java Decompiler,它不需要額外安裝JVM(Java Virtual Machine)或是JDK的工具即可使用。不單如此,DJJava Decompiler也兼具有Java程序編輯工具的角色,提供一些輔助功能便於程序撰寫與修改,因此值得推薦。另外還有國內程序員編寫的"小穎JAVA源代碼反編譯超級引摯",支持目錄級的反編譯,為支持國貨起見,在此推薦。

DashO是第三代的Java混淆器(obfuscator)、壓縮機(compactor)、優化工具和水印工具,功能很強大,它可以為您的JAVA程序提供反編譯保護、提高運行速度和減少程序體積,可惜不是免費的。免費的混淆器有ProGuard RetroGuard以及SUN公司的JODE等等。還有就是多數人使用的JBuilder、Eclipse中集成的混淆器。

3.調試工具

在JAVA語言的早期,一個典型的開發者使用非常陳舊的方法調試程序:使用System.out.println() 方法,現在還依然常用。代碼的跟蹤信息被列印到控制台、文件或者套接字。當要發布我們的軟體時不得不逐個找到這些調試輸出,把它們注釋掉,當需要維護軟體時又要去開啟這些調試輸出,煩不勝煩。因此逐漸發展出其他的一些調試工具。

下面總結幾種JAVA調試工具:

●IDE(集成開發環境) 包含它們自己的調試器 (例如JBuilder、Eclipse)

●單獨的GUI工具 (例如JIKES, JAVADT, 以及JProbe)

●基於文本和命令行的工具 (例如Sun JDB)

●野蠻的使用編輯器 (例如Notepad 或者 VI) 檢查堆棧描繪(stack traces)

IDE 和獨立的GUI 調試器對於初學者是最容易的並且被證明是最節省時間的。調試器將引導你到程序崩潰的地方。在調試器裡面執行程序,使用滑鼠設置斷點並穿越代碼。使用這些調試器的不利方面是並非所有的IDE調試器都支持最新的Java API和技術 (例如servlets 和 EJB 組件)。

H. 如何保護Java程序 防止Java反編譯

Java是一種跨平台的、解釋型語言。Java 源代碼編譯中間「位元組碼」存儲於class文件中。Class文件是一種位元組碼形式的中間代碼,該位元組碼中包括了很多源代碼的信息,例如變數名、方法名等。因此,Java中間代碼的反編譯就變得非常容易。目前市場上有許多免費的、商用的反編譯軟體,都能夠生成高質量的反編譯後的源代碼。所以,對開發人員來說,如何保護Java程序就變成了一個非常重要的挑戰。本文首先討論了保護Java程序的基本方法,然後對代碼混淆問題進行深入研究,最後結合一個實際的應用程序,分析如何在實踐中保護Java程序。 反編譯成為保護Java程序的最大挑戰 通常C、C++等編程語言開發的程序都被編譯成目標代碼,這些目標代碼都是本機器的二進制可執行代碼。通常所有的源文件被編譯、鏈接成一個可執行文件。在這些可執行文件中,編譯器刪除了程序中的變數名稱、方法名稱等信息,這些信息往往是由內存地址表示,例如如果需要使用一個變數,往往是通過這個變數的地址來訪問的。因此,反編譯這些本地的目標代碼就是非常困難的。 Java語言的出現,使得反編譯變得非常容易而有效。原因如下:1.由於跨平台的需求,Java的指令集比較簡單而通用,較容易得出程序的語義信息;2.Java編譯器將每一個類編譯成一個單獨的文件,這也簡化了反編譯的工作;3.Java 的Class文件中,仍然保留所有的方法名稱、變數名稱,並且通過這些名稱來訪問變數和方法,這些符號往往帶有許多語義信息。由於Java程序自身的特點,對於不經過處理的Java程序反編譯的效果非常好。 目前,市場上有許多Java的反編譯工具,有免費的,也有商業使用的,還有的是開放源代碼的。這些工具的反編譯速度和效果都非常不錯。好的反編譯軟體,能夠反編譯出非常接近源代碼的程序。因此,通過反編譯器,黑客能夠對這些程序進行更改,或者復用其中的程序。因此,如何保護Java程序不被反編譯,是非常重要的一個問題。 常用的保護技術 由於Java位元組碼的抽象級別較高,因此它們較容易被反編譯。本節介紹了幾種常用的方法,用於保護Java位元組碼不被反編譯。通常,這些方法不能夠絕對防止程序被反編譯,而是加大反編譯的難度而已,因為這些方法都有自己的使用環境和弱點。 隔離Java程序 最簡單的方法就是讓用戶不能夠訪問到Java Class程序,這種方法是最根本的方法,具體實現有多種方式。例如,開發人員可以將關鍵的Java Class放在伺服器端,客戶端通過訪問伺服器的相關介面來獲得服務,而不是直接訪問Class文件。這樣黑客就沒有辦法反編譯Class文件。目前,通過介面提供服務的標准和協議也越來越多,例如 HTTP、Web Service、RPC等。但是有很多應用都不適合這種保護方式,例如對於單機運行的程序就無法隔離Java程序。這種保護方式見圖1所示。 圖1隔離Java程序示意圖 對Class文件進行加密 為了防止Class文件被直接反編譯,許多開發人員將一些關鍵的Class文件進行加密,例如對注冊碼、序列號管理相關的類等。在使用這些被加密的類之前,程序首先需要對這些類進行解密,而後再將這些類裝載到JVM當中。這些類的解密可以由硬體完成,也可以使用軟體完成。 在實現時,開發人員往往通過自定義ClassLoader類來完成加密類的裝載(注意由於安全性的原因,Applet不能夠支持自定義的ClassLoader)。自定義的ClassLoader首先找到加密的類,而後進行解密,最後將解密後的類裝載到JVM當中。在這種保護方式中,自定義的ClassLoader是非常關鍵的類。由於它本身不是被加密的,因此它可能成為黑客最先攻擊的目標。如果相關的解密密鑰和演算法被攻克,那麼被加密的類也很容易被解密。這種保護方式示意圖見圖2。 圖2 對Class文件進行加密示意圖 轉換成本地代碼 將程序轉換成本地代碼也是一種防止反編譯的有效方法。因為本地代碼往往難以被反編譯。開發人員可以選擇將整個應用程序轉換成本地代碼,也可以選擇關鍵模塊轉換。如果僅僅轉換關鍵部分模塊,Java程序在使用這些模塊時,需要使用JNI技術進行調用。 當然,在使用這種技術保護Java程序的同時,也犧牲了Java的跨平台特性。對於不同的平台,我們需要維護不同版本的本地代碼,這將加重軟體支持和維護的工作。不過對於一些關鍵的模塊,有時這種方案往往是必要的。 為了保證這些本地代碼不被修改和替代,通常需要對這些代碼進行數字簽名。在使用這些本地代碼之前,往往需要對這些本地代碼進行認證,確保這些代碼沒有被黑客更改。如果簽名檢查通過,則調用相關JNI方法。這種保護方式示意圖見圖3。 代碼混淆
圖3 轉換成本地代碼示意圖 代碼混淆是對Class文件進行重新組織和處理,使得處理後的代碼與處理前代碼完成相同的功能(語義)。但是混淆後的代碼很難被反編譯,即反編譯後得出的代碼是非常難懂、晦澀的,因此反編譯人員很難得出程序的真正語義。從理論上來說,黑客如果有足夠的時間,被混淆的代碼仍然可能被破解,甚至目前有些人正在研製反混淆的工具。但是從實際情況來看,由於混淆技術的多元化發展,混淆理論的成熟,經過混淆的Java代碼還是能夠很好地防止反編譯。下面我們會詳細介紹混淆技術,因為混淆是一種保護Java程序的重要技術。圖4是代碼混淆的示意圖。
圖4 代碼混淆示意圖 幾種技術的總結 以上幾種技術都有不同的應用環境,各自都有自己的弱點,表1是相關特點的比較。 混淆技術介紹 表1 不同保護技術比較表
到目前為止,對於Java程序的保護,混淆技術還是最基本的保護方法。Java混淆工具也非常多,包括商業的、免費的、開放源代碼的。Sun公司也提供了自己的混淆工具。它們大多都是對Class文件進行混淆處理,也有少量工具首先對源代碼進行處理,然後再對Class進行處理,這樣加大了混淆處理的力度。目前,商業上比較成功的混淆工具包括JProof公司的1stBarrier系列、Eastridge公司的JShrink和4thpass.com的SourceGuard等。主要的混淆技術按照混淆目標可以進行如下分類,它們分別為符號混淆(Lexical Obfuscation)、數據混淆(Data Obfuscation)、控制混淆(Control Obfuscation)、預防性混淆(Prevent Transformation)。 符號混淆 在Class中存在許多與程序執行本身無關的信息,例如方法名稱、變數名稱,這些符號的名稱往往帶有一定的含義。例如某個方法名為getKeyLength(),那麼這個方法很可能就是用來返回Key的長度。符號混淆就是將這些信息打亂,把這些信息變成無任何意義的表示,例如將所有的變數從vairant_001開始編號;對於所有的方法從method_001開始編號。這將對反編譯帶來一定的困難。對於私有函數、局部變數,通常可以改變它們的符號,而不影響程序的運行。但是對於一些介面名稱、公有函數、成員變數,如果有其它外部模塊需要引用這些符號,我們往往需要保留這些名稱,否則外部模塊找不到這些名稱的方法和變數。因此,多數的混淆工具對於符號混淆,都提供了豐富的選項,讓用戶選擇是否、如何進行符號混淆。 數據混淆 圖5 改變數據訪問 數據混淆是對程序使用的數據進行混淆。混淆的方法也有多種,主要可以分為改變數據存儲及編碼(Store and Encode Transform)、改變數據訪問(Access Transform)。 改變數據存儲和編碼可以打亂程序使用的數據存儲方式。例如將一個有10個成員的數組,拆開為10個變數,並且打亂這些變數的名字;將一個兩維數組轉化為一個一維數組等。對於一些復雜的數據結構,我們將打亂它的數據結構,例如用多個類代替一個復雜的類等。 另外一種方式是改變數據訪問。例如訪問數組的下標時,我們可以進行一定的計算,圖5就是一個例子。 在實踐混淆處理中,這兩種方法通常是綜合使用的,在打亂數據存儲的同時,也打亂數據訪問的方式。經過對數據混淆,程序的語義變得復雜了,這樣增大了反編譯的難度。 控制混淆 控制混淆就是對程序的控制流進行混淆,使得程序的控制流更加難以反編譯,通常控制流的改變需要增加一些額外的計算和控制流,因此在性能上會給程序帶來一定的負面影響。有時,需要在程序的性能和混淆程度之間進行權衡。控制混淆的技術最為復雜,技巧也最多。這些技術可以分為如下幾類: 增加混淆控制 通過增加額外的、復雜的控制流,可以將程序原來的語義隱藏起來。例如,對於按次序執行的兩個語句A、B,我們可以增加一個控制條件,以決定B的執行。通過這種方式加大反匯編的難度。但是所有的干擾控制都不應該影響B的執行。圖6就給出三種方式,為這個例子增加混淆控制。 圖6 增加混淆控制的三種方式 控制流重組 重組控制流也是重要的混淆方法。例如,程序調用一個方法,在混淆後,可以將該方法代碼嵌入到調用程序當中。反過來,程序中的一段代碼也可以轉變為一個函數調用。另外,對於一個循環的控制流,為可以拆分多個循環的控制流,或者將循環轉化成一個遞歸過程。這種方法最為復雜,研究的人員也非常多。 預防性混淆 這種混淆通常是針對一些專用的反編譯器而設計的,一般來說,這些技術利用反編譯器的弱點或者Bug來設計混淆方案。例如,有些反編譯器對於Return後面的指令不進行反編譯,而有些混淆方案恰恰將代碼放在Return語句後面。這種混淆的有效性對於不同反編譯器的作用也不太相同的。一個好的混淆工具,通常會綜合使用這些混淆技術。 案例分析 在實踐當中,保護一個大型Java程序經常需要綜合使用這些方法,而不是單一使用某一種方法。這是因為每種方法都有其弱點和應用環境。綜合使用這些方法使得Java程序的保護更加有效。另外,我們經常還需要使用其它的相關安全技術,例如安全認證、數字簽名、PKI等。 本文給出的例子是一個Java應用程序,它是一個SCJP(Sun Certificate Java Programmer)的模擬考試軟體。該應用程序帶有大量的模擬題目,所有的題目都被加密後存儲在文件中。由於它所帶的題庫是該軟體的核心部分,所以關於題庫的存取和訪問就成為非常核心的類。一旦這些相關的類被反編譯,則所有的題庫將被破解。現在,我們來考慮如何保護這些題庫及相關的類。 在這個例子中,我們考慮使用綜合保護技術,其中包括本地代碼和混淆技術。因為該軟體主要發布在Windows上,因此轉換成本地代碼後,僅僅需要維護一個版本的本地代碼。另外,混淆對Java程序也是非常有效的,適用於這種獨立發布的應用系統。 在具體的方案中,我們將程序分為兩個部分,一個是由本地代碼編寫的題庫訪問的模塊,另外一個是由Java開發的其它模塊。這樣可以更高程度地保護題目管理模塊不被反編譯。對於Java開發的模塊,我們仍然要使用混淆技術。該方案的示意圖參見圖7。 圖7 SCJP保護技術方案圖 對於題目管理模塊,由於程序主要在Windows下使用,所以使用C++開發題庫訪問模塊,並且提供了一定的訪問介面。為了保護題庫訪問的介面,我們還增加了一個初始化介面,用於每次使用題庫訪問介面之前的初始化工作。它的介面主要分為兩類: 1. 初始化介面 在使用題庫模塊之前,我們必須先調用初始化介面。在調用該介面時,客戶端需要提供一個隨機數作為參數。題庫管理模塊和客戶端通過這個隨機數,按一定的演算法同時生成相同的SessionKey,用於加密以後輸入和輸出的所有數據。通過這種方式,只有授權(有效)的客戶端才能夠連接正確的連接,生成正確的SessionKey,用於訪問題庫信息。非法的客戶很難生成正確的SessionKey,因此無法獲得題庫的信息。如果需要建立更高的保密級別,也可以採用雙向認證技術。 2. 數據訪問介面 認證完成之後,客戶端就可以正常的訪問題庫數據。但是,輸入和輸出的數據都是由SessionKey所加密的數據。因此,只有正確的題庫管理模塊才能夠使用題庫管理模塊。圖8時序圖表示了題庫管理模塊和其它部分的交互過程。 圖8 題庫管理模塊和其它部分的交互過程圖

I. 反編譯游戲

現在手機游戲 要不是JAVA 要不是 手機系統本身支持的軟體格式.
JAVA 那肯定是用JAVA寫的了, 如果是系統本身有可能是用C.

一般非智能手機 ,如摩托羅拉啊,若積壓啊都會支持JAVA,所以也只能玩JAVA格式的游戲了. 如果你手機是國產品牌的話, 就有點危險了,首先要看是否支持JAVA, 支持的話有些支持的也不是很好,當然有的還是很完美的.
如果你手機是山載 雜牌,那更危險了. 有些根本就不支持JAVA. 那什麼游戲也別想裝了. 還有這些會自帶游戲.這些游戲相當垃圾, 並且有些還扣費.
我發現,這些手好多都自帶了那幾種游戲, 都一樣, 比如 什麼摸法獸司啊等.

如果你手機為智能,那就再好不過了, 首先你要看系統是什麼型號的.
然後找這個型號支持的軟體格式. 然後下載這種格式的游戲.
當然JAVA也是支持的, 有些智能手機需要下載 軟體安裝 JAVA運行平台才可以支持JAVA, 所以論速度, 和穩定性, 玩系統本身運行的格式的游戲再好不過了.
如果需要安裝JAVA平台,就要選擇好點的程序,這樣也可以非常完美的運行JAVA.
畢竟現在JAVA游戲 相當流行和豐富, 很有新意.

還有一種游戲 就是 模擬器游戲了, 這需要是智能手機,因為模擬器軟體格式都是系統下的格式, 很少是JAVA格式,也有,我搜索過,也運行過,但在我的3星上沒成功運行. 所以 要想玩模擬器游戲還是智能比較好.

模擬器游戲是相當經典的,是JAVA游戲無法比的.

比如FC,SFC,MD,GB,GBA,等模擬器, 我的手機 運行 雪山兄弟(就是小時候在游戲廳玩的那個) 相當流暢,當然還有其他的MD ,比如吞食天地啊, 數碼寶貝(gb)等.

要想用手機玩游戲爽的話,只能是智能了.

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:647
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:939
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:634
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:823
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:734
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1069
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:302
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:163
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:855
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:765