日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ApkTool反編譯和重新打包

 quasiceo 2014-11-19
分類(lèi): android 2013-04-23 15:04 9636人閱讀 評(píng)論(3) 收藏 舉報(bào)

有時(shí)會(huì)需要反編譯APK,各人有各人的原因,你都懂的……


      準(zhǔn)備工作:                            

下載APKTool,通過(guò)下面這個(gè)連接進(jìn)行下載,https://code.google.com/p/android-apktool/downloads/list

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

分別解壓到到一個(gè)方便操作的目錄下,然后就可以通過(guò)控制臺(tái)進(jìn)行操作了,當(dāng)然前提是你配置已經(jīng)有了JAVA環(huán)境,這個(gè)網(wǎng)上一搜一大堆,就不贅述了。


       反編譯:                               

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

打開(kāi)控制臺(tái),跳到該目錄(例如是C:\Windows),執(zhí)行:

    cd C:\Windows                                                 

然后執(zhí)行:

   apktool d apkname.apk  foldername    

apkname.apk 表示要進(jìn)行反編譯的APK文件,foldername表示反編譯后文件存放的目錄,即在當(dāng)前目錄下會(huì)自動(dòng)建一個(gè)新目錄存放(如:C:\Windows\foldername

執(zhí)行完上面語(yǔ)句后,如果沒(méi)有出現(xiàn)錯(cuò)誤提示,則成功反編譯了,找到foldername目錄,打開(kāi)smali目錄即為反編譯出來(lái)的字節(jié)。

但我在執(zhí)行上面語(yǔ)句后,卻出現(xiàn)了錯(cuò)誤提示:


  • Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec:  
  • 0x010300dd 

    根據(jù)提示描述是找不到資源文件,應(yīng)該是要反編譯的APK文件用到了系統(tǒng)的一些資源。

    解決辦法:

    從手機(jī)中導(dǎo)出framework-res.apk文件,該文件是/system/framework下面,把這個(gè)文件拷到跟apkTool同一個(gè)目錄下,執(zhí)行以下語(yǔ)句把資源文件加進(jìn)來(lái):

        apktool if freagmework-res.apk            

    執(zhí)行完以后就可以把framework-res.apk導(dǎo)進(jìn)來(lái)。此時(shí)再執(zhí)行apktool d即可以正常反編譯了。

    由于反編譯出來(lái)的是字節(jié)碼,所以想修改軟件邏輯就需要知道一點(diǎn)字節(jié)碼的知識(shí),可以看這里:寄存器類(lèi)型、函數(shù)和成員操作符號(hào)。

    在這里列舉幾個(gè)常用的邏輯符號(hào)的對(duì)應(yīng)smali語(yǔ)法:

    符號(hào) smali語(yǔ)法
    == if-eq
    != if-ne
    equals if-eqz
    !equals if-nez

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

      apktool b foldername       

    其中foldername即放反編譯結(jié)果的目錄,執(zhí)行成功后會(huì)在該目錄的dist目錄下有一個(gè)重新打包后的apk文件。

    當(dāng)然我在重新打包時(shí)出現(xiàn)了錯(cuò)誤提示:

    1. Exception in thread "main" brut.androlib.AndrolibException: brut.directory.PathN  
    2. otExist: apktool.yml  

    從字面上理解就是找不到apktool.yml這個(gè)文件,如果在執(zhí)行apktool d后能正常反編譯,在目錄中是會(huì)存在apktool.yml文件的,我之所以出現(xiàn)這個(gè)錯(cuò)誤,是因?yàn)樵诜淳幾g時(shí)出現(xiàn)了上面提到的“資源找不到”錯(cuò)誤后,我看到反編譯出了字節(jié)碼,就沒(méi)有理會(huì)它導(dǎo)致的。


    好啦,到此就成功打包了一個(gè)新的apk文件了,但還不要高興得太早,該文件是一個(gè)沒(méi)有簽名的apk,有了解過(guò)android的應(yīng)該都知道,沒(méi)有簽名是無(wú)法安裝的。那就要重新為該文件簽一下名了。把你的簽名文件和apk拷到同一個(gè)目錄下,然后執(zhí)行以后語(yǔ)句即可:

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

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


    大功告成?。?!

    參考文章:

    http://blog./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



  • Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec:  
  • 0x010300dd
    • 本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶(hù) 評(píng)論公約

      類(lèi)似文章 更多