最近感覺自己把做客戶端,玩成了做服務(wù)端的感覺糊昙。凌晨一兩點老大還在群里吼辛掠,整個人都不好,每天精神都很敏感。一次線上的重大bug萝衩,app癱瘓了一個小時回挽,徹底讓人懷疑人生。這都是錢呀猩谊!/(ㄒoㄒ)/~~
起因
大概晚上九點多千劈,服務(wù)端上線了一套新的功能。因為一般情況下不會對客戶端造成什么影響就沒有經(jīng)過QA牌捷。但一上線不久墙牌,iOS客戶端線上的一打開閃退,根本無法用暗甥。大佬氣得都快炸了喜滨,后經(jīng)服務(wù)端代碼回滾,還是一打開就閃退撤防。
由于線上的app是經(jīng)過
**
企業(yè)重簽名的渠道虽风,非AppStore渠道,所以客戶端無法聯(lián)機調(diào)試寄月。
現(xiàn)象很奇怪:
- 如果斷網(wǎng)情況下辜膝,可以進(jìn)入app,過一段時間重新聯(lián)網(wǎng)就可以正常使用
- 服務(wù)端確實改了部分接口代碼剥懒,但是已經(jīng)回滾了内舟,還是閃退。
- 之前上線AppStore的版本沒有閃退
- 自己打的包根本就不會閃退初橘,只有經(jīng)過企業(yè)重簽的才會閃退验游。
最開始猜測跟服務(wù)端回滾不徹底導(dǎo)致的,可是從AppStore下載的是可以正常使用保檐。自己打的包又沒有出現(xiàn)崩潰的現(xiàn)象耕蝉。根據(jù)app是在啟動的時候就會崩潰,定位到是app請求全局配置的時候就崩潰了夜只,連signup都沒走到垒在。
因為無法連接崩潰版本直接測試,于是想到通過抓包工具扔亥,抓取到底是哪個接口反饋的數(shù)據(jù)出現(xiàn)了問題场躯。問題轉(zhuǎn)移到抓包解析錯誤結(jié)果。
抓包分析
首先用到了WireShark旅挤。一般使用Wireshark只能看到ip地址踢关,但是看域名更方便更簡明。想看域名需要簡單去設(shè)置一下粘茄。
抓到的數(shù)據(jù)如下:
但是由于現(xiàn)在用的都是https签舞,如果不解密根本看不了返回了什么內(nèi)容秕脓。這他媽就尷尬了。
網(wǎng)上搜了一下究竟有什么辦法可以讓wireshark解密數(shù)據(jù)儒搭?大致可以通過下面幾種方法來使wireshark能解密https數(shù)據(jù)包吠架。
- 中間人攻擊;
- 設(shè)置web服務(wù)器使用RSA作為交換密鑰算法;
- 如果是用chrome,firefox,可以設(shè)置導(dǎo)出pre-master-secret log搂鲫,然后wireshark設(shè)置pre-master-secret log路徑傍药,這樣就可以解密了。
一看這種就得花大把時間去弄魂仍。于是轉(zhuǎn)到了使用Charles抓包的思路上
雖然Charles并沒有WireShark那么牛逼怔檩,但是在客戶端抓包分析方面確實比WireShark簡單不少。
使用Charles抓包https幾個需要注意的地方這里提示一下蓄诽。
沒正確設(shè)置的時候左邊顯示如下:
設(shè)置正確之后:
一薛训、安裝SSL證書到手機設(shè)備
點擊 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device
出現(xiàn)彈窗得到地址 chls.pro/ssl
在手機Safari瀏覽器輸入地址 chls.pro/ssl,出現(xiàn)證書安裝頁面仑氛,點擊安裝
手機設(shè)置有密碼的輸入密碼進(jìn)行安裝
iOS 10.3之后系統(tǒng)乙埃,需要在 設(shè)置→通用→關(guān)于本機→證書信任設(shè)置 里面啟用完全信任Charles證書
二、Charles設(shè)置Proxy
Proxy -> SSL Proxying Settings...
勾選Enable SSL Proxying,點擊Add
設(shè)置端口443
分析數(shù)據(jù)
通過分析請求的域名锯岖,對比發(fā)現(xiàn)自己打的包一起啟動請求的數(shù)據(jù)和三個域名相關(guān)介袜。而通過企業(yè)重簽名的包和四個域名想。
自己打的包:
企業(yè)重簽名的包:
對比下來最終確定是企業(yè)重簽名的包多了一個www.開頭的請求出吹。
但是到這里還是無法保證就是這個請求這個域名導(dǎo)致的問題遇伞。接下來就是通過修改本地的host文件,把上面的幾個域名重定向到本地127.0.01捶牢。一個一個去排查到底是哪個域名導(dǎo)致的鸠珠。
通過更改本地Host,強制讓請求這個域名的接口不返回數(shù)據(jù)秋麸。
最終的確沒有發(fā)現(xiàn)崩潰了渐排。
原因就是請求這個域名導(dǎo)致的。這個時候大家已經(jīng)找大線索灸蟆。順藤摸瓜驯耻,肯定是重簽名導(dǎo)致的,后來結(jié)果和對方溝通炒考。是因為重簽名在我們包里面加了一些hack代碼可缚,應(yīng)該和注入dyld差不多,第一次感受到iOS還是要走正規(guī)渠道發(fā)布才行斋枢。
總結(jié)
- 市面上的重簽名服務(wù)太不靠譜帘靡,莫名其妙給你插入一些不可靠的代碼
- 控制變量法,??在解決問題上還是很管用的
- 常見的抓包技巧以及host的這些還是要掌握杏慰。比如可以通過Charles設(shè)置代理测柠,然后修改host,達(dá)到中間人攻擊的效果缘滥,給客戶端返回自定義的數(shù)據(jù)轰胁。
擴展閱讀
為什么Wireshark無法解密HTTPS數(shù)據(jù)
WireShark破解SSL加密網(wǎng)絡(luò)數(shù)據(jù)包