Android:apk反編譯步驟,打包、簽名和逆向工程經驗總結

思路一、apktool


1.通過apktool反編譯出資源和smali

 apktool d MobileManager.apk

[html] view plaincopy
  1. <span style="font-family:Comic Sans MS;font-size:18px;">F:\Android\decompile\apktool>apktool d MobileManager.apk  
  2. I: Baksmaling...  
  3. I: Loading resource table...  
  4. I: Loaded.  
  5. I: Loading resource table from file: C:\Users\liupingan\apktool\framework\1.apk  
  6. I: Loaded.  
  7. I: Decoding file-resources...  
  8. I: Decoding values*/* XMLs...  
  9. I: Done.  
  10. I: Copying assets and libs...</span>  
smali是可閱讀的字節碼,通過閱讀smali代碼可以真實的反編譯出來源代碼,但是這個沒有自動化的工具,需要人工分析。


apk打包:

apktool b MobileManager

將重新打包apk.

注意:需要重新簽名才能安裝。可以參考這篇文章進行簽名發佈:Android:APK簽名

工具下載地址:

http://code.google.com/p/android-apktool/


2.通過dex2jar將其中的dex文件反編譯出jar文件

首先將apk包重命名爲rar文件,解壓縮出來classes.dex


 dex2jar managerclasses.dex


可以得到jar文件

[html] view plaincopy
  1. <span style="font-family:Comic Sans MS;">F:\Android\decompile\dex2jar-0.0.9.8\dex2jar-0.0.9.8>dex2jar managerclasses.dex  
  2. dex2jar version: translator-0.0.9.8  
  3. dex2jar managerclasses.dex -> managerclasses_dex2jar.jar  
  4. Done.</span>  

下載地址:http://code.google.com/p/dex2jar/


3.將jar文件解壓縮出來(可以改後綴名爲.rar),生成 .class文件目錄


4.通過jad命令將對應的.class文件反編譯出.java

  

 jad -o -r -sjava -dsrc Manager_dex2jar/**/*.class


其中Manager_dex2jar爲.class目錄
將反編譯Manager_dex2jar目錄及其子目錄下的所有.class文件爲.java

結果保存在src目錄下


工具下載:

http://sdrv.ms/OeMK7X

或者搜索 jad158g


思路二、baksmali/smali:


1. 反編譯:將classes.dex反編譯出.smali源碼
java -jar baksmali-1.3.3.jar -o classout/ classes.dex
2. 打包:將.smali源代碼重新打包成classes.dex
java -jar smali-1.3.3.jar classout/ -o classes.dex

3. baksmali/smali工具下載:

http://code.google.com/p/smali/

4. 同樣,需要重新簽名才能安裝使用。

可以參考這篇文章進行簽名發佈:Android:APK簽名


個人經驗:

0.一般來說,只有.smali源代碼才能重新還原打包apk,通過jad反編譯出.java源代碼由於無法徹底完全反編譯出原始代碼,無法基於java源代碼重新打包成apk。

1. 在閱讀反編譯出來的java源碼時,如果出現反編譯效果不理想的部分代碼,可以對照相應的.smali文件分析,這個是最準確的,就是dex op code。

2. 利用Eclipse變量重命名功能,可以將反編譯的java源碼中無含義的變量重命名爲有意義的變量名。

3. 反編譯出來java文件以後,對於一些資源類的索引,由於採用了硬編碼的形式,可以採用下面的工具解析出原始的資源引用代碼:

Android逆向分析源碼之資源代碼還原小工具

4. 一般一個完整的軟件,基本會用到一些第三方的類庫,這個需要事先甄別出來,然後刪除這部分源代碼,直接去google對應的類庫放進來,避免浪費大量的時間在分析第三方類庫上面。很多是都是開源的類庫,很容易就找到。

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