Android中解決破解簽名驗證之后導(dǎo)致的登錄授權(quán)失效問題

一策添、前言
之前已經(jīng)介紹了一款自動爆破應(yīng)用簽名工具kstools,不了解的同學(xué)還可以去看這篇文章:Android中自動爆破應(yīng)用簽名工具kstools;有了這個工具胎围,就不用在擔(dān)心簽名校驗了窖剑,不過在發(fā)布工具之后,很多熱心的同學(xué)都很好奇就進行了嘗試胞得,有成功的,也有失敗的屹电,而在失敗中最多的問題就在于應(yīng)用本身簽名爆破已經(jīng)沒問題了,但是在第三方登錄的時候就失效了跃巡,對于這個問題危号,不光是這個工具會帶來問題,主要是二次打包應(yīng)用都會有這個問題素邪,那么今天就來分析一下如何解決二次打包帶來的登錄失效問題外莲。

二、社交登錄SDK功能說明
首先我們要知道一件事兔朦,就是現(xiàn)在大部分的應(yīng)用都采用了第三方登錄SDK偷线,也就是網(wǎng)上的ShareSDK功能包,這個功能包沽甥,其實很簡單声邦,就是把多家登錄平臺合成一起,就是聚合登錄SDK功能:



因為我們要解決這個登錄問題摆舟,所以得先去簡單的看一下這個聚合登錄SDK源碼實現(xiàn)亥曹,這個不難邓了,直接下載jar包工程,使用也非常簡單:



下載下來之后媳瞪,目錄下有一個QuickIntegrater.jar工具骗炉,可以直接運行,然后填寫具體的包名和項目名稱蛇受,之后就會生成對應(yīng)的集成素材句葵,這里主要包括兩部分,一部分是原始多家社交平臺的jar包:

一部分就是配置信息文件ShareSDK.xml文件:

這個配置文件是關(guān)鍵核心兢仰,就是包含了多家平臺的社交信息乍丈,而這些信息必須應(yīng)用自己去各家平臺上申請獲取信息,這里舉個QQ社交平臺申請資料:



這里提交應(yīng)用之后旨别,會有一個appid和appkey這兩個值诗赌,然后再把這兩個值配置到自己的ShareSDK.xml中即可。所以這個聚合SDK其實沒做啥事情秸弛。

三铭若、問題跟蹤
了解了上面聚合SDK功能之后,下面不多說了递览,直接看爆破app的源碼叼屠,因為這個聚合SDK的包名是cn.sharesdk.x:


這里我們看一下WX登錄失效問題,直接看社交登錄源碼绞铃,(有的同學(xué)好奇镜雨,我怎么一下就找到這個關(guān)鍵代碼了,這個是有方法的儿捧,如果WX這種登錄失效荚坞,在客戶端只能依靠應(yīng)用的簽名信息來做判斷依據(jù),所以只要在這個包下面搜字符串"signature"菲盾,就找到了):

這里看到了:會判斷手機中安裝的WX簽名是否正確颓影,如果失敗了,就會登錄失效懒鉴,因為WX的簽名信息不可能變動的诡挂,所以這里就直接寫死判斷了。那么這里就發(fā)現(xiàn)了第一個問題了:因為我們之前用kstools工具爆破的時候是hook應(yīng)用的PMS服務(wù)临谱,攔截獲取簽名信息方法璃俗,然后返回爆破app正確的簽名,那么現(xiàn)在這里因為是獲取WX的簽名悉默,但是也被我們攔截了城豁,返回的是應(yīng)用的簽名,這明顯就有問題了麦牺,所以我們解決這個問題需要修改一下爆破工具钮蛛,修改很簡單鞭缭,在攔截簽名信息加一個包名判斷,只攔截本應(yīng)用的簽名信息

這個工具我修改了魏颓,已經(jīng)更新到github上了岭辣,有問題的同學(xué)可以下載最新的在進行操作就可以了。

