即便設備沒有root,咱們也能夠經過物理訪問設備來獲取應用程序的數據,咱們還能夠經過此方法改變一個應用程序的數據。若是一個應用程序將數據存儲在客戶端, 使用簡單的密碼或pin檢查,攻擊者有可能使用這種方法來繞過這些檢查。在本文中,咱們將討論如何在一臺沒有root的設備上利用這種方法來改變應用程序特定的數據。主要操做步驟以下所示:php
Step 1: 備份目標應用html
Step 2: 去掉頭部信息而後保存文件linux
Step 3: 作必要的修改android
Step 4: 從原始的」.ab」文件得到頭部信息ubuntu
Step 5: 把修改過的內容附加在頭信息後面vim
Step 6: 使用修改過的內容來恢復備份app
下面以一個實際apk爲例來介紹整個操做過程。svn
咱們首先須要安裝Star命令行工具,下載連接以下:http://sourceforge.net/projects/adbextractor/工具
下載後切換到Star命令行工具的目錄,以下所示:post
而後運行如下命令安裝好Star工具。
dpkg -i star_1.5final-2ubuntu2_i386.deb
在這篇文章中,咱們在一個沒有root的設備上來嘗試修改一個實例程序的內容。咱們先給目標應用作一個備份,使用如下命令:
adb backup -f mybackup.ab com.***book.activity
從以上圖片能夠看到程序提示咱們去確認備份。所以咱們須要在設備上點擊確認(可是本實例中用到的程序並不須要確認)。
當咱們確認以後,它會建立一個」.ab」後綴的安卓備份文件。一般狀況下,前24字節是頭。所以咱們使用dd工具來去除前24字節而後壓縮爲tar文件,使用如下命令:
dd if=mybackup.ab bs=24 skip=1| openssl zlib -d > mybackup.tar
以上命令從輸入讀取源文件並跳過了頭部的24字節
注意,在執行以上命令的時候可能會出現如下錯誤:
openssl:Error: 'zlib' is an invalid command,
解決方法是安裝openssl以及補丁。參考連接:http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssl.html
下載地址: http://www.openssl.org/source/openssl-1.0.1k.tar.gz
補丁地址:http://www.linuxfromscratch.org/patches/blfs/svn/openssl-1.0.1k-fix_parallel_build-1.patch
編譯及安裝:
patch -Np1 -i ../openssl-1.0.1k-fix_parallel_build-1.patch && ./config --prefix=/usr \ --openssldir=/etc/ssl \ --libdir=lib \ shared \ zlib-dynamic && make
測試編譯結果:
make test
以root用戶安裝:
make MANDIR=/usr/share/man MANSUFFIX=ssl install && install -dv -m755 /usr/share/doc/openssl-1.0.1k && cp -vfr doc/* /usr/share/doc/openssl-1.0.1k
備份完畢後使用tar建立一個」.list」文件,這是爲了保證在從新打包備份時保持順序正確。
tar -tf mybackup.tar >mybackup.list
如今咱們獲得瞭如下文件:
mybackup.ab:從設備導出的備份文件
mybackup.tar:從dd命令生成的文件
mybackup.list:從tar文件產生的list文件
咱們新建一個文件夾backup,把這幾個文件連同abe.jar放到新建文件夾中。
咱們可使用如下命令解壓tar文件:
tar -xf mybackup.tar
從上圖能夠看到,生成了一個新文件夾「apps」。咱們能夠在這個目錄中找到應用相關的信息。
查看location_preferences.xml文件,其內容以下:
咱們使用vim把其中的「北京」修改成「American」。
接下來咱們須要把修改後的文件恢復到設備上。
爲了恢復修改後的文件,須要把文件轉換成(.ab)格式,並把」.ab」文件頭附加回去。具體方法是:
首先,使用star命令建立」.tar」文件,而後把文件頭附加回去。
star -c -v -f newbackup.tar -no-dirslash list=mybackup.list
如今咱們得到了「newbackup.tar」文件。而後咱們把原始的文件頭附加在修改後的tar文件前面。
dd if=mybackup.ab bs=24 count=1 of=newbackup.ab
你能夠從上圖中看到,咱們只拷貝了一塊文件。文件爲」newbackup.ab」
最後一步是把修改後的內容附加在頭後面,使用如下命令:
openssl zlib -in newbackup.tar >> newbackup.ab
至此,咱們的備份文件準備完成。而後咱們使用如下命令把備份文件恢復到設備上:
adb restore newbackup.ab
獲得以下信息:
在手機root的狀況下咱們能夠直接到應用的路徑中去查看shared preferences文件。
在不root的狀況下,你能夠經過再次備份數據到本地計算機進行查看。
從下圖能夠看到文件已經被修改:
咱們應該如何保護咱們的應用呢?
若是你的應用中存在敏感信息,你能夠停用備份功能。能夠修改AndroidManifest.xml文件爲:
android:allowBackup=」false」
參考文章:
http://forum.xda-developers.com/showthread.php?t=2011811
http://nelenkov.blogspot.in/2012/06/unpacking-android-backups.html