現在這個大數據時代,流量逐漸由web端轉移到移動端,而且目前主流的移動端就是安卓和ios端了,隨着時間的積累,很多平台的數據也越來越龐大,數據越來越多,同時,針對這方面的爬蟲分析也慢慢開始多了起來,這真是我的切身體驗,現在基本都是對app的分析了,什么脫殼逆向,反編譯重打包啥的都是一套流程了。
由於很多平台針對爬蟲抓包app的確實頭大,所以對其反制的方法也越來越多,比如什么ssl pinning檢測啊,設置無代理模式啊,源碼加固加混淆啥的的也越來越成了常規手段。
之前的ssl pinning我已經分析過了,今天就分析下無代理模式,源碼加固等的那些后面有時間再另外寫一篇分析的博文了。
進入正題
什么是無代理模式
即在app包里,給網絡請求的接口部分,設置個NO_PROXY屬性,比如如下,圖來源於網絡:
重要的部分只是那一小段:
.proxy(Proxy.NO_PROXY)
設置完就可以生效了,來試試,我這里找了個app,別人開發的作為學習使用的,但是加了無代理模式,我配置好代理證書抓包看看:
fiddler,不行,根本就沒看到數據接口:
charles,也一樣看不到,只抓到了圖片,比fiddler好一點,至少還能看到圖片:
那這么說,真的可以防止fiddler和charles等抓包工具抓包了,是不是瞬間覺得好6啊,確實6,但是,有了它就是絕對安全了嗎?應該不用我多說,相信你也知道答案了。
無代理的原理
在說怎么處理這種問題之前,先說說無代理的原理,因為目前,國外不知道,國內的話,很多的對app的分析還就是直接用fiddler和charles進行抓包分析,說白了就是在在手機上配置fiddler或者charles的證書,然后http和https協議的包全部都會從抓包工具里經過,進而就可以分析接口數據了,相關步驟可以看我這篇博文里的安卓抓包配置:對app的反爬測試之apk逆向分析-frida繞過ssl pinning檢測 打開后,按 ctrl +f 搜索關鍵詞 【安卓機上安裝ssl證書】就可以看到了
像上面說的在手機上配置個代理證書就可以實時監測接口數據的交互的,這種的就是代理模式,而上面剛說的用.Proxy(Proxy.NO_PROXY)設置無代理模式就剛好能夠針對代理來處理,既然都已經設置了無代理模式,那么不管你用什么以代理為原理的抓包工具都無效了,再牛逼也沒用。
這種方法,可以防御一大片的中級爬蟲,讓他們毫無頭緒,一籌莫展,懵逼,傻眼,懷疑人生
當然針對稍微高級點的,有點經驗的爬蟲工程師,那還是沒辦法
對無代理的抓包
目前,據我了解,目前的方法有以下幾種:
- 掛VPN抓包,安卓端使用drony,ios端使用Shadowrocket
- xposed hook
- Postern強制抓包
- wireshark抓包分析
前面說了,代理不行,那可以用vpn啊,用過vpn的兄弟,不多說啊,你懂的,畢竟說大了可是違反網絡安全法的,自己懂就行了,但是我這里說的並不是可以訪問國外網站的那種vpn,只是都是同一個原理而已,什么原理呢,就是一個數據中轉,跟代理類似,但是並不是就行了,這個不用太過去糾結其實,因為我翻了半天資料都沒看懂。
今天我就主要介紹drony這個工具
Drony
這個軟件是安裝在手機端的,並不是安裝在pc端的哈
1.安裝
直接下載我這個即可:點我下載
注:高版本的安卓安裝后已無法正常使用了,我是直接在模擬器里安裝的
2.配置
打開drony,右滑,滑到setting界面
點擊下面的wifi
選擇你抓包工具所在的網絡wifi,這里我由於是在模擬器里,那肯定就只有這一個
按次序如下配置,這里的ip和端口即是抓包工具所在pc端的電腦的局域網的ip,和抓包工具的端口,我這里是用的fiddler,所以就是8888
接着往下滑,filter default value 選allow all,然后點擊Rules
配置個過濾規則,右邊按那個加號新建一個
action選如下,然后application選擇目標app,前提你得在虛擬機里安裝好目標app,且是能正常打開並請求數據的
以上就配置完了,然后一路返回,返回到settings里,然后左滑到LOG,點擊下面的OFF,由OFF變為ON:
3.開始抓包
drony讓它一直監聽着不管就行,然后讓它后台啟動,不殺死它,打開抓包工具,我這里是fiddler,接着再打開你的目標app,用抓包工具分析:
app里展示如下:
fiddler,可以抓到
再看看charles,也可以抓到
完美是吧?
反爬優化方案
相信你如果是做安全的朋友,看了以上的一頓操作,是不是覺得一萬個卧槽,這可咋整啊,怎么辦呢?
根據我的經驗,可以作如下處理:
1.vpn檢測(待確認)
這個方式我也是看別人的文檔得來的,沒有實際體驗過,具體怎么檢測是否是vpn就自己查資料吧
2.域名檢測
設置只允許設定范圍內的域名才通過,比如我的域名是app.com,證書檢測里只允許app.com通過,其他的全部不允許通過即可。
當然這個方法,針對能反編譯的高手而言,一切的都是虛的
3.證書+域名檢測
在以上的基礎上,在加個證書驗證,可以一定程度的防止爬蟲
4.使用flutter混合開發
目前flutter也越來越大眾化,近10年來java開發的APP,加固混淆都很難隱藏DEX文件中的秘密,據我最近了解,flutter框架開發的APP, 界面邏輯和網絡請求都編譯到so文件里了,並且flutter默認就已經是無代理模式。因為我之前分析某app就是用flutter開發的,然后最多只能看到接口的域名,看不到具體的請求參數和具體接口,然后看到某知識星球的有個哥們兒遇到了跟我一樣的問題,大佬給出的結論如下:
很強吧,所以,如果你把你的app沿用flutter混合開發的話,反編譯難度提升了不少,具體怎么操作自行百度看文檔吧,我不是做安卓開發的,這里就略過了。