當前位置:
首頁 > 最新 > 初探Android逆向:通過遊戲APP破解引發的安全思考

初探Android逆向:通過遊戲APP破解引發的安全思考

如今移動互聯網已經完全融入到我們的生活中,各類APP也是層出不窮,因此對於安卓APP安全的研究也尤為重要。本文通過對一款安卓APP的破解實例,來引出對於APP安全的探討。(本人純小白,初次接觸安卓逆向一星期,略有體驗,在這裡分享一下)

本次破解的安卓APP是某款射擊類遊戲,我們發現在遊戲裡面有購買補給的功能,那麼我們就針對這個功能進行破解,旨在達到免費購買。

首先,對該遊戲進行還原,即反編譯。反編譯後可以查看該APP的配置文檔、演算法邏輯等,方便我們對其進行分析。在這裡,我們使用工具AndroidKiller來對其進行反編譯。

通過上圖,可以看到APP的組成部分。我們只需要關注smali文件,因為Smali是安卓系統里的 Java 虛擬機(Dalvik)所使用的一種 dex 格式文件的彙編器。我們可以通過smali文件來查看APP的偽代碼,從而了解其演算法邏輯等。

接下來就是找到APP支付的入口,可以通過搜索success、pay、paid等關鍵字元串來找到相關文件。

點進這個文件進行查看,我們可以看到一些與支付相關的字元串,猜測這裡可能就是支付函數的入口,至於到底是不是,我們接著看下面。

這些smali語句可能看著晦澀難懂,沒關係,我們可以通過AndroidKiller將其轉化為我們熟悉的java代碼。

這裡是一個switch語句,可能是對支付功能做的一些判斷。我們可以看到這裡有個MiguPay函數,這個函數到底是幹什麼的呢?點擊MiguSdk類,可以跳轉到MiguSdk類。

我們可以看到該方法里調用了runOnUiThread方法,其參數中有涉及另外一個類MiguSdk.2,跟著這個方法繼續跳轉下去。

令人驚喜的一幕出現了,我們可以看到「購買道具」「成功」等字元串,到這裡差不多就可以肯定這裡就是與支付相關的方法了!好了,我們又跳轉到之前switch判斷的函數。

之前我們看到,當調用GMessage.success()時,就是說明購買成功。而這裡的:pswitch_0語句就是發送的GMessage.success()。這就意味著,如果所有的判斷語句都和pswitch_0里執行的一樣,那麼是不是所有的條件都能購買成功呢?我們試試,將所有的:pswitch_x全部改為pswitch_0。

用AndroidKiller對該APP進行打包簽名,安裝測試!

安裝失敗!提示簽名校驗不通過!看來該APP進行了簽名校驗,所謂的簽名校驗就是為了防止自己的應用被反編譯後重新打包。那麼有沒有方法進行繞過呢?當然有!其實簽名校驗一般寫在native層so文件里,或者是java層。通過搜索SignKey、Signature等關鍵字元串,一般可以找到簽名校驗的入口。以下文件就是判斷簽名的so文件里的相關函數,利用工具IDA轉換為C語言的偽代碼。

從上圖可以看出,最後做了個if語句的判斷,那麼我們直接用十六進位編輯器將return語句直接改為return true。最後再次編譯打包該APP,ok!破解成功!

思考:開發一個有商用價值的APP,無疑是需要大量的精力的,如果APP能被輕易破解,那帶來的損失肯定是讓人無法接受的。因此對於APP的安全防護顯得至關重要。關於APP逆向的安全機制,一般有以下幾種:

1、 代碼混淆:對發布出去的程序進行重新組織和處理,使得處理後的代碼與處理前代碼完成相同的功能,而混淆後的代碼很難被反編譯,即使反編譯成功也很難得出程序的真正語義。

2、 簽名校驗:比較用來簽名app的證書的hash與我們寫死在其中的hash是否一致。

3、 加殼處理:在二進位的程序中植入一段代碼,在運行的時候優先取得程序的控制權,做一些額外的工作。

* 本文作者:滄海一粟,轉載註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

Harpoon:OSINT威脅情報工具
關於網路釣魚的深入討論

TAG:FreeBuf |