餓了麼APP逆向及爬蟲實(shí)現(xiàn)詳參

一、前言

今天主要以餓了麼為例,講解一下APP逆向的大致流程,以及遇到問題的處理辦法。

還沒關(guān)注的朋友,關(guān)注我微信公眾號(hào)“燕幕自安”不迷路。

二、概述

APP逆向的目的是為了了解APP本身的運(yùn)行邏輯,進(jìn)行修改或進(jìn)行還原。涉及到的技術(shù)和工具,見下圖。

對(duì)于抓包我就不詳細(xì)講了,不清楚的看一下我之前的文章。

HTTPS抓包與手機(jī)抓包,看這一篇就夠了

HTTPS就不能抓包了?開什么玩笑!?

好了,下面我們干正事,講餓了麼。

三、需求

通過還原APP接口,獲取附近商家。

但因?yàn)轲I了么查看商家必須登錄,故需要先逆向登錄接口。

四、抓餓了麼的包

打開PacketCapture,選擇餓了麼,打開餓了麼APP。

這是為什么?斷網(wǎng)了?

這種情況主要是因?yàn)樽グ鸬?,APP本身做了HTTPS證書校驗(yàn),簡單的可以通過插件解決,辦法參見以前的文章。

Xposed+JustTrustMe關(guān)閉SSL證書驗(yàn)證

好了解決了抓包問題,那就能找到登陸的接口了。

通過抓包,得到登錄步驟為:

1.請(qǐng)求發(fā)送短信

2.需要圖形驗(yàn)證碼,請(qǐng)求圖形驗(yàn)證碼

3.帶驗(yàn)證碼請(qǐng)求發(fā)送短信

4.帶短信驗(yàn)證碼登錄(登陸完成拿到cookie)

5.獲取附近商家

每一步的接口如下:

1.URL:https://restapi.ele.me/eus/login/mobile_send_code

2.URL:?https://restapi.ele.me/eus/v4/captchas?captcha_str={手機(jī)號(hào)碼}

3.URL:https://restapi.ele.me/eus/login/mobile_send_code

4.URL:https://restapi.ele.me/eus/login/login_by_mobile

5.URL:https://restapi.ele.me/shopping/v3/restaurants?extras[]=identification&extras[]=coupon&latitude=32.29290046542883&longitude=110.04603732377291&city_id=3&rank_id=b1969c73a19b4dc68b31628ea85d8eaf&network_operator=&network=WIFI&order_by=5&extra_filters=home&os=Android%2F6.0.1&deivce=Nexus%206P&weather_code=PARTLY_CLOUDY_DAY&offset=0&limit=20

直接看參考答案的感覺怎么樣?

五、參數(shù)分析

對(duì)于抓包的相關(guān)參數(shù)(自己看報(bào)文就能知道,我沒有寫header參數(shù)和url參數(shù)),中間很多是我們一眼就能看出來的比如時(shí)間戳、機(jī)型、坐標(biāo)、固定值等,需要逆向的主要有以下幾個(gè)。

x-eleme-requestid、x-deviceinfo、deadpool相關(guān)三個(gè)參數(shù)

六、逆向分析

參數(shù)x-eleme-requestid

在jadx中打開餓了麼APP,搜索關(guān)鍵字x-eleme-requestid

看到四個(gè),不多。

按道理來說,應(yīng)該先看第四個(gè),但是后來并沒有找到a的生成位置。好我們看一下二、三。(OS:“你為啥不看一”)

看到a是個(gè)static變量,那就得看一下誰調(diào)用他了,右鍵find usage。

會(huì)心一笑。手到擒來。解釋一下。

點(diǎn)進(jìn)去看一下。

我個(gè)憨憨?。?!

好了,不要在意這些細(xì)節(jié)。我們點(diǎn)進(jìn)去這個(gè)a()看看。

清清楚楚,國際通用的算法UUID去掉短杠后加上豎杠再加時(shí)間戳。

參數(shù)x-deviceinfo

打眼一看,這是啥,base64啊!對(duì)x-deviceinfo進(jìn)行base64解密,可得到

