EX05_01_.apk
通過查看java源碼我們可以發現,要想讓程序彈出“right++”,無論輸入什麼,都無法滿足if判斷條件(即與輸入無關)。於是我們修改smali代碼中的跳轉條件,然後在AndroidKiller中重打包應用程序,生成的新apk就是破解成功的apk。我們在模擬器上安裝運行,就會發現此時無論輸入什麼,應用程序都會彈出“right++”的提示信息,破解成功。
這裏不止這一種修改方式,我們還可以直接將“gogo”字符串變量修改爲“11”,以滿足if判斷條件。
Crackme02.apk
在jeb中分析java源碼“MainActivity”,定位到關鍵函數“checkSN”,通過分析該函數得到程序對於用戶輸入的用戶名和16位註冊碼的處理流程如下:生成用戶輸入的用戶名的32位MD5值,然後依次取MD5值的第i、i+2…(i從0開始取值,小於32)位處的字符,拼接成正確的註冊碼。
根據分析,我們寫出對應的java程序,實現輸入用戶名,輸出對應正確的註冊碼的功能。
隨便輸入一個用戶名,輸入上圖中程序生成的註冊碼,點擊“註冊”,程序就會成功註冊如下圖,破解成功。
CrackMe-F1F2.apk
在jeb中分析java源碼“LisenceCheck”,定位到關鍵函數如下圖,分析該函數可得到以下信息——
- 輸入的用戶名是由大寫字母組成的。
- 正確的序列號應該是由0-9這幾個數字組成的一個字符串。
- 程序的關鍵操作是一些異或計算。
根據分析,我們寫出對應的java程序,實現輸入用戶名,輸出對應正確的序列號的功能。
輸入一個用戶名及上圖中程序生成的序列號,點擊“驗證”,程序就會彈出“Lisence Correct!”的提示信息,破解成功。