Android 反編譯

前言:作爲開發者,我們反編譯的目的是查看別人優秀的代碼,而不是破解別人的代碼,惡意修改,植入廣告,獲取利益。目前已經有很多APP被反編譯破解了,什麼保衛蘿蔔,等等。對原開發者,和用戶都造成利益上的損失。

接下來,我就開始直崩主題了。相信你已經看了很多篇反編譯的博文了。首先要準備反編譯的工具。(工作環境:Windows 7)

apktool  
   作用:資源文件獲取,可以提取出圖片文件和佈局文件進行使用查看
dex2jar
  作用:將apk反編譯成Java源代碼(classes.dex轉化成jar文件)
jd-gui
  作用:查看APK中classes.dex轉化成出的jar文件,即源碼文件

我看到別人寫的博文中都提供了工具下載地址,但他們的博文都是2013年的,比較老了,所以那些工具的地址,或者那些工具的版本都太低了。我下載後使用,總是會報如下錯誤。

出現這種錯誤,就是Apktool的版本太低。所以,我直接翻牆去官網下載了最新版的。但還是出錯,因爲我只下了apktoo.jar,還有一個是apkrool.bat,如果他兩版本相差太大,也會報錯。於是在官網都下載好了相同版本的。終於不報錯了。這就浪費了我好多時間。這個問題解決後,後面的問題就輕鬆多了。文末附上我已下載好的工具集合包鏈接,和官網鏈接。

1.拆包:

先拿到一個Apk包,後綴名改成.zip然後解壓,解壓後的文件目錄如下:


我們可以看到裏面有個classes.dex文件,有的包會有好幾個dex文件。還有AndroidManifest.xml文件,res資源文件等等。但目前打開AndroidManifest.xml就會是亂碼的。不然就不需要我們反編譯了。

2.反編譯dex

我們先使用dex2jar將.dex文件反編譯成java源代碼;

將上一步中的classes.dex拷貝到dex2jar文件夾根目錄。再打開cmd,切換到該目錄,輸入命令d2j-dex2jar.bat classes.dex;成功後會生成classes-dex2jar.jar文件,運行結果如圖:


可以看到,命令一定要正確輸入,不然就會報錯。

3.jd-gui查看源代碼:

雙擊這個工具後,找到classes-dex2jar.jar文件,就能查看源碼了。如圖:

如果這個Apk沒有混淆的話,你就能90%的查看源代碼了。畢竟還有那些id,是還原不了的。會顯示對應的整數。

4.解碼:

我們還有一個工具還沒有使用,就是apktool了,直接切換到apktoo目錄下,cmd執行 apktool d xxx.apk , d是decode的意思。如下圖:


成功後就會對應生成一個 xxx文件夾,在文件夾中,你會看到有androidManifest.xml文件們還有res資源文件夾,這時候的文件都可以清晰的看到源碼了。還有一個重要的文件夾smali,破解的人就會去修改這個文件夾中的內容。我們現在就只修改下androidManifest.xml中的包名。修改完成後,就可以重新打包了。執行命令:apktool b rx -o new_rx.apk

5.重新簽名

別高興太早,打包後還要重新簽名的,你解壓的時候,以前的簽名就已經被破壞了。源apk的簽名文件你是拿不到的,所以你得自己創建一個。請看我前面的哪一篇文章。拿到簽名文件後,直接執行命令Jarsigner –verbose –keystore dxrx.jks new_rx.apk dxrx,如圖:



輸入密碼時:cmd默認不顯示,而且一個字都不能輸錯,也不能回刪。輸錯一個,只能重來。這些密碼就是你創建的時候設置的。簽名成功後,你就可以安裝了。
命令解析:Jarsigner –verbose keystone dxrx.jks(簽名文件)  new_rx.apk (要簽名的包) dxdx(簽名的別名(key alias)

我自己的研究也是站在巨人門的肩膀上:http://blog.csdn.net/guolin_blog/article/details/49738023 

百度雲盤下載地址:http://pan.baidu.com/s/1eSl0zBk
官網鏈接先附上:https://ibotpeaches.github.io/Apktool/install/,那個apktool.bat下載,要右鍵點擊。因爲那句話是這樣說的:Download Windows wrapper script (Right click, Save Link As apktool.bat)。我開始點了半天,沒反應。後來仔細一看,才知道。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章