四甸饱、授權(quán)失敗問題分析
那么到這里就介紹了沦童,之前kstools工具的一個漏洞,無差別的攔截了叹话,導(dǎo)致WX也被干了偷遗,需要做一層過濾,只需要攔截爆破app本身的簽名即可驼壶。不過可惜的是氏豌,解決了這個問題,在登錄還是有問題热凹,比如下面是授權(quán)Q登錄問題:



這個問題修復(fù)其實才是我們本文的重點泵喘,也是網(wǎng)上很多同學(xué)二次打包之后遇到的問題,那么下面就來詳細分析這個問題導(dǎo)致的原因般妙,如何進行修復(fù)纪铺。

在修復(fù)這個問題之前,我們先猜想一下碟渺,Q是如何判斷應(yīng)用被二次簽名拒絕授權(quán)了鲜锚,還是那句話,在客戶端苫拍,只能依賴于簽名校驗信息做判斷依據(jù)芜繁,那么就不科學(xué)了,因為app我們已經(jīng)爆破成功了绒极,理論上應(yīng)該授權(quán)是成功的浆洗,可以騙過Q的,但是結(jié)果不是這樣的集峦。所以猜想:應(yīng)用授權(quán)的時候給Q帶過去哪些信息,從現(xiàn)象來看抠刺,應(yīng)該不是應(yīng)用簽名了塔淤,不過應(yīng)用的包名是肯定有的,還有appid速妖,為什么了高蜂?因為之前說了如果想用Q社交登錄功能,必須得去他后臺提交應(yīng)用獲取對應(yīng)的appid和appkey罕容,而這時候上傳app备恤,TX后臺已經(jīng)記錄了應(yīng)用的簽名信息稿饰,也就是在后臺有包名+appid+簽名信息對應(yīng)關(guān)系了。所以app在授權(quán)登錄帶過去的肯定有appid信息和包名露泊,然后Q在攜帶這些信息去服務(wù)端進行驗證喉镰。所以獲取應(yīng)用簽名信息肯定是Q端做的。

有了上面的猜想惭笑,下面可以進行驗證了侣姆,首先找到入口,直接使用adb shell dumpsys activity top找到授權(quán)頁面:


然后借助Jadx工具打開Q應(yīng)用沉噩,這里再次強調(diào)一次:TX家的app都很龐大捺宗,比如WX,Q等都是多dex文件的,所以直接打開apk會卡死的川蒙,一般activity類都是在主dex中的蚜厉,所以可以解壓apk得到classes.dex直接打開就好了

看到代碼之后,心終于寬敞了畜眨,就和我們的猜想一模一樣昼牛,Q端得到傳遞過來的授權(quán)app包名,然后獲取其簽名信息胶果,然后就開始進行網(wǎng)絡(luò)請求授權(quán):

這里用的是post方式匾嘱,我們把data中的數(shù)據(jù)放到j(luò)son格式工具中:

