1. 程式人生 > >Android中解決破解簽名驗證之後導致的登入授權失效問題

Android中解決破解簽名驗證之後導致的登入授權失效問題

               

一、前言

之前已經介紹了一款自動爆破應用簽名工具kstools,不瞭解的同學還可以去看這篇文章:Android中自動爆破應用簽名工具kstools;有了這個工具,就不用在擔心簽名校驗了,不過在釋出工具之後,很多熱心的同學都很好奇就進行了嘗試,有成功的,也有失敗的,而在失敗中最多的問題就在於應用本身簽名爆破已經沒問題了,但是在第三方登入的時候就失效了,對於這個問題,不光是這個工具會帶來問題,主要是二次打包應用都會有這個問題,那麼今天就來分析一下如何解決二次打包帶來的登入失效問題。

二、社交登入SDK功能說明

首先我們要知道一件事,就是現在大部分的應用都採用了第三方登入SDK,也就是網上的ShareSDK功能包,這個功能包,其實很簡單,就是把多家登入平臺合成一起,就是聚合登入SDK功能:

因為我們要解決這個登入問題,所以得先去簡單的看一下這個聚合登入SDK原始碼實現,這個不難,直接下載jar包工程,使用也非常簡單:

下載下來之後,目錄下有一個QuickIntegrater.jar工具,可以直接執行,然後填寫具體的包名和專案名稱,之後就會生成對應的整合素材,這裡主要包括兩部分,一部分是原始多家社交平臺的jar包:

一部分就是配置資訊檔案ShareSDK.xml檔案:

這個配置檔案是關鍵核心,就是包含了多家平臺的社交資訊,而這些資訊必須應用自己去各家平臺上申請獲取資訊,這裡舉個QQ社交平臺申請資料:

這裡提交應用之後,會有一個appid和appkey這兩個值,然後再把這兩個值配置到自己的ShareSDK.xml中即可。所以這個聚合SDK其實沒做啥事情。

三、問題跟蹤

瞭解了上面聚合SDK功能之後,下面不多說了,直接看爆破app的原始碼,因為這個聚合SDK的包名是cn.sharesdk.x:

這裡我們看一下WX登入失效問題,直接看社交登入原始碼,(有的同學好奇,我怎麼一下就找到這個關鍵程式碼了,這個是有方法的,如果WX這種登入失效,在客戶端只能依靠應用的簽名信息來做判斷依據,所以只要在這個包下面搜字串"signature",就找到了):

這裡看到了:會判斷手機中安裝的WX簽名是否正確,如果失敗了,就會登入失效,因為WX的簽名信息不可能變動的,所以這裡就直接寫死判斷了。那麼這裡就發現了第一個問題了:因為我們之前用kstools工具爆破的時候是hook應用的PMS服務,攔截獲取簽名信息方法,然後返回爆破app正確的簽名,那麼現在這裡因為是獲取WX的簽名,但是也被我們攔截了,返回的是應用的簽名,這明顯就有問題了,所以我們解決這個問題需要修改一下爆破工具,修改很簡單,在攔截簽名信息加一個包名判斷,只攔截本應用的簽名信息

這個工具我修改了,已經更新到github上了,有問題的同學可以下載最新的在進行操作就可以了。

四、授權失敗問題分析

那麼到這裡就介紹了,之前kstools工具的一個漏洞,無差別的攔截了,導致WX也被幹了,需要做一層過濾,只需要攔截爆破app本身的簽名即可。不過可惜的是,解決了這個問題,在登入還是有問題,比如下面是授權Q登入問題:

這個問題修復其實才是我們本文的重點,也是網上很多同學二次打包之後遇到的問題,那麼下面就來詳細分析這個問題導致的原因,如何進行修復。

在修復這個問題之前,我們先猜想一下,Q是如何判斷應用被二次簽名拒絕授權了,還是那句話,在客戶端,只能依賴於簽名校驗資訊做判斷依據,那麼就不科學了,因為app我們已經爆破成功了,理論上應該授權是成功的,可以騙過Q的,但是結果不是這樣的。所以猜想:應用授權的時候給Q帶過去哪些資訊,從現象來看,應該不是應用簽名了,不過應用的包名是肯定有的,還有appid,為什麼了?因為之前說了如果想用Q社交登入功能,必須得去他後臺提交應用獲取對應的appid和appkey,而這時候上傳app,TX後臺已經記錄了應用的簽名信息,也就是在後臺有包名+appid+簽名信息對應關係了。所以app在授權登入帶過去的肯定有appid資訊和包名,然後Q在攜帶這些資訊去服務端進行驗證。所以獲取應用簽名信息肯定是Q端做的。

有了上面的猜想,下面可以進行驗證了,首先找到入口,直接使用adb shell dumpsys activity top找到授權頁面:

然後藉助Jadx工具開啟Q應用,這裡再次強調一次:TX家的app都很龐大,比如WX,Q等都是多dex檔案的,所以直接開啟apk會卡死的,一般activity類都是在主dex中的,所以可以解壓apk得到classes.dex直接開啟就好了

看到程式碼之後,心終於寬敞了,就和我們的猜想一模一樣,Q端得到傳遞過來的授權app包名,然後獲取其簽名信息,然後就開始進行網路請求授權:

這裡用的是post方式,我們把data中的資料放到json格式工具中:

看到了,這裡會上傳包名,appid,已經簽名信息,那麼這裡肯定會授權失敗了,因為在Q程式碼中通過包名獲取簽名信息肯定是二次打包之後的,因為我們攔截簽名信息只是在應用內,不是系統全域性的哦。

五、問題修復

到這裡我們瞭解了Q授權登入的大致流程了:需要授權app會攜帶自己在Q後端申請的appid,包名去Q端進行授權,然後Q端拿到包名之後,就獲取手機中安裝應用的簽名信息,然後去服務端進行授權驗證。因為我們二次打包簽名應用了,所以授權肯定是失敗的,所以Q提示非官方應用。瞭解流程之後,解決也是有很多種方法了,主要涉及兩點:

第一點:如果本地不做任何操作,可以把二次打包之後的應用從新提交到Q後臺獲取新的appid和appkey,然後替換他的ShareSDK.xml中的配置資訊即可,但是這種成功率幾乎為0,以為Q後臺有強大的查重機制,會被檢查到的,提示app重複。

第二點:第一點其實說的是理論知識,實際中幾乎行不通的,那麼就需要在本地進行操作了,這裡有兩個方法處理:

1》藉助Xposed進行系統攔截獲取簽名信息方法,通過判斷獲取簽名信息的包名來做一次過濾。這樣可以騙過Q,也可以騙過應用本身了。

2》因為Xposed需要的額外條件太多,不方便使用,所以這裡還可以修改Q中的那段授權程式碼中獲取簽名信息,直接替換成需要授權app正確的簽名信息。

這裡為了給大家介紹更多的逆向知識,就採用第二種了,因為第一種現在誰都會了,第二種需要改Q程式碼,回編譯Q有些問題正好給大家說明一下,下面就來操作一下。首先第一步,我們到構造出Q獲取簽名信息的演算法,這個簡單,直接把那部分程式碼拷貝出來就好了:

把這段程式碼已經HexUtil.a方法也考出來如下:

然後手機中安裝正版的授權app,在執行這段程式碼,獲取到正版授權app的簽名信息:

這樣,就拿到了,正確簽名。然後在去修改Q程式碼,在修改Q程式碼有個問題,就是因為TX家的App都做了回編譯混淆操作,所以這裡不能借助apktools進行反編譯修改器smali程式碼了,而需要用另外一種方式,直接解壓出他的dex檔案,然後操作即可。這裡不多介紹流程,後面會單獨出一個系列文章介紹如何進行回編譯操作。把這個正確的簽名信息在賦值給簽名變數,修改之後如下:

然後在把這個dex替換回去,重新簽名,安裝Q之後,可惜的時候執行報錯:

提示appid無效,不過這個問題已經對於我們來說不是問題了,因為我們有了kstools工具了,使用最新的kstools工具直接爆破即可。

這下就可以愉快的,進行Q登入授權了:

看到了,這裡可以正常的Q授權登入了,到這裡我們就介紹完了如何解決二次打包登入授權問題了,下面就來總結一下問題原因和具體操作。

本文主要講解了Q端登入授權問題解決方案,但是其他平臺原理都是類似,比如WX平臺,可以找到授權頁面,然後跟蹤程式碼即可,感興趣的同學可以自己研究解決了!

六、問題和解決方案總結

1、因為之前的kstools進行攔截app內部獲取簽名的方法,沒有做應用包名區分,所以把登入的時候判斷社交APP的簽名也給攔截了,導致登入授權失敗,這個問題直接修復了kstools工具,已經更新到github上,可下載最新的就好了。

2、正常二次打包簽名登入授權統一報錯資訊,Q端提示非正版app,這個是因為在授權app去Q端進行授權的時候會攜帶自身的appid和包名,然後Q端會在本地通過包名獲取其簽名信息,然後去服務端進行驗證,所以這裡解決方法很多,可以藉助Xposed直接hook系統的獲取簽名方法,還有就是修改Q端程式碼替換正確的app簽名信息,當然第二種方式不需要藉助Xposed,限制條件雖然少了,但是操作侷限性很大,需要重新安裝Q,而且只能對授權一個app有效,如果其他app需要授權,還得繼續修改Q端程式碼。

3、關於TX家族的app對回編譯都做了很多混淆策略,所以我們得用其他方式二次打包,具體方案會在後續給出一個系列介紹文章,詳細介紹如何操作,敬請期待。

說明:關於kstools工具出來之後,很多公司做了新的防護策略,其實這裡有一個新的防護策略很簡單,就是讀取META-INF目錄下的RSA檔案中的簽名信息,這樣可以直接校驗,而不是通過系統的那個方法獲取簽名信息,這樣二次打包之後,這個RSA檔案簽名肯定會發生變化的,所以這個就是一個可以抗衡kstools工具的好方案哦。所以說安全和逆向永不停息,安全不息,逆向不止!

嚴重宣告:本文主要利用一個樣本案例介紹了,如何修復二次打包之後授權登入失敗問題修復方案,如果有人利用本文案例或者技術進行非法商業操作,帶來的一切法律責任將由操作者本人負責,與文章作者無關,最後還是由衷的希望各位同學能夠秉著學習逆向知識的態度閱讀文字,非常感謝!

《Android應用安全防護和逆向分析》

點選立即購買:京東  天貓  亞馬遜 噹噹

最後還是要感謝某某某同學給我製作的kstools工具效果圖,太喜歡了

更多內容:點選這裡

關注微信公眾號,最新技術乾貨實時推送

編碼美麗技術圈微信掃一掃進入我的"技術圈"世界掃一掃加小編微信新增時請註明:“編碼美麗”非常感謝!