Android中apk包的反組譯碼

來源:互聯網
上載者:User

原文地址:http://blog.csdn.net/ariesjzj/article/details/7311340

這裡介紹比較流行的兩種方法。

方法一的優點是可將byte code反組譯碼成代碼形式,但畢竟是逆向工程,有時還是會插些byte code,我還碰到過反組譯碼完開啟到某些檔案直接crash掉的,但畢竟少數。另外就是對xml和資源檔的反組譯碼貌似不給力。這方面方法二反組譯碼出來的好多了。方法二反組譯碼出來的東西比較規整,缺點是java的代碼都是smali的byte code。一般情況下我是先用第一種,不行了用第二種。其實大多數情況要兩個結合起來看。

方法一:jd-gui + dex2jar

先把apk用unzip解壓。windows上改成.zip後解壓即可,其實用7-zip的話不用改強行解壓就行了,Linux下unzip就行,如:

$ unzip abc.apk -d unpack

其中abc.apk為apk名,unpack為解壓內容存放目錄。解壓完了目錄下有個classes.dex檔案,用dex2jar工具裡的dex2jar.sh將之轉成jar檔案(windows下用dex2jar.bat):

$dex2jar.sh classes.dex

最後用jd-gui將jar開啟。

第二種:apktool,這個方法的另一好處是解壓完了還可以再打包回去。雖然打包回去的功能我還沒用過。

apk解包:

$ apktool d abc.apk <directory>

這種方式解壓出來有個好處是AndroidManifest.xml這些設定檔都是可讀的,上面一種方法解壓出來就變亂碼了。缺點是java的代碼都是smali代碼,不易讀。所以兩種方法結合起來用比較好。

apk打包:

apktool b <directory>

最後解壓完了後在lib目錄下可能會有jni調用的.so檔案,那就老老實實拿objdump和readelf看吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.