eclipse反編譯apk
最新的反編譯不用此方法, 有最新的一鍵自動反編譯工具:
這段時間在學Android應用開發,在想既然是用java開發的應該很好反編譯從而得到源代碼吧,google了一下,確實很簡單,以下是我的實踐過程。
在此鄭重聲明,貼出來的目的不是為了去破解人家的軟體,完全是一種學習的態度,不過好像通過這種方式也可以去漢化一些外國軟體。
註:本Android反編譯教程,在Windows7-Ultimate-64bit操作系統上,測試通過!
下述所需的反編譯工具包 下載
一、反編譯Apk得到Java源代碼
首先要下載兩個工具:dex2jar和JD-GUI
前者dex2jar是將apk中的classes.dex轉化成Jar文件,而JD-GUI是一個反編譯工具,可以直接查看Jar包的源代碼。以下是下載地址:
dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
具體步驟:
首先將apk文件,將後綴改為zip,解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的;
解壓下載的dex2jar,將classes.dex復制到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄(在DOS命令下CD 目錄)
運行
dex2jar.bat classes.dex
生成
classes.dex.dex2jar.jar
生成jar文件的截圖如下:
運行JD-GUI(jd-gui.exe),打開上面生成的jar包,即可看到源代碼了
HelloAndroid源碼(編譯前的apk源碼對照)如下:
二、反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件
如果是漢化軟體,這將特別有用。首先還是下載工具,這次用到的是apktool
下載地址:http://code.google.com/p/android-apktool/downloads/list
下載:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(兩個包都下載)
具體步驟:
將下載的兩個包解壓到同一個文件夾下,應該會有三個文件:aapt.exe,apktool.bat,apktool.jar
在命令行下定位到apktool.bat文件夾,輸入以下命令:apktool d C:\*.apk C:\*文件夾,如下圖:
命令行解釋:apktool d [apk文件 ] [輸出文件夾]
反編譯的文件如下(AndroidManifest.xml為例):
特別注意:你要反編譯的文件一定要放在C盤的根目錄里(其實不用放在C盤根目錄也行)
例如:在D盤目錄D:\apktool1.4.1
cd /d D:\apktool1.4.1 //切換到D盤目錄,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三個文件
apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反編譯命令,注意 d和
-f 的寫法
將反編譯完的文件重新打包成apk,很簡單,輸入apktool b c:\***文件夾(你編譯出來文件夾)即可,命令如下:這個主意你文件所在盤
打包apk後的文件在目錄C:\HelloAndroid下,生成了兩個文件夾:
build
dist
其中,打包生成的HelloAndroid.apk,在上面的dist文件夾下,Ok
最後,再介紹一款剛出來的反編譯工具 Androidfby ,它是一款對上述步驟進行了封裝的圖形界面工具,下載地址
但是,針對部分簽名的apk,無法實現反編譯,但本博客方法則仍然可以反編譯成功!僅供參考使用
另外,作為應用開發者,肯定不希望自己的代碼被反編譯的,下一遍博客將講述如何通過混淆代碼防止被別人反編譯
Android如何防止apk程序被反編譯
作為Android應用開發者,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發的應用可以被別人很輕易的就反編譯出來。
Google似乎也發現了這個問題,從SDK2.3開始我們可以看到在android-sdk-windows\tools\下面多了一個proguard文件夾
proguard是一個java代碼混淆的工具,通過proguard,別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的代碼,從而達到保護代碼的作用。
下面具體說一說怎麼樣讓SDK2.3下的proguard.cfg文件起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內容:
[html] view
plainprint?
1. -optimizationpasses 5
2. -dontusemixedcaseclassnames
3. -
4. -dontpreverify
5. -verbose
6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
7.
8. -keep public class * extends android.app.Activity
9. -keep public class * extends android.app.Application
10. -keep public class * extends android.app.Service
11. -keep public class * extends android.content.BroadcastReceiver
12. -keep public class * extends android.content.ContentProvider
13. -keep public class * extends android.app.backup.BackupAgentHelper
14. -keep public class * extends android.preference.Preference
15. -keep public class com.android.vending.licensing.ILicensingService
16.
17. -keepclasseswithmembernames class * {
18. native <methods>;
19. }
20.
21. -keepclasseswithmembernames class * {
22. public <init>(android.content.Context, android.util.AttributeSet);
23. }
24.
25. -keepclasseswithmembernames class * {
26. public <init>(android.content.Context, android.util.AttributeSet, int);
27. }
28.
29. -keepclassmembers enum * {
30. public static **[] values();
31. public static ** valueOf(java.lang.String);
32. }
33.
34. -keep class * implements android.os.Parcelable {
35. public static final android.os.Parcelable$Creator *;
36. }
從腳本中可以看到,混淆中保留了繼承自Activity、Service、
Application、BroadcastReceiver、ContentProvider等基本組件以及
com.android.vending.licensing.ILicensingService,
並保留了所有的Native變數名及類名,所有類中部分以設定了固定參數格式的構造函數,枚舉等等。(詳細信息請參考<proguard_path>/examples中的例子及注釋。)
讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句「proguard.config=proguard.cfg」就可以了
完整的default.properties文件應該如下:
[html] view
plainprint?
1. # This file is automatically generated by Android Tools.
2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3. #
4. # This file must be checked in Version Control Systems.
5. #
6. # To customize properties used by the Ant build system use,
7. # "build.properties", and override values to adapt the script to your
8. # project structure.
9.
10. # Project target.
11. target=android-9
12. proguard.config=proguard.cfg
大功告成,正常的編譯簽名後就可以防止代碼被反編譯了。反編譯經過代碼混淆的apk得到的代碼應該類似於下面的效果,是很難看懂的:
如果您使用的是2.3之前的SDK版本也沒關系,把上面的proguard.cfg文件復制一份放到項目中,然後進行相同的操作即可
㈡ 如何反編譯apk文件得到源碼和XML文件
相信很多開發者都知道反編譯APK,正常情況下,如果我們想要看看xml,看看java源代碼,是看不了的。用壓縮工具解壓apk得到的文件也都是二進制文件,打開後全是亂碼。
開發者能夠用的也僅僅是圖片資源,這往往也滿足不了開發者的需求。
下面我就給大家詳細講解一下Android-apk的反編譯步驟:
注意:反編譯的前提是:開發者沒有使用proguard(java代碼混淆的工具)。
1.下載反編譯工具
需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot
dex2jar:將apk中的classes.dex轉化成Jar文件。
JD-GUI:反編譯工具,可以直接查看Jar包的源代碼。
apktool:反編譯工具,通過反編譯APK中XML文件,直接可以查看。
apktool-install-windows-r05-ibot:輔助windows批處理工具。
下載地址:
dex2jar:http://code.google.com/p/dex2jar/downloads/list
JD-GUI:http://code.google.com/p/innlab/downloads/lis
apktool:http://code.google.com/p/android-apktool/downloads/list
工具截圖:
2.解壓縮APK包
apk文件也是一種常見的zip,常用的壓縮軟體就可輕松地解壓apk文件。用壓縮軟體將apk文件中的文件解壓到一個文件夾中,得到APK中的資源包括XML文件和classes.dex文件,classes.dex就是java文件編譯再通過dx工具打包而成的。
解壓截圖:
3.反編譯dex文件
解壓apk文件後,你會發現res目錄的圖片沒有加密,但java源碼編譯成了一個classes.dex文件,無法用普通的反編譯class文件的方法來處理,dex2jar可以將dex文件轉換成普通的jar包。
解壓下載的dex2jar,把解壓後的文件夾放到系統盤跟目錄中並把這個目錄加到系統path變數中,就可以直接用:dex2jar.bat或dex2jar.sh轉換dex文件了。
DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex文件所在的路徑)。
將在同目錄得到普通jar包:classes_dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。
編譯截圖:
生成jar文件的截圖如下:
4.反編譯jar包
得到jar包後,下載自已喜歡的反編譯工具,推薦使用JD-GUI,有比較簡單的圖形界面,可以反編譯單個class文件,也可以反編譯jar包,比較方便。
打開壓縮文件JD-GUI,運行jd-gui.exe,打開上面生成的jar包,即可看到源代碼了。
截圖如下:
5.反編譯xml文件
打開解壓的res\layout目錄,有很多xml文件,如果你想看下作者是如何設計界面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要用到的是apktool。
具體操作方法:將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個文件夾下,這個文件夾有三個文件:aapt.exe,apktool.bat,apktool.jar。把這個文件夾也放到系統盤的根目錄中並把這個目錄加到path變數中。以HelloWord.apk為例:
在DOS命令行中輸入:apktool d xx\HelloWord.apk HelloWord得到HelloWord文件夾,此文件夾中的xml文件就是編譯好的可以正常查看的文件。
截圖如下:
生成的文件:
這樣就得到了可以得到編譯的源碼和XML資源。
注意:文件的路徑中最好不要出現中文!
㈢ 在嗎請問怎麼apk反編譯啊在下不懂,求指教。。
APK文件是用專業軟體eclipse編譯生成的文件包。在網上可以找到許多軟體來對APK的內容進行反編譯,例如:可以通過AXMLPrinter2工具和命令:java -jar AXMLPrinter2.jar AndroidManifest.xml 解開在apk中的AndroidManifest.xml。最近,業界有一個功能強大的解包打包工具包apktool,可以在Windows下用來方便快速地對APK文件進行解包和打包,給修改和編輯工作帶來許多方便。下面來介紹它的使用。
1) APKtool軟體包
APKtool軟體包有2個程序組成:apktool.jar 和 aapt.exe
另外提供一個批處理文件:apktool.bat,其內容為:
java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
運行apktools.jar需要java環境(1.6.0版本以上)。
apktool.jar用於解包,apktool.jar和aapt.exe聯合用於打包。
2) APK文件的解包
下面以解開Contacts.apk為例。首先把Contacts.apk Copy到當前工作目錄下(例:Test)。在DOS下打入命令
apktool d Contacts.apk ABC
這里「d」表示要解碼。Contacts.apk是要解包的APK文件。ABC是子目錄名。所有解包的文件都會放在這個子目錄內。
3) APK文件的打包
在DOS下打入命令
apktool b ABC New-Contacts.apk
這里「b」表示要打包
ABC是子目錄名,是解包時產生的子目錄,用來存放所有解包後的和修改後的文件。
New-Contacts.apk是打包後產生的新的APK文件。
4) Framework框架文件
在解開APK文件時,apktool需要框架文件(framework-res.apk)來解碼和打包。Apktool已經包含了標準的框架,所以在大多數APK文件的解包時,不需要另外提供框架文件。但是,某些製造商使用了他們自己的框架文件,為了解包,就不得不從手機中把框架文件(framework-res.apk)提取出來,然後安裝到計算機。安裝命令是:
apktool if framework-res.apk
安裝後就會得到:~\apktool\framework\1.apk
5) 解包、解包和簽名批處理
在實際使用時,可能對多個APK文件進行處理。方便的做法是寫成批處理文件。打包和簽名可以一次完成。
解包批處理命令:
for %%i in (*.apk) do java -jar apktool.jar d %%i _%%i && move _%%i Modifying_Files && %%i Backuped_Raw_Files && @echo File [%%i] unpacking process is completed!
打包和簽名批處理命令:
for /d %%i in (*) do cd.. && java -jar apktool.jar b Modifying_Files\%%i && java -jar signapk.jar testkey.x509.pem testkey.pk8 Modifying_Files\%%i\dist\*.apk %%i && ren %%i New%%i && move New%%i Modified_Signed_Files && @echo %%i Complete repacking and Signing! && cd Modifying_Files
㈣ apk 反編譯後 怎麼導入eclipse
apk 反編譯後導入eclipse方法:
一、找到apk中的class.dex:
把apk文件改名為.zip,然後解壓縮其中的class.dex文件,它就是java文件編譯再通過dx工具打包成的。
把class.dex拷貝到dex2jar.bat所在目錄,直接拖動class.dex到dex2jar.bat,生成classes.dex.dex2jar.jar。
或者:
在cmd下進入dex2jar.bat所在路徑,然後輸入「dex2jar.bat XXX」,XXX指的是你要反編譯的apk中的classes.dex文件所在路徑及名稱,比如:dex2jar.bat在D:Androidapk_decodedex2jar-0.0.7-SNAPSHOT路徑下, classes.dex在D:Android下,所以: 你進入dex2jar.bat路徑下後,輸入dex2jar.bat D:Androidclasses.dex,這樣會生成一個jar文件。
用rar解壓出jar文件中的class文件,然後用jad或DJ Java Decompiler反編譯工具將.class文件反編譯成.java文件 3、運行JD-GUI工具,打開上面的jar文件,在File下有個Save JAR Source,它可以生成src源代碼。
點擊eclipse的file->import菜單,把以上導出的工程導入即可。
㈤ 怎樣把反編譯的apk文件在eclipse中打開
那要看你反編譯的程度了。apk反編譯有兩部分,一部分是res等xml資源文件。用android 的apktool就可以了。這些xml文件都可以在eclipse中直接打開。
dex文件(源代碼)需要使用dex2jar工具轉化成jar文件。jar文件可以在eclipse查看其結構。對.class文件,eclipse可以查看方法,內部類等信息。
如果對Jar也進行了反編譯,那麼得到的就是Java文件。在eclipse中,可以像你new 的class一樣查看。
㈥ 把上傳的apk文件反編譯成用Eclipse能打開能看代碼的文件夾
eclipse的項目中的apk文件是需要打包生成的。1、只要run
as
android
application
過,到工作目錄的bin文件夾下就能找到與項目同名的apk文件。
2、a.選中項目,右鍵=》andoid
tools=》export
unsigned
application
package,直接保存,未簽名的。
b.選中項目,右鍵=》andoid
tools=》export
signed
application
package,後面一步步的去做,簽過名的。
apk簽名主要有兩種:
1.
使用特殊的key簽名可以獲取到一些不同的許可權。
2.
apk如果使用一個key簽名,發布時另一個key簽名的文件將無法安裝或覆蓋老的版本,這樣可以防止你已安裝的應用被惡意的第三方覆蓋或替換掉。
㈦ eclipse android apk防止反編譯 怎麼做
proguard.config 後面指定一個確定的文件,比如你工程中默認生成的 proguard-project.txt。
然後在 proguard-project.txt中進行混淆配置,並使用 android tool-> Export signed ...導出簽名的發布包apk,這樣的apk包就可以防止反編譯了。
㈧ 具體的 APK文件 怎麼反編譯,需要怎樣打開或導進eclipse里
APK反編譯方法如下:
一、更改apk文件的後綴名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11.zip
二、用zip解壓縮LianyunHelper3.0.11.zip文件
三、從解壓縮的文件夾中取出classes.dex文件並放到dex2jar.bat所在目錄
四、運行cmd命令,進入dex2jar.bat所在的目錄,輸入dex2jar.bat classes.dex即可生成classes.dex.dex2jar.jar文件
五、用jd-gui工具打開classes.dex.dex2jar.jar文件,即可看到源碼
六、將AndroidManifest.xml文件放到AXMLPrinter2.jar所在目錄,運行cmd命令,進入 AXMLPrinter2.jar所在目錄,輸入java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt。