APP安全分析之打車軟件
最近發現某款打車軟件的APK非常的火,并聽說他們進行了非常嚴密的防護,防止用戶進行二次打包。今天我們來分析一下他的安全性到底如何。
經過嚴密的分析發現:該打車APP(司機版)主要的防護在兩個地方
***個是:登錄過程中,通過傳遞context對象到so庫中的方式去拿到apk的簽名信息的md5簽名信息上傳。
第二個是:在主界面中,每次onResume中,調用一個私有類進行校驗,如果校驗不通過,則彈出“請卸載該軟件后再使用~”的提示。迫使點擊確定的方式退出app。
首先我們來說***個校驗:本身使用so作為獲取簽名信息的地方相應的比在java中獲取簽名信息的方式要安全。但是so獲取簽名信息必須給底層傳遞context對象。那么防護弱點也主要在這個context對象的傳遞上。
在com.sdu.didi.net包的c方法中
里面的SecurityLib.getUUID(this.b)便是調用so庫的getUUID方法,并傳遞context。
其中UUID是在so庫中通過簽名信息換算過來的,this.b是application的getContext。
那么我們在application中添加重寫getPackageManager方法,并修改其中的返回值。返回我們自己寫的PackageManager。如下
修改其中的getPackageInfo方法,返回我們自己的packageInfo對象。
ChangesSignture方法如下:其中的Signature的值是司機正版的簽名信息的MD5值。
通過以上的修改,經過測試。登錄過程的校驗已經沒有任何作用了。
下面我們來說第二個校驗:
在com.sdu.didi.gui.main包下的MainActivity中
其中checkCheatTool();會進行校驗。如果是盜版會彈出提示:“請卸載該軟件后再使用”,這種防護更沒有安全性可言了。我們只需要把這行代碼注釋或者刪除掉。這個校驗就沒有任何的作用了。
筆者***想說:
加密技術,也是一個很是需要深度研究的項目,有興趣的話可以多看看別人用的加密方式,也可以去研究一些專門提供加密服務的第三方平臺,當然,你要是懶省事兒的話也是可以直接用的。