1. 程式人生 > >應對加密js的三種方法

應對加密js的三種方法

-a logging ember 瀏覽器 ebp gecko afa 方法 trace

經常遇到網頁在登錄後會對用戶輸入的帳號和密碼通過js進行加密,導致模擬登錄這類網站時受到阻礙

這裏小記一下當前解決該問題的三種方法

1.利用python實現js同等加密。

2.利用selenium模擬登錄。

3.利用pyexecjs來執行js文件

測試站點:http://bbs.125.la/

登錄時通過瀏覽器F12發現該網站對密碼進行了加密

技術分享

進一步分析和查找,發現是名為md5.js?RFI文件進行了加密

技術分享

嘗試用第一種方法,但是發現此文件內容較多,通過python轉換相應程序較為復雜,因此放棄

采用第二種方法

#coding=utf-8
import time
from selenium import webdriver
import selenium.webdriver.support.ui as ui

start_url = ‘http://bbs.125.la/‘
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get(start_url)
#通過id方式定位
driver.find_element_by_id(‘ls_username‘).send_keys(u"n***i")
driver.find_element_by_id(‘ls_password‘).send_keys(u"sn*******9")
driver.find_element_by_class_name(‘pn‘).click()
time.sleep(3)
driver.quit()

通過此方法登錄成功,嘗試第三種方法

# -*- coding: utf-8 -*-
import os
import re
import urlparse
import requests
import json
import traceback
from scrapy.selector import HtmlXPathSelector
from scrapy.http import HtmlResponse
import execjs

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

if __name__ == ‘__main__‘:
url = ‘http://bbs.125.la/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1‘
headers={
‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘,
‘Accept-Encoding‘:‘gzip, deflate‘,
‘Accept-Language‘:‘zh-CN,zh;q=0.8‘,
‘Cache-Control‘:‘max-age=0‘,
‘Connection‘:‘keep-alive‘,
‘Content-Length‘:‘87‘,
‘Content-Type‘:‘application/x-www-form-urlencoded‘,
‘Host‘:‘bbs.125.la‘,
‘Origin‘:‘http://bbs.125.la‘,
‘Referer‘:‘http://bbs.125.la/‘,
‘Upgrade-Insecure-Requests‘:‘1‘,
‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0‘
}
username = ‘n***i‘
password = ‘sn*******9‘
md5_password = execjs.compile(open(r"md5.js").read().decode("utf-8")).call(‘hex_md5‘, password) #md5.js文件已復制到本地
print ‘md5_password:‘,md5_password
r = requests.post(url,headers=headers,data=‘username=%s&password=%s&quickforward=yes&handlekey=ls‘%(username,md5_password))

成功輸出加密後的密碼

技術分享

應對加密js的三種方法