android逆向入門及工具下載

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   color   ar   os   使用   

本文所用到的工具下載:

連結:http://pan.baidu.com/s/1i3uw4NN 密碼:8hz5

最近在研究如何逆向android的app,於是就有了這篇android逆向入門的總結回饋互連網。

由於Android的.apk檔案實際上就是一個zip檔案,修改檔案尾碼後直接可以開啟,效果如所示:

裡麵包含了的檔案有:

META-INF:這個檔案夾是用於儲存簽名檔案,確保包的完整性的

res:apk所要用的資源檔,都是原封不動地儲存,我們可以直接提取出來,做漢化時就可以直接閱讀string檔案然後進行修改

AndroidManifest.xml:編譯過後的一個設定檔,用於聲明程式中所包含的activity,service以及程式所具有的能力,也就是許可權。

resources.arsc:編譯過後的一個資源說明檔案

classes.dex:重點來了,我們編寫的Android程式,在來源程式裡的所有.java的檔案,最終都編譯到這樣1個.dex檔案當中,在Android手機上的dalvik虛擬機器上執行。

下面開始講解如何破解一個app程式的各種資訊。

1、逆向.xml檔案

由於apk包裡的xml檔案我們直接用記事本開啟還是有一些亂碼,所以需要我們還原才能更好的看出。

這裡需要用到AXMLPrinter2.jar 工具

具體的則是開啟命令列 我們以AndroidManifest.xml為例,輸入如下命令:

java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt

有興趣的也可以寫成一個.bat的指令碼,方便執行。

執行前的AndroidManifest.xml檔案:

執行反編譯之後:

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"android:versionCode="322"android:versionName="ver 3.2.2"package="com.eoeandroid.wallpapers.christmas"><applicationandroid:label="@7F040000"android:icon="@7F020004"><activityandroid:label="@7F040001"android:name=".Main"><intent-filter><actionandroid:name="android.intent.action.MAIN"></action><categoryandroid:name="android.intent.category.LAUNCHER"></category></intent-filter></activity><serviceandroid:name=".service.SyncDeviceInfosService"></service><meta-dataandroid:name="com.mobclix.APPLICATION_ID"android:value="30c0e2bb-a878-43cb-830b-a39fcae33b0c"></meta-data></application><uses-sdkandroid:minSdkVersion="3"></uses-sdk><uses-permissionandroid:name="android.permission.INTERNET"></uses-permission><uses-permissionandroid:name="android.permission.SET_WALLPAPER"></uses-permission><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission></manifest>

基本能還原的跟來源程式大致相同。

2、classes.dex的逆向

關於classes.dex的逆向,需要掌握兩種方法。

第一種是將classes.dex反編譯成smali格式的檔案,然後查看smali基本可以看出程式是如何執行的。

第二種是將classes.dex用dex2jar反編譯成.jar格式的檔案,再使用jd-gui來查看jar包裡面java原始碼。

首先介紹第一種方法。這種方法的工具非常多,網上一搜就能搜到。我使用的是一個名叫DiPiPiApk的逆向工具。程式的介面:

輸入dex檔案路徑或者app路徑,再選擇smali輸出路徑,就可以反編譯出smali程式碼。

這個程式因為有介面所以比較好用,但是這個程式的作者沒有再更新版本了,所以剛開始入門用這個玩玩還行,真要繼續做的話,還得換工具。

可以用baksmali.jar這個工具,國外一個對Android研究的很深入的大牛做的。

執行代碼

java -jar baksmali.jar -o classout/ classes.dex

將classes.dex能逆向成一個檔案夾。

點開其中一個檔案 我們繼續來看:

這個代碼和java來源程式已經很像了,關於如何讀懂smali程式,就需要更進一步的研究和學習了。

我們上一步已經將classes.dex反編譯成了.smali檔案,在償試把它編譯成classes.dex吧:

這裡會用到smali.jar工具。

輸入如下命令:

java -jar smali.jar classout/ -o classes.dex.

我們可以將新產生的classes.dex塞入ApkInstaller.apk裡覆蓋原來的classes.dex檔案,這樣我們的apk還是一樣能用的。

但是某些apk程式在修改後會出現明明安裝了但是無法使用,顯示程式未安裝。這是因為程式修改了,但是簽名沒有修改的緣故,使用AndroidResEdit可以為軟體重新簽名。這裡就不再細說了,可以上網尋找相關教程。

下面介紹第二種方法。

首先要下載兩個工具:dex2jar和JD-GUI。

前者是將apk中的classes.dex轉化成Jar檔案,而JD-GUI是一個反編譯工具,可以直接查看Jar包的原始碼。

首先將apk檔案,將尾碼改為zip,解壓,得到其中的classes.dex,它就是java檔案編譯再通過dx工具打包而成的;

解壓下載的dex2jar,將classes.dex複製到dex2jar.bat所在目錄。在命令列下定位到dex2jar.bat所在目錄

運行:

dex2jar.bat    classes.dex

產生:

classes.dex.dex2jar.jar

產生jar檔案的如下:

運行JD-GUI(jd-gui.exe),開啟上面產生的jar包,即可看到原始碼了。

android逆向入門及工具下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.