亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

上班都快一周了,一直想更新,奈何小伙還沒(méi)有從假期的快樂(lè)中緩過(guò)來(lái),今天終于耐下心來(lái)更新一小篇。摳一下某品會(huì)的JS代碼,接著使用摳取的JS代碼加密密碼進(jìn)行登錄。友情提示:為避免不必要的糾紛,本文中所有網(wǎng)址都進(jìn)行了一定隱藏。

私信小編01即可獲取大量Python/ target=_blank class=infotextkey>Python學(xué)習(xí)資料

唯品會(huì)密碼JS解密與python模擬登錄

 

目標(biāo)

標(biāo)題已經(jīng)闡明了本文的目的:

  1. 密碼加密解密;
  2. 利用第一步加密方法加密后進(jìn)行登錄;
  3. 完整代碼中嘗試了多賬號(hào)號(hào)批量登錄(由于篇幅有限,移動(dòng)到了 閱讀原文 中);

摳出代碼

找到目標(biāo)網(wǎng)站,進(jìn)入登錄頁(yè)面(對(duì)各位來(lái)說(shuō)都很easy):

唯品會(huì)密碼JS解密與python模擬登錄

 

像以往一樣輸入錯(cuò)誤的賬號(hào)密碼,看看提交的數(shù)據(jù),點(diǎn)擊登錄后,提交賬號(hào)密碼 url 如下:

唯品會(huì)密碼JS解密與python模擬登錄

 

繼續(xù)看 FormData ,如下圖:

唯品會(huì)密碼JS解密與python模擬登錄

 

圖中的 loginName 為你輸入的用戶名, password 為密碼,可以看出被加密了,如果你熟悉了各類JS加密方式,心里應(yīng)該能大概確定這就是 MD5 加密結(jié)果。暫時(shí)不用管其它的四個(gè)參數(shù),接下來(lái)無(wú)非就是把加密JS代碼摳出來(lái),可以通過(guò)調(diào)用棧進(jìn)去,也可以全局搜索 password 來(lái)定位JS文件,具體使用哪種方法就看各位看官的喜好了,我這里是從調(diào)用棧進(jìn)去的(既然我們是在登錄,那就點(diǎn)帶有 login 字樣的js文件進(jìn)去好了):

唯品會(huì)密碼JS解密與python模擬登錄

 

進(jìn)來(lái)后你可以搜一下 password 關(guān)鍵字,應(yīng)該馬上就能定位到想要的位置,定位的時(shí)候別忘了掛上一個(gè)斷點(diǎn),就像下圖一樣:

唯品會(huì)密碼JS解密與python模擬登錄

 

一看加密方法名就是熟悉的 MD5 ,接下來(lái)的操作應(yīng)該更加熟悉了,激活斷點(diǎn)(輸入賬號(hào)密碼,點(diǎn)擊登錄,前提是你掛上了斷點(diǎn))。

唯品會(huì)密碼JS解密與python模擬登錄

 

點(diǎn)擊后就進(jìn)入了加密方法里:

唯品會(huì)密碼JS解密與python模擬登錄

 

function md5(string, key, raw) {
                if (!key) {
                    if (!raw)
                        return hex_md5(string);
                    return raw_md5(string)
                }
                if (!raw)
                    return hex_hmac_md5(key, string);
                return raw_hmac_md5(key, string)
            }

可以看出md5方法一共有三個(gè)參數(shù),第一個(gè) striing 即為密碼, key 和 raw 是 undefined。接下笨一點(diǎn)的辦法就是一步一步運(yùn)行,把跳轉(zhuǎn)的所有代碼都扣下來(lái),如果是剛開(kāi)始學(xué)習(xí)摳代碼,這個(gè)方法能增加很多調(diào)試”感覺(jué)”,慢慢摳得越來(lái)越順手。取巧一點(diǎn)的無(wú)非就是找到大括號(hào):

唯品會(huì)密碼JS解密與python模擬登錄

 

一直往上找到,應(yīng)該馬上就能找到正括號(hào):

唯品會(huì)密碼JS解密與python模擬登錄

 

這樣里面的代碼其實(shí)就是本次要摳的代碼,但是要使用 python 調(diào)用,還要進(jìn)行一點(diǎn)改動(dòng)。本次要摳的加密代碼其實(shí)很簡(jiǎn)單,畢竟只是 md5 。經(jīng)過(guò)稍微改寫后,我們嘗試使用python里 execjs 庫(kù)執(zhí)行:

唯品會(huì)密碼JS解密與python模擬登錄

 

成功運(yùn)行出結(jié)果,摳取完畢。

登錄

FormData

通過(guò)上一節(jié),我們已經(jīng)可以得到加密后的密碼,既然要登錄,那就要回到 FormData 中,看看幾個(gè)參數(shù)的含義與取值,經(jīng)過(guò)一番測(cè)試,總結(jié)如下,感興趣的也可以自己去試一下。

參數(shù)取值loginName用戶名password加密后的密碼remUser是否記住用戶名(0或者1)whereFrom可為空captchaId驗(yàn)證碼(可為空)captchaTicket可為空

Cookies

現(xiàn)在的登錄都需要攜帶 cookies ,看一下本站登錄時(shí)候的Cookies:

唯品會(huì)密碼JS解密與python模擬登錄

 

看起來(lái)很多,但是經(jīng)過(guò)測(cè)試并不需要全部攜帶,cookies應(yīng)該是服務(wù)端產(chǎn)生的,所以還是老老實(shí)實(shí)帶上吧,沒(méi)有捷徑。經(jīng)過(guò)粗略測(cè)試,攜帶以下幾個(gè)即可登錄:

cookies = {
            ' mars_pid': '你的',
            ' cps': '你的',
            ' mars_sid': '你的',
            'times_XXXXX': '你的',
            ' VipRUID': '你的',
            ' VipRNAME': '',
            ' VipDegree': '你的',
            ' user_class': '你的',
            ' VipCI_te': '你的',
            'mars_cid': '你的'
        }

有興趣的可以繼續(xù)試試這里面還有沒(méi)有可以不用攜帶的。

Header

不管是登錄還是爬取某個(gè)網(wǎng)頁(yè),請(qǐng)求頭是絕對(duì)繞不過(guò)的,現(xiàn)在一起看看本站的請(qǐng)求頭都有哪些:

唯品會(huì)密碼JS解密與python模擬登錄

 

好家伙,各種都有,不過(guò)大家不用擔(dān)心,經(jīng)過(guò)測(cè)試在本文實(shí)際爬取過(guò)程中只用攜帶 user-agent,平時(shí)的爬取過(guò)程中,有些可能會(huì)檢查上一個(gè)網(wǎng)頁(yè)是在哪里,即要攜帶 referer ,還有 origin 和 host 也是可能會(huì)攜帶的。

正式登錄

本次登錄的幾個(gè)要點(diǎn)在前面應(yīng)該算已經(jīng)闡述清楚了,現(xiàn)在要做的無(wú)非就是把 FormData 里的數(shù)據(jù) post 到 login_url 。

flowchat
st=>start: 開(kāi)始
e=>end: 結(jié)束
op0=>operation: 輸入賬號(hào)密碼
op1=>operation: 執(zhí)行js代碼加密密碼
op=>operation: 組裝formdata
op2=>operation: 把formdata post到登錄url
op3=>operation: 分析返回

st->op0->op1->op->op2->op3->e

好了,流程知道了開(kāi)始寫代碼,友情提示: 由于可能引起一些不必要的紛爭(zhēng),代碼中的url和cookies值都隱藏了,大家按照自己的添加即可 。創(chuàng)建了一個(gè) VipLogin 類,下面是部分模塊的代碼。

執(zhí)行js代碼

@property
    def exec_js(self):
        """
        你自己的js路徑
        :return:
        """
        with open('..//js//weipinhui.js', encoding='utf-8') as f:
            weipinhui = f.read()
        js = execjs.compile(weipinhui)
        return js

加密密碼

def get_pwd(self,password):
        key = ""
        raw = ""
        pwd = self.js.call('md5', password, key, raw)
        logger.info("加密結(jié)果為:{}".format(pwd))
        return pwd

用戶名加密

def encrypt_phone(self,phone):
        return phone[:3]+"*"*5+phone[-3:]

提交數(shù)據(jù)

def login(self,user,passwd):
        if not user.isdigit or len(user) != 11:
            logger.error("目前僅支持手機(jī)號(hào)方式登錄:{}".format(user))
            return False
        session = requests.Session()
        vip_name = self.encrypt_phone(user)
        times_key = "times_"+user
        data = {
            "loginName": user,
            "password": passwd,
            "remUser": "0",
            "whereFrom":"",
            "captchaId":"" ,
            "captchaTicket":"",
        }
        ck_dict = {
            ' mars_pid': '你的',
            ' cps': '你的',
            ' mars_sid': '你的',
            times_key: '你的',
            ' VipRUID': '你的',
            ' VipRNAME': vip_name,
            ' VipDegree': '你的',
            ' user_class': '你的',
            ' VipCI_te': '你的',
            'mars_cid': '你的'
        }
        requests.utils.add_dict_to_cookiejar(session.cookies,ck_dict)
        resp = session.post(self.login_url,headers=self.headers,data=data,verify=False)
        ret = json.loads(resp.text)
        logger.info("賬號(hào){}返回結(jié)果為:{}".format(self._encrypt_phone(user),ret))
        if ret.get("result","") == "success":
            return True
        return False

登錄結(jié)果

唯品會(huì)密碼JS解密與python模擬登錄

 

登錄成功的標(biāo)志為 'result': 'success ‘如下:

{
    'result': 'success', 
    'errorCode': 0,
     'data': {
         'redirectUrl': 'https://www.xxx.com', 
         'captchaFlowData': None, 
         'extend': None,                  
         'bindMobile': True, 
         'illegalState': False
         }, 
     'redirectUrl': 'https://www.xxx.com'
 }

分享到:
標(biāo)簽:JS
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定