前言:
最近擼了下攜程APP協議,要通過協議方式獲取酒店各房間的價格,需求一定,一通亂擼,最后啪啪打臉,

逆向程序(嘔心瀝血):
一、確定通信方式:二話不說,先抓包,但是...用fiddler并不能抓到包,有意思!根據以往經驗,一通分析后, 感覺是用了WebSocket,然后就開始了編碼(這里犯下了彌天大錯),完成編碼后才發現,通信根本就不是用了特么的WebSocket,無奈,再分析,最后確定用了自建的Socket協議!!!!!!欲哭無淚啊,所以鐵一般的事實就是:不要急著編碼小伙子!
二:socket發包及報文接受位置:既然已經確定了是通過Socket收發包,那就先確定收發包位置,用jadx反編譯apk,搜索Socket,最后確定接受報文位置:

相應的發包位置:

但是...確定收發包位置,才是萬里長征第一步,最困難的還在后面
三、確定收發包的資料:通過分析,最后確定在ProcoltolHandle中對收發報文進行了決議、組裝,資料的確定,的確花了我很長時間,程序略顯痛苦,不斷的去hook去分析,有時候hook到的資料還會產生誤導,
(1)、收發包資料均采用了PB協議,對PB的序列化反序列化又花了很長時間去研究,快要到放棄的時候終于柳暗花明了;
(2)、收發包資料決議組裝僅反編譯apk是無法成功的,因為有Encode、Decode,而Encode、Decode是在native中實作的,所以還需要分析native檔案,這里又花了點時間
(3)、分析完成后,組裝header并序列化,header位置:

看到了吧,都是PB......
四、組裝完對應的資料后,發送報文,并接受資料就完事了,
最終效果:
最后,有幾個引數可自定義,城市ID編號、酒店ID、入住時間、離開時間,然后直接請求,就可以愉快的拿到資料了!

逆向攜程app難度較大,難怪百度一點資料的都沒有,正所謂:沒有困難創造困難,不達目的誓不休
后記:
逆向攜程app協議的一大訣竅:耐心,耐心,還是他媽的耐心!祝各位好運,
我的vx:YY_yhzf ,有需要可搜索添加...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/204608.html
標籤:其他
