當(dāng)你寫爬蟲遇到APP的請(qǐng)求有加密參數(shù)時(shí)該怎么辦太闺?【初級(jí)篇-常規(guī)模式】

嗯糯景,在看完了《當(dāng)你寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么辦?》系列之后省骂,同學(xué)們對(duì)抓APP的請(qǐng)求包應(yīng)該已經(jīng)是輕車熟路了吧蟀淮。在對(duì)想爬的APP抓個(gè)包之后你可能會(huì)發(fā)現(xiàn),只是抓到包似乎沒有什么卵用啊钞澳,凡是有用的接口基本都有一個(gè)或多個(gè)加密的參數(shù)怠惶,而且它還每次請(qǐng)求都變,而自己去請(qǐng)求對(duì)應(yīng)的接口時(shí)轧粟,如果沒帶或者隨便輸入一串值給這種參數(shù)策治,還會(huì)出現(xiàn)不返回?cái)?shù)據(jù)的情況,這可怎么辦才好兰吟?

別擔(dān)心通惫,據(jù)我觀察,目前至少80%左右的常見APP(BAT這類大廠的除外)在安全方面做的并不好揽祥,在看完這篇文章之后讽膏,你將知道如何輕松地拿下它們。


我們直接開始實(shí)戰(zhàn)演練吧拄丰,這里我寫了一個(gè)演示用的APP給你玩府树,它會(huì)像我前面所說的一樣,發(fā)出一個(gè)請(qǐng)求并帶有一個(gè)加密參數(shù)——sign料按,且每次請(qǐng)求時(shí)sign都會(huì)變化奄侠。

APP啟動(dòng)界面

安裝之后打開它,并準(zhǔn)備好你的抓包工具载矿,然后點(diǎn)擊“點(diǎn)擊發(fā)送請(qǐng)求”按鈕垄潮。

請(qǐng)求完畢

不出意外的話會(huì)出現(xiàn)一個(gè)“sign校驗(yàn)通過”的提示,然后我們看看抓到的包吧闷盔。

抓包結(jié)果

從抓包工具中我們可以很明顯地看出來弯洗,會(huì)變動(dòng)的參數(shù)有兩個(gè),一個(gè)是ts逢勾,一個(gè)是sign牡整。(為了看到變化建議多發(fā)兩個(gè)請(qǐng)求對(duì)比)

先分析一下參數(shù)的含義吧,ts從名字上可以看出來溺拱,應(yīng)該是個(gè)時(shí)間戳逃贝,實(shí)際將ts的值格式化一下也可以確定這就是個(gè)請(qǐng)求時(shí)的時(shí)間戳谣辞;然后是sign,一眼看上去大概32位左右沐扳,而外觀長這樣的一般是hash泥从,猜測(cè)一下最有可能性的是md5之類的,但不知道實(shí)際是如何生成的沪摄,只能逆向看看了躯嫉。


該正式開始破解這個(gè)加密參數(shù)了,由于Android APP是靜態(tài)編譯的卓起,不像JS和敬,直接可以看到源碼凹炸,所以...我們需要對(duì)APP進(jìn)行反編譯戏阅,這里我使用的工具名為Jadx,前面的《寫APP爬蟲會(huì)需要用到哪些工具呢啤它?》和《當(dāng)你寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么辦奕筐?【高級(jí)篇-混淆導(dǎo)致通用Hook工具失效】》文章中也有提到,這里就不再贅述了变骡。

使用jadx反編譯APK

反編譯之后可以看到這么一堆亂七八糟的的東西离赫,那么我們要怎么找到生成sign參數(shù)的地方呢?

看到那個(gè)像魔法棒一樣的按鈕了嗎塌碌?點(diǎn)一下它渊胸。

jadx搜索文本

然后它會(huì)彈出一個(gè)“搜索文本”的窗口,接著我們有兩種方式快速定位到生成的位置:

  1. 搜索URL的路徑部分

    路徑部分指的是/learning/hash_sign這一段台妆,當(dāng)然有些APP為了復(fù)用可能會(huì)將路徑拆分成多段的翎猛,如果直接搜索完整路徑搜索不到的話可以嘗試以反斜杠為分隔符,將路徑拆分成多個(gè)來搜(記得從右往左搜接剩,別問為什么)切厘,這里的話我們直接搜索hash_sign即可,因?yàn)檫@個(gè)名字很獨(dú)特懊缺,一般應(yīng)該不會(huì)出現(xiàn)有其他不相關(guān)的東西也叫這個(gè)名字的情況疫稿。

    一搜就能定位到請(qǐng)求的位置了~

    通過搜索路徑方式定位
  2. 搜索你要找的參數(shù)

    比如這里我們需要找的是sign這個(gè)參數(shù),可以直接搜索"sign"(注意帶上雙引號(hào))鹃两,但如果結(jié)果很多遗座,而且還都很像生成/設(shè)置sign的地方的話,可以搜一些別的比較獨(dú)特的參數(shù)俊扳,比如這里出現(xiàn)的model途蒋、brand之類的在代碼中一般不會(huì)經(jīng)常出現(xiàn)的詞。

    由于這個(gè)DEMO APP比較簡單拣度,所以直接搜索"sign"就能定位到設(shè)置值的位置了~

    通過搜索參數(shù)名方式定位

定位到了代碼位置之后我們就可以開始看代碼了碎绎,從搜到的結(jié)果中我們可以看到生成sign螃壤、設(shè)置sign、設(shè)置路徑的代碼都在這個(gè)l方法下筋帖,然后我們來從設(shè)置sign的位置開始從下往上分析奸晴,這樣代碼的邏輯會(huì)更容易看懂一些。

定位到的代碼

這里我將代碼中的關(guān)鍵點(diǎn)都做了標(biāo)記日麸,你可以按著旁邊標(biāo)注的序號(hào)跟著我一起來看這個(gè)代碼寄啼。

首先這個(gè)aVar4.a有兩個(gè)地方出現(xiàn)了,但是傳入的第二個(gè)參數(shù)都是stringBuilder2代箭,而下面那里是直接設(shè)置了一個(gè)空值進(jìn)去墩划,顯然不是我們想要找的,所以我們可以忽略掉下面的那一行帶有sign關(guān)鍵詞的代碼嗡综,直接看標(biāo)注了1的那一行乙帮。

image

選中stringBuilder2這個(gè)變量,可以看到它的值是從上面那個(gè)stringBuilder3.toString()得到的极景,接著看看stringBuilder3的生成察净,for循環(huán)這里做了什么操作看不懂,但是可以看到上面有個(gè)很顯眼的字符串"MD5"盼樟。那么我們可以大膽地猜測(cè)一下氢卡,這個(gè)stringBuilder3實(shí)際上就是做了個(gè)MD5操作而已,與我們最開始抓包時(shí)的猜測(cè)相同晨缴,直接往上看看Hash前的字符串長啥樣译秦,然后測(cè)試一下吧,不行的話再回來看击碗。

image

從前面MD5操作的位置可以看到digest方法里用到的參數(shù)又是一個(gè)叫做stringBuilder2的變量筑悴,繼續(xù)往上看就能看到實(shí)際上是從stringBuilder.toString()那得到的,那么這個(gè)stringBuilder又是怎么來的呢延都?從代碼中我們可以看出似乎是for一個(gè)TreeMap然后把每一個(gè)key和value組成key=value的格式寫入stringBuilder中雷猪,如果stringBuilder里已經(jīng)有值的話還會(huì)添加&符號(hào),那么這最終出來的東西可以聯(lián)想到的是什么晰房?對(duì)求摇!就是queryString那部分,只不過它的參數(shù)是被排過序的(因?yàn)門reeMap會(huì)自動(dòng)進(jìn)行排序)殊者。

image

然后我們?cè)偻厦婵从刖常?yàn)證一下想法正不正確,可以看到最源頭的地方是個(gè)HashMap猖吴,被put進(jìn)去的都是我們抓包時(shí)看到的參數(shù)摔刁。


現(xiàn)在我們就把這個(gè)sign的生成邏輯給理清楚了,其實(shí)它就是個(gè)按照參數(shù)名排過序的queryString進(jìn)行了一次MD5操作后的產(chǎn)物海蔽,接下來我們只需要在代碼中實(shí)現(xiàn)這個(gè)生成邏輯就行了共屈,在Python中绑谣,你可以使用它自帶的官方庫hashlib來對(duì)一個(gè)字符串做MD5操作。

image

那么我們寫一段代碼模擬請(qǐng)求一下試試拗引,sign確實(shí)可以通過校驗(yàn)借宵,說明我們生成的sign是可以使用的,至此矾削,加密參數(shù)破解完成壤玫。

提示:建議實(shí)際操作中不要這么測(cè)試,容易觸發(fā)反爬哼凯∮洌可以先拿抓包得到的參數(shù)生成一遍對(duì)比一下,如果一樣則說明生成的sign沒有問題断部。


這個(gè)時(shí)代各種東西變化太快猎贴,而網(wǎng)絡(luò)上的垃圾信息又很多,你需要有一個(gè)良好的知識(shí)獲取渠道家坎,很多時(shí)候早就是一種優(yōu)勢(shì)嘱能,所以還不趕緊關(guān)注我的公眾號(hào)并置頂/星標(biāo)一波。

發(fā)送消息“APP加密參數(shù)破解初級(jí)篇代碼”到我的公眾號(hào)【小周碼字】即可獲得demo代碼和APP的下載地址~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虱疏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苏携,更是在濱河造成了極大的恐慌做瞪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件右冻,死亡現(xiàn)場(chǎng)離奇詭異装蓬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纱扭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門牍帚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乳蛾,你說我怎么就攤上這事暗赶。” “怎么了肃叶?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蹂随,是天一觀的道長。 經(jīng)常有香客問我因惭,道長岳锁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任蹦魔,我火速辦了婚禮激率,結(jié)果婚禮上咳燕,老公的妹妹穿的比我還像新娘。我一直安慰自己乒躺,他們只是感情好迟郎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著聪蘸,像睡著了一般宪肖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上健爬,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天控乾,我揣著相機(jī)與錄音,去河邊找鬼娜遵。 笑死蜕衡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的设拟。 我是一名探鬼主播慨仿,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼纳胧!你這毒婦竟也來了镰吆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤跑慕,失蹤者是張志新(化名)和其女友劉穎万皿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年胸竞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片减余。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惩系,靈堂內(nèi)的尸體忽然破棺而出位岔,到底是詐尸還是另有隱情,我是刑警寧澤蛆挫,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布赃承,位于F島的核電站,受9級(jí)特大地震影響悴侵,放射性物質(zhì)發(fā)生泄漏瞧剖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抓于。 院中可真熱鬧做粤,春花似錦、人聲如沸捉撮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巾遭。三九已至肉康,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灼舍,已是汗流浹背吼和。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骑素,地道東北人炫乓。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像献丑,于是被迫代替她去往敵國和親末捣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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