第一個Android crackme(2016-05)

第一個Android crackme java

 

0x00 背景安全

最近在學習Android的逆向,把基本的環境搭好後,看了看《第一行代碼--Android》,而後就按照非蟲大牛的《Android軟件安全與逆向分析》開始了第一個apkcrack編輯器

這篇文章權當是記錄,沒有什麼技術含量。函數

 

0x01初探工具

首先來看看要crackapk長啥樣兒,啓動一個安卓虛擬機,而後使用adbapk安裝到虛擬機中,命令以下:學習

能夠看到虛擬機中已經安裝了該apk測試

 

啓動這個apk,輸入任意的用戶名和註冊碼,點擊註冊按鈕,能夠看到有一個Toast消息:spa

 

Toast的文本內容爲"無效用戶名或註冊碼",記錄下這個反饋信息。命令行

 

0x02反編譯3d

利用apktoolapk反編譯,生成Smali格式的反彙編代碼,這一步可使用不少帶有GUI的工具好比apk改之理、AndroidKiller等,目前鑑於初學,爲了更好的搞清楚整個過程,因此仍是使用apktool的命令行來操做。

在反編譯輸出的文件夾outdir中找到strings.xml,使用任意文本編輯器打開:

這裏能夠看到剛纔Toast的文本內容,對應的名字爲"unsuccessed"String.xml文件中的全部字符串資源都在而後在"gen</packagename>/R.java"文件的String類中被標識,每一個字符串都有惟一的int類型索引值,使用apktool反編譯apk文件後,全部的索引值都保存在string.,xml文件同目錄下的public.xml文件中。查看public.xml文件:

unsuccessed對應的id 0x7f05000b,搜索反編譯出來的全部文件內容,發現只有MainActivity$1.smali文件對0x7f05000b有一處引用:

即便對smali語法不熟悉,看到調用的函數也能猜想出,這是在調用Toast函數對unsuccessed的文本內容進行顯示。在引用0x7f05000b以前一點,能夠看到有一個判斷跳轉的指令:"if-nez v0,cond_0",若是不跳轉則Toast unsuccessed,不然跳轉到cond_0處執行,查看cond_0處的代碼:

代碼的結構和引用0x7f05000b處的相似,利用相同的方法能夠找到0x7f05000c對應的是字符串"恭喜您!註冊成功"。因此若是能讓這個跳轉成功的話,也就意味着註冊成功了。因此代碼"if-nez v0,:cond_0"是程序破解的關鍵,將"if-nez"改成相反的指令"if-eqz"保存退出。

 

0x03從新編譯

接下來使用apktool將修改後的文件從新進行編譯打包成apk文件,命令以下:

 

生成的apk文件是在dist文件夾下,和原apk同名。

編譯生成的crackme02.apk沒有簽名還不能進行安裝,使用signapk.jar對這個apk進行簽名。

 

接下來測試一下修改後的apk是否起效了,先在虛擬機裏面卸載剛剛安裝的crackme應用:

而後使用adb install將修改後的apk安裝到虛擬機中:

能夠看到,輸入任意的用戶名和註冊碼,Toast消息顯示註冊成功了。

 

 

by:會飛的貓轉載請註明:http://www.cnblogs.com/flycat-2016

相關文章
相關標籤/搜索