看到了,這里會上傳包名早抠,appid霎烙,已經(jīng)簽名信息,那么這里肯定會授權(quán)失敗了蕊连,因為在Q代碼中通過包名獲取簽名信息肯定是二次打包之后的悬垃,因為我們攔截簽名信息只是在應(yīng)用內(nèi),不是系統(tǒng)全局的哦甘苍。
五尝蠕、問題修復(fù)
到這里我們了解了Q授權(quán)登錄的大致流程了:需要授權(quán)app會攜帶自己在Q后端申請的appid,包名去Q端進行授權(quán)载庭,然后Q端拿到包名之后看彼,就獲取手機中安裝應(yīng)用的簽名信息,然后去服務(wù)端進行授權(quán)驗證囚聚。因為我們二次打包簽名應(yīng)用了靖榕,所以授權(quán)肯定是失敗的,所以Q提示非官方應(yīng)用顽铸。了解流程之后茁计,解決也是有很多種方法了,主要涉及兩點:
第一點:如果本地不做任何操作谓松,可以把二次打包之后的應(yīng)用從新提交到Q后臺獲取新的appid和appkey星压,然后替換他的ShareSDK.xml中的配置信息即可践剂,但是這種成功率幾乎為0,以為Q后臺有強大的查重機制娜膘,會被檢查到的逊脯,提示app重復(fù)。
第二點:第一點其實說的是理論知識劲绪,實際中幾乎行不通的男窟,那么就需要在本地進行操作了,這里有兩個方法處理:
1》借助Xposed進行系統(tǒng)攔截獲取簽名信息方法贾富,通過判斷獲取簽名信息的包名來做一次過濾歉眷。這樣可以騙過Q,也可以騙過應(yīng)用本身了颤枪。
2》因為Xposed需要的額外條件太多汗捡,不方便使用,所以這里還可以修改Q中的那段授權(quán)代碼中獲取簽名信息畏纲,直接替換成需要授權(quán)app正確的簽名信息扇住。
這里為了給大家介紹更多的逆向知識,就采用第二種了盗胀,因為第一種現(xiàn)在誰都會了艘蹋,第二種需要改Q代碼,回編譯Q有些問題正好給大家說明一下票灰,下面就來操作一下女阀。首先第一步,我們到構(gòu)造出Q獲取簽名信息的算法屑迂,這個簡單浸策,直接把那部分代碼拷貝出來就好了:

把這段代碼已經(jīng)HexUtil.a方法也考出來如下:

然后手機中安裝正版的授權(quán)app,在運行這段代碼惹盼,獲取到正版授權(quán)app的簽名信息:

這樣庸汗,就拿到了,正確簽名手报。然后在去修改Q代碼蚯舱,在修改Q代碼有個問題,就是因為TX家的App都做了回編譯混淆操作掩蛤,所以這里不能借助apktools進行反編譯修改器smali代碼了晓淀,而需要用另外一種方式,直接解壓出他的dex文件盏档,然后操作即可。這里不多介紹流程燥爷,后面會單獨出一個系列文章介紹如何進行回編譯操作蜈亩。把這個正確的簽名信息在賦值給簽名變量懦窘,修改之后如下:

然后在把這個dex替換回去,重新簽名稚配,安裝Q之后畅涂,可惜的時候運行報錯:

提示appid無效,不過這個問題已經(jīng)對于我們來說不是問題了道川,因為我們有了kstools工具了午衰,使用最新的kstools工具直接爆破即可。

這下就可以愉快的冒萄,進行Q登錄授權(quán)了:
[圖片上傳中臊岸。。尊流。(19)]
看到了帅戒,這里可以正常的Q授權(quán)登錄了,到這里我們就介紹完了如何解決二次打包登錄授權(quán)問題了崖技,下面就來總結(jié)一下問題原因和具體操作逻住。

本文主要講解了Q端登錄授權(quán)問題解決方案,但是其他平臺原理都是類似迎献,比如WX平臺瞎访,可以找到授權(quán)頁面,然后跟蹤代碼即可吁恍,感興趣的同學(xué)可以自己研究解決了扒秸!

六、問題和解決方案總結(jié)
1践盼、因為之前的kstools進行攔截app內(nèi)部獲取簽名的方法鸦采,沒有做應(yīng)用包名區(qū)分,所以把登錄的時候判斷社交APP的簽名也給攔截了咕幻,導(dǎo)致登錄授權(quán)失敗渔伯,這個問題直接修復(fù)了kstools工具,已經(jīng)更新到github上肄程,可下載最新的就好了锣吼。
2、正常二次打包簽名登錄授權(quán)統(tǒng)一報錯信息蓝厌,Q端提示非正版app玄叠,這個是因為在授權(quán)app去Q端進行授權(quán)的時候會攜帶自身的appid和包名,然后Q端會在本地通過包名獲取其簽名信息拓提,然后去服務(wù)端進行驗證读恃,所以這里解決方法很多,可以借助Xposed直接hook系統(tǒng)的獲取簽名方法,還有就是修改Q端代碼替換正確的app簽名信息寺惫,當(dāng)然第二種方式不需要借助Xposed疹吃,限制條件雖然少了,但是操作局限性很大西雀,需要重新安裝Q萨驶,而且只能對授權(quán)一個app有效,如果其他app需要授權(quán)艇肴,還得繼續(xù)修改Q端代碼腔呜。
3、關(guān)于TX家族的app對回編譯都做了很多混淆策略再悼,所以我們得用其他方式二次打包核畴,具體方案會在后續(xù)給出一個系列介紹文章,詳細介紹如何操作帮哈,敬請期待膛檀。

說明:關(guān)于kstools工具出來之后,很多公司做了新的防護策略娘侍,其實這里有一個新的防護策略很簡單咖刃,就是讀取META-INF目錄下的RSA文件中的簽名信息,這樣可以直接校驗憾筏,而不是通過系統(tǒng)的那個方法獲取簽名信息痒芝,這樣二次打包之后迷殿,這個RSA文件簽名肯定會發(fā)生變化的,所以這個就是一個可以抗衡kstools工具的好方案哦。所以說安全和逆向永不停息李丰,安全不息拖叙,逆向不止厌衔!

kstools工具下載地址:https://github.com/fourbrother/kstools

嚴重聲明:本文主要利用一個樣本案例介紹了钱骂,如何修復(fù)二次打包之后授權(quán)登錄失敗問題修復(fù)方案,如果有人利用本文案例或者技術(shù)進行非法商業(yè)操作黄痪,帶來的一切法律責(zé)任將由操作者本人負責(zé)紧帕,與文章作者無關(guān),最后還是由衷的希望各位同學(xué)能夠秉著學(xué)習(xí)逆向知識的態(tài)度閱讀文本桅打,非常感謝是嗜!


最后還是要感謝某某某同學(xué)給我制作的kstools工具效果圖,太喜歡了

更多內(nèi)容:點擊這里

關(guān)注微信公眾號挺尾,最新技術(shù)干貨實時推送
[圖片上傳中鹅搪。。遭铺。(21)]
編碼美麗技術(shù)圈
微信掃一掃進入我的"技術(shù)圈"世界
[圖片上傳中丽柿。恢准。。(22)]
掃一掃加小編微信添加時請注明:“編碼美麗”非常感謝甫题!
[圖片上傳中顷歌。。幔睬。(23)]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芹扭,隨后出現(xiàn)的幾起案子麻顶,更是在濱河造成了極大的恐慌,老刑警劉巖舱卡,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辅肾,死亡現(xiàn)場離奇詭異,居然都是意外死亡轮锥,警方通過查閱死者的電腦和手機矫钓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舍杜,“玉大人新娜,你說我怎么就攤上這事〖燃ǎ” “怎么了概龄?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饲握。 經(jīng)常有香客問我私杜,道長,這世上最難降的妖魔是什么救欧? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任衰粹,我火速辦了婚禮,結(jié)果婚禮上笆怠,老公的妹妹穿的比我還像新娘铝耻。我一直安慰自己,他們只是感情好骑疆,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布田篇。 她就那樣靜靜地躺著,像睡著了一般箍铭。 火紅的嫁衣襯著肌膚如雪泊柬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天诈火,我揣著相機與錄音兽赁,去河邊找鬼状答。 笑死,一個胖子當(dāng)著我的面吹牛刀崖,可吹牛的內(nèi)容都是我干的惊科。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼亮钦,長吁一口氣:“原來是場噩夢啊……” “哼馆截!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜂莉,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜡娶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后映穗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窖张,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年蚁滋,在試婚紗的時候發(fā)現(xiàn)自己被綠了宿接。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡辕录,死狀恐怖睦霎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踏拜,我是刑警寧澤碎赢,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站速梗,受9級特大地震影響肮塞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姻锁,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一枕赵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧位隶,春花似錦拷窜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至笋妥,卻和暖如春懊昨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背春宣。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工酵颁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嫉你,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓躏惋,卻偏偏與公主長得像幽污,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子簿姨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容