ApkTool反編譯和重新打包


有時會需要反編譯APK,各人有各人的原因,你都懂的……


      准備工作:                            

下載APKTool,通過下面這個連接進行下載,https://code.google.com/p/android-apktool/downloads/list

windows下只需要下載這兩個文件包即可:apktool1.5.2.tar.bz2和apktool-install-windows-r05-ibot.tar.bz2

分別解壓到到一個方便操作的目錄下,然后就可以通過控制台進行操作了,當然前提是你配置已經有了JAVA環境,這個網上一搜一大堆,就不贅述了。


       反編譯:                               

把要反編譯的APK文件放到跟APKTool四個文件的同一個目錄下;

打開控制台,跳到該目錄(例如是C:\Windows),執行:

    cd C:\Windows                                                 

然后執行:

   apktool d apkname.apk  foldername    

執行完上面語句后,如果沒有出現錯誤提示,則成功反編譯了,找到foldername目錄,打開smali目錄即為反編譯出來的字節。

但我在執行上面語句后,卻出現了錯誤提示:


  •  brut.androlib.err.UndefinedResObject: resource spec:  
  • 0x010300dd 

     

    根據提示描述是找不到資源文件,應該是要反編譯的APK文件用到了系統的一些資源。

    解決辦法:

    從手機中導出framework-res.apk文件,該文件是/system/framework下面,把這個文件拷到跟apkTool同一個目錄下,執行以下語句把資源文件加進來:

        apktool if freagmework-res.apk            

    執行完以后就可以把framework-res.apk導進來。此時再執行apktool d即可以正常反編譯了。

    由於反編譯出來的是字節碼,所以想修改軟件邏輯就需要知道一點字節碼的知識,可以看這里:寄存器類型、函數和成員操作符號

    在這里列舉幾個常用的邏輯符號的對應smali語法:

     

    符號 smali語法
    == if-eq
    != if-ne
    equals if-eqz
    !equals if-nez

    修改完代碼邏輯后,就要重新打包成APK文件了:

      apktool b foldername       

    其中foldername即放反編譯結果的目錄,執行成功后會在該目錄的dist目錄下有一個重新打包后的apk文件。

    當然我在重新打包時出現了錯誤提示:

     

    [html] view plain copy
    1. Exception in thread "main" brut.androlib.AndrolibException: brut.directory.PathN  
    2. otExist: apktool.yml  

    從字面上理解就是找不到apktool.yml這個文件,如果在執行apktool d后能正常反編譯,在目錄中是會存在apktool.yml文件的,我之所以出現這個錯誤,是因為在反編譯時出現了上面提到的“資源找不到”錯誤后,我看 到反編譯出了字節碼,就沒有理會它導致的。


    好啦,到此就成功打包了一個新的apk文件了,但還不要高興得太早,該文件是一個沒有簽名的apk,有了解過android的應該都知道,沒有簽名是無法安裝的。那就要重新為該文件簽一下名了。把你的簽名文件和apk拷到同一個目錄下,然后執行以后語句即可:

       jarsigner -verbose -keystore wendy.keystore -signedjar wendy_signed.apk wendy.apk wendy.keystore        

    這里輸入wendy.keystore即你的簽名文件名稱,文件wendy.apk,最終生成wendy_signed.apk為Android簽名后的APK執行文件。


    大功告成!!!

    參考文章:

    http://blog.creke.net/786.html

    http://blog.csdn.net/caszhao/article/details/6030425

    http://danqingdani.blog.163.com/blog/static/1860941952012103041246686/

    http://blog.csdn.net/wenhaiyan/article/details/5520964



  •  brut.androlib.err.UndefinedResObject: resource spec:  
  • 0x010300dd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM