python爬蟲--破解登錄環(huán)節(jié)的js加密:haodou

看到一個網(wǎng)站的登錄環(huán)節(jié)做了密碼的加密驼侠,嘗試著做了破解笔时,權(quán)當(dāng)對js破解的一個練習(xí)急灭。

網(wǎng)站:http://www.haodou.com

開始破解

登錄url下面看到data如下:

?

其中password和sso_token明顯是加密后的數(shù)據(jù)孽尽。

搜索sso_token可以定位到j(luò)s文件:

?

看到這里的sso_token 其實(shí)是網(wǎng)頁 上id 為sso_token的一個值田巴,定位到這個頁面的url為:

http://login.haodou.com/

?

下面就可以追蹤password的加密了麸折,如圖一所示打斷點(diǎn)后可以看到:

最后密碼的獲得是通過這個表達(dá)式完成:

post_data.password = hd.secure.encrypt($('#timestamp').val() + '|' + post_data.password);

這里的$('#timestamp').val() 是個十位數(shù)的時間戳锡凝,在js中的實(shí)現(xiàn)是:new Date().getTime().toString().substr(0,10)

這里的 post_data.password 就是我們的原始密碼。

最后只需要考慮hd.secure.encrypt 這個方法即可磕谅。

通過剛才的斷點(diǎn)可以定位到這個函數(shù)所在位置:

?

?

這個函數(shù)是包含在一個對象當(dāng)中:

?

復(fù)制這個對象中的所有js代碼私爷,放到j(luò)s文件中雾棺,運(yùn)行js文件后會顯示缺少window對象和navigator對象,構(gòu)造這兩個對象即可:

var window = window ||{};

var navigator = navigator ||{};

另外衬浑,把這個對象的函數(shù)名和最后沒有用到的return都刪除掉捌浩,讓我們的js代碼看起來更簡潔。

最后把生成密碼的函數(shù)單獨(dú)拿出來構(gòu)造一個函數(shù)工秩,用來我們每次調(diào)用的時候進(jìn)行密碼返回尸饺。

function encrypt(plain){

? ? var? ? n= 'yevTQ5C8exDUo/c0y0Lrxp+quYD9vxjkKFAgdqV0PtLefJ4FEB4VeTTGDfqaWVgQXeQeyCp0yjCd8EGVUd/77z+Z/HlBpaavHwsE77Rjf3r9AC+aSN+ZZC4uoZL0bYDiDgYcG32CPLdVPP8zbKxa/BSbUb1PhxEot/fMTo+rLrU=';

? ? var? ? e='AQAB';

? ? var n = pidCryptUtil.decodeBase64(n)

? ? ? ? , e = pidCryptUtil.decodeBase64(e)

? ? ? ? , rsa = new pidCrypt.RSA();

? ? rsa.setPublic(pidCryptUtil.convertToHex(n), pidCryptUtil.convertToHex(e));

? ? return pidCryptUtil.encodeBase64(pidCryptUtil.convertFromHex(rsa.encrypt(plain)))

}

function get_pwd(pwd) {

? ? timestamp = new Date().getTime().toString().substr(0,10)

? ? new_pwd = encrypt(timestamp + '|' + pwd);

? ? return new_pwd

}

每次調(diào)用get_pwd函數(shù),傳入密碼助币,就可以獲得加密后的password浪听。

加密環(huán)節(jié)完成后,就可以編寫py腳本眉菱。都是基礎(chǔ)操作迹栓,代碼如下:

import execjs

import requests

from pyquery import PyQuery as pq

def get_pwd():

? ? with open('haodou_js.js', 'r', encoding='UTF-8') as f:

? ? ? ? js2 = f.read()

? ? ? ? ctx2 = execjs.compile(js2)

? ? ? ? pwd = ctx2.call("get_pwd", '123456') #這里放密碼

? ? return pwd

def get_sso_token():

? ? url = 'http://login.haodou.com/'

? ? headers = {

? ? ? ? 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',

? ? ? ? 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Connection': 'keep-alive',

? ? ? ? 'Cookie': 'PHPSESSID=cg1sinvvc3lejkv3uvv3o61jj0; HDid=1561778611245; product=1; _uab_collina=156179025038866839820592; _wtip=0%7C%2B5; UM_distinctid=16ba1f63de6a2a-0fc5697c844879-e343166-1fa400-16ba1f63de7bae; _ga=GA1.2.626879575.1561790398; _gid=GA1.2.2045726504.1561790398; Hm_lvt_fbb4fdac678166fd7a6f7e50d6e5040c=1561790398; Hm_lpvt_fbb4fdac678166fd7a6f7e50d6e5040c=1561791766; _gat=1',

? ? ? ? 'Host': 'login.haodou.com', 'Referer': 'http://www.haodou.com/', 'Upgrade-Insecure-Requests': '1',

? ? ? ? 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}

? ? res = requests.get(url, headers=headers)

? ? doc = pq(res.text)

? ? sso_token = doc('#sso_token').attr('value')

? ? print(sso_token)

? ? return sso_token

def login():

? ? url = 'http://login.haodou.com/index.php?do=check'

? ? headers = {'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate',

? ? ? ? ? ? ? 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Connection': 'keep-alive', 'Content-Length': '340',

? ? ? ? ? ? ? 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

? ? ? ? ? ? ? 'Cookie': 'PHPSESSID=cg1sinvvc3lejkv3uvv3o61jj0; HDid=1561778611245; product=1',

? ? ? ? ? ? ? 'Host': 'login.haodou.com', 'Origin': 'http://login.haodou.com', 'Referer': 'http://login.haodou.com/',

? ? ? ? ? ? ? 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',

? ? ? ? ? ? ? 'X-Requested-With': 'XMLHttpRequest'}

? ? password = get_pwd()

? ? sso_token = get_sso_token()

? ? data = {

? ? ? ? 'account': '18811111111',

? ? ? ? 'type': '2',

? ? ? ? 'password': password,

? ? ? ? 'referer': 'http://www.haodou.com',

? ? ? ? 'auto_login': '0',

? ? ? ? 'valicode': '',

? ? ? ? 'sso_token': sso_token,

? ? }

? ? res = requests.post(url, headers=headers, data=data)

? ? print(res.status_code)

? ? print(res.text)

? ? print(res.cookies.get_dict())

if __name__ == '__main__':

? ? login()

以上,就完成了整個登錄的破解過程俭缓。

完整代碼傳送----------如果對你有所幫助克伊,歡迎點(diǎn)擊star:點(diǎn)擊查看GitHub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市华坦,隨后出現(xiàn)的幾起案子愿吹,更是在濱河造成了極大的恐慌,老刑警劉巖惜姐,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犁跪,死亡現(xiàn)場離奇詭異,居然都是意外死亡歹袁,警方通過查閱死者的電腦和手機(jī)坷衍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宇攻,“玉大人惫叛,你說我怎么就攤上這事〕阉ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵妻熊,是天一觀的道長夸浅。 經(jīng)常有香客問我,道長扔役,這世上最難降的妖魔是什么帆喇? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮亿胸,結(jié)果婚禮上坯钦,老公的妹妹穿的比我還像新娘预皇。我一直安慰自己,他們只是感情好婉刀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布吟温。 她就那樣靜靜地躺著,像睡著了一般突颊。 火紅的嫁衣襯著肌膚如雪鲁豪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天律秃,我揣著相機(jī)與錄音爬橡,去河邊找鬼。 笑死棒动,一個胖子當(dāng)著我的面吹牛糙申,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播船惨,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柜裸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掷漱?” 一聲冷哼從身側(cè)響起粘室,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卜范,沒想到半個月后衔统,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡海雪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年锦爵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奥裸。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡险掀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湾宙,到底是詐尸還是另有隱情樟氢,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布侠鳄,位于F島的核電站埠啃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伟恶。R本人自食惡果不足惜碴开,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潦牛,春花似錦眶掌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至良价,卻和暖如春寝殴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背明垢。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工蚣常, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痊银。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓抵蚊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溯革。 傳聞我的和親對象是個殘疾皇子贞绳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

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