A. 如何反編譯android 的apk/dex/odex,獲得源碼
關於APK,DEX的介紹
當我們編譯一個安卓項目的時候,整個項目會被打包成一個 .apk文件。這個文件其實是一個標準的zip文件,因此可以用解壓縮工具打開。這個apk文件一般都包含程序的代碼(在classes.dex文件中), 資源文件, 證書, manifest 文件等。 其中對我們最重要的是classes.dex文件,因為編譯後的位元組碼(bytecode)都是放在這個文件中。我們後面講的反編譯就是針對這個dex文件來的。
反編譯普通的APK文件:
對於普通的APK/DEX文件的反編譯,其實工具有很多, 包括:
ByteCode Viewer: 一個可視化的集成工具,說實話,不太好用,不夠穩定,生成代碼質量中等。
dex2jar + jd_gui: 這兩個工具組合還可以, 用起來比ByteCode Viewer麻煩一些,但比較穩定,生成代碼質量中等。
在線反編譯工具JADX: http://www.javadecompilers.com/apk , 這是基於SourceForge上的JADX的開源工具來實現的。本來以為在線反編譯質量不會好,但出人意料的是:JADX是我發現的最好的反編譯工具, 不但使用簡單(直接上傳,轉換,下載就ok),而且反編譯出來的代碼質量很高,特別是變數命名方面,可讀性很不錯。
反編譯ODEX文件:
Android 5.0 Lollipop以後,Google用ART代替了以前的Dalvik,對於普通的app來說我們仍然可以用上面的方法來把dex文件反編譯成Java源代碼。但對於系統預裝的App,特別是類似應用商店,播放器等, 你會發現這些應用的apk文件中找不到對應的classes.dex文件,而是會發現在其子目錄下有個.odex文件。 那如何反編譯這個odex文件呢?我通過google查了查,知道應該用baksmali,但從github上下載了幾個版本都不行,報各種不同錯誤。經過反復搜索和嘗試,終於找到了這篇文章
: http://www.naldotech.com/how-to-deodex-applications-on-android-5-0-lollipop/ 。 具體方法如下:
1. 從這里下載工具包, 解壓縮到本地。 這里的baksmali的版本是2.0.3. 不同版本的baksmali針對的Android內核不同。有時候高版本反倒不好用。
2. 打開工具所在目錄, 按住shift鍵, 點擊滑鼠右鍵,打開windows命令窗口
3. 把 odex文件拷貝到該目錄
4. 在命令窗口運行: oat2dex.bat *.odex. 正常情況下,應該顯示OK等信息。如果報錯的話,說明這個文件無法轉換,後面的也不用試了。
5. 運行 oat2dex.bat *.odex temp.dex . 運行後會創建一個temp.dex文件。
6. 運行 java -jar baksmali-2.0.3.jar -a 21 -x temp.dex -o source . 運行後會創建一個source的文件夾,並將temp.dex反編譯到該文件夾。-a 21 表明的是Android內核的版本21
7. 運行 java -jar small-2.0.3.jar -a 21 source -o classes.dex, 反編譯為classes.dex文件。
需要注意的是:由這種方式反編譯成的classes.dex 文件相比原生的classes.dex 還是缺少了些信息,因此反編譯這種classes.dex 文件後生成的java代碼可讀性會更差些。
8. 用在線工具JADX 來把 classes.dex 最終反編譯為java代碼。
B. macbook 可以使用apk解析工具嗎
豌豆夾有mac版的,可以用來安裝apk到手機
C. android中 如何才能顯示類的意思 見圖片
要看源碼還是要看開發者提供的類的注釋?Note代表的意思是如果你想更深入的了解該類,那必須載入源碼。因為jar包中只有class文件,沒有.java文件。
D. 如何把apk反編譯成java代碼
一、找到apk中的class.dex:
把apk文件改名為.zip,然後解壓縮其中的class.dex文件,它就是java文件編譯再通過dx工具打包成的。
1、把class.dex拷貝到dex2jar.bat所在目錄,直接拖動class.dex到dex2jar.bat,生成classes.dex.dex2jar.jar。
或者:1.在cmd下進入dex2jar.bat所在路徑,然後輸入「dex2jar.bat XXX」,XXX指的是你要反編譯的apk中的classes.dex文件所在路徑及名稱,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路徑下, classes.dex在D:\Android下,所以: 你進入dex2jar.bat路徑下後,輸入dex2jar.bat D:\Android\classes.dex,這樣會生成一個jar文件。
2.用rar解壓出jar文件中的class文件,然後用jad或DJ Java Decompiler反編譯工具將.class文件反編譯成.java文件
3、運行JD-GUI工具,打開上面的jar文件,在File下有個Save JAR Source,它可以生成src源代碼。
E. 如何反編譯android應用並重新打包
下載apktool:http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/ApkTool.shtml
運行 java -jar apktool.jar -f d <APK>文件反編譯
運行java -jar apktool.jar -f b <反編譯目錄>重新打包
可以參考:http://blog.csdn.net/vipzjyno1/article/details/21039349/
F. android源碼被混淆了怎麼還原
android源碼被混淆了還原方法為:
1、得到 classes.dex文件;直接用機器上的解壓軟體 打開 .apk 文件,解壓出 classes.dex 文件。
2、還原.jar文件;這一步需要用到一個工具 dex2jar (谷歌的代碼庫里有http://code.google.com/p/dex2jar/)下載完了,解壓,然後把第一步的 產物(即那個classes.dex文件)放到 dex2jar的解壓目錄(解壓目錄里 有 dex2jar.bat 文件,檢查一下,沒有的話說明目錄不對)。
3、查看.jar文件;這一步就是傳統的 反編譯 了,需要工具輔助,這里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)下載系統對應的版本,解壓,(xp系統)會看到一個 .exe文件,沒錯就是 單文件綠色版,雙擊,選擇 第二步 生成的 .jar,即可。
G. jeb android decompiler怎麼用
就是Android的開發工具 現在只要有 Eclipse(老牌Java開發工具) Google自己出的Android Studio(新出的ide,去年Google發布的,個人感覺還不是很完善) netbeans的話也可以開發 但是用的人相對較少,主要還是前兩種 個人比較推薦 eclipse
H. 安卓系統的JD和ROM 什麼意思啊
JD應該是一種反編譯器JAVA Decompiler,或者是一種源代碼,安卓系統採用了很多的Java源代碼。
而ROM就是通常所說的系統固件。每個安卓版本都有對應的固件可以刷。
I. android的apk文件中並沒有源碼那在軟體安裝後為什麼還能用
集成apk時把源碼集成進去了。可以反編譯出來。反編譯步驟
1、把 class.dex 拷貝到 dex2jar.bat 所在目錄,直接拖動 class.dex 到 dex2jar.bat,生成 classes.dex.dex2jar.jar。
2、用 rar 解壓出 jar 文件中的 class 文件,然後 用jad 或 DJ Java Decompiler 反編譯工具將 .class 文件反編譯成 .java 文件
3、運行 JD-GUI工具(綠色軟體),打開上面的 jar 文件,在File下有個 Save JAR Source,它可以生成 src 源代碼。
J. android 開發DICOM, 想要用dcmtk 怎麼編譯成jar
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:一、應用廣泛的JAD在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:FrontEndPlus、mDeJava、DecafePro、CavajJavaDecompiler、DJJavaDecompiler、NMI』sJavaClassViewer和國產的JAVA源代碼反編譯專家。JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。JAD是使用MicrosoftVisualC++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD1.5.8f版本為例):-d-用於指定輸出文件的目錄-s-輸出文件擴展名(默認為:.jad),通常都會把輸出文件擴展名直接指定為.java,以方便修改的重新編譯。-8-將Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正確顯示。最常用的反編譯指令如下所示:Jad–dc:\javasource–s.java-8javatest.class這條指令將當前目錄下的javatest.class反編譯為javatest.java並保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。二、源碼開放的JODEJODE是全球最大的開源項目網站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術等,更是出類拔粹。JODE本身也是純JAVA開發的,最近越來越多的JAVA反編譯軟體也選擇JODE來做它們的核心引擎,例如JCavajJavaDecompiler、BTJ(BackToJava)、jEdit』sJavaInsightplugin等。JODE是一個可運行的JAR文件,在windows環境下雙擊即可運行。需要特別說明的是,JODE不是通過常規的Open->File的方式來載入JAVA編譯後的類文件(*.class)或是類包(*.jar)的,而是通過在Options菜單中的SetClasspath來實現的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然後再選擇ReloadClasspath即可。新加入的類包或是類的名字會在左側窗口出現,雙擊類包名可以目錄樹結構,雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯後的源代碼。三、獨樹一幟的DAVADAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優化工具Soot的一部分。Soot和JODE一樣是純JAVA開發的,也是一個獨立的JAR包,但卻不能通過雙擊直接運行,而是象JAD一樣在命令行狀態運行。Soot對環境變數的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設置:SetCLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當前目錄,如果不加上這個的話Soot經常會報一個找不到類的錯誤。DAVA是作為Soot的一個參數使用的,通常的用法如下:Javasoot.Main–fdava–dc:\javasourcejavatest注意最後的類名不用帶.class後綴,因為它默認是處理class文件,這個操作與前述的JAD的參數效果相同。DAVA採取了流程優化的方式進行反編譯,與傳統反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。上述的三種工具各有千秋,但效果都非常不錯。經測試,它們基本上都可以把JDK自帶的一些常式完全反編譯,然後不加任何修改可再編譯成功,並能正常運行!