標籤: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逆向入門及工具下載