均是設(shè)備基本信息,按照格式生成即可,注意要和外部其他設(shè)備基本信息保持一致。

deadpool相關(guān)三個(gè)參數(shù)

一共三個(gè)參數(shù),分別為:

搜索deadpoolcontent。

又是hashmap.put,為什么我們要對(duì)他敏感,因?yàn)樗臀覀兊哪繕?biāo)關(guān)鍵字呆在一起的時(shí)候,很可能就是給header里構(gòu)造參數(shù)的啊。我們點(diǎn)開第二個(gè)看一眼。

繼續(xù)找這個(gè)sneer函數(shù)。(我總覺得他這個(gè)函數(shù)叫這個(gè)名字是故意鄙視我的。)

好了,在libuiseris.so里面,這就麻煩了,要還原這個(gè)算法有三種辦法。

硬剛。逆向so。我后來看了下,so有反調(diào)試,so里面又調(diào)了java層的函數(shù),還原比較麻煩一些。

利用。hook這個(gè)sneer函數(shù),找到他的方法地址,在你的代碼需要的時(shí)候,發(fā)請(qǐng)求到手機(jī)里,手機(jī)進(jìn)行調(diào)用執(zhí)行,計(jì)算完以后返回給外部。

虛擬。虛擬環(huán)境執(zhí)行so中的sneer方法,可參見github上的Unicorn這個(gè)項(xiàng)目。

我用的是第二個(gè)辦法,在手機(jī)里面起了HTTP服務(wù),接受請(qǐng)求計(jì)算后返回給外部。

但是!

FPX和G2的比賽要開了,今天不繼續(xù)寫了,下次再寫個(gè)續(xù),講一下hook調(diào)用這個(gè)事兒吧。

FPX加油。

寫在最后

最近有人抄襲我的文章在知乎、吾愛上發(fā),說是自己原創(chuàng)?就是這個(gè)垃圾人。

連個(gè)人簡介都是抄我的!模仿我的人還模仿我的面???現(xiàn)在還有臉繼續(xù)關(guān)注我???還想繼續(xù)抄???要點(diǎn)*臉吧。

暖心的是,吾愛上的盆友看出來了,謝謝各位了!

以上。歡迎閱讀轉(zhuǎn)發(fā)~

想要轉(zhuǎn)載的朋友請(qǐng)告知我之后轉(zhuǎn)載,并注明原帖來源。

如有問題,請(qǐng)關(guān)注公眾號(hào)回復(fù)【作者】獲取我的聯(lián)系方式。

想了解更多技術(shù)分享,請(qǐng)長按識(shí)別下方二維碼關(guān)注我吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 大家好,本文介紹對(duì)接餓了么API的全過程,希望給其他人一點(diǎn)入門參考,少走彎路。 1) 總的流程 注冊(cè)賬號(hào):開發(fā)者賬...
    風(fēng)行者1024閱讀 22,439評(píng)論 4 7
  • 上網(wǎng)原理 1、爬蟲概念 爬蟲是什麼? 蜘蛛,蛆,代碼中,就是寫了一段代碼,代碼的功能從互聯(lián)網(wǎng)中提取數(shù)據(jù) 互聯(lián)網(wǎng): ...
    riverstation閱讀 8,654評(píng)論 1 2
  • 談?wù)揥EB編程的時(shí)候常說天天在寫CGI,那么CGI是什么呢?可能很多時(shí)候并不會(huì)去深究這些基礎(chǔ)概念,再比如除了CGI...
    __七把刀__閱讀 2,311評(píng)論 2 11
  • 一、前言 餓了么平臺(tái)上很多店鋪都無營業(yè)執(zhí)照,只能借用他人的營業(yè)執(zhí)照上傳開店。那就想看看附近有多少這樣無證共用營業(yè)執(zhí)...
    麥口胡閱讀 1,296評(píng)論 1 13
  • 第一次對(duì)攝影有感覺,是多年前一次與朋友一起出游,去杭州附近一處風(fēng)景點(diǎn),很好的水景山色,還可以釣魚,玩得很開心...
    綠洲121212閱讀 468評(píng)論 0 6

友情鏈接更多精彩內(nèi)容