登入電信網遇到密碼被JS加密,關於加密算法可以先了解一下基礎:加密算法基礎
遇到JS不用怕了用心分析就好不要慌
主要提供思路:
1.使用抓包工具先抓取密碼加密後的東東
2.分析JS加密算法自己進行優化處理
3.使用python執行JS引擎執行這段加密算法
坑1
密碼加密後的東東好找,但是2加密後的JS算法怎麼找呢,按F12,netword沒有啊,哈哈我你也遇到了,可以在查看源碼裏面有個top 看到沒有,嗯就是它隱藏還挺好。先到這裏找之後在Netword 裏面就也可以看到了,爲什麼呢?我理解爲是開始默認隱藏的,後面到TOP裏面發現了就不隱藏了。
可以看到password字段是加密以後的密碼,那麼是怎麼加密的呢?一般加密都是通過js加密那麼我們繼續往下找發現有一個js文件(jquery.fn-aes.min.js)
坑2,不要傻了想通過python同等加密這段JS行不通
點擊以後發現右邊的不就是加密方式嗎?哈哈哈,找到加密方式,我們離勝利就更近了一步,分析加密過程我們可以看到,加密的key是’login.189.cn’,其中的iv是偏移量,找到加密方式如何運行呢?不着急,我們看到CryptoJS這個庫了嗎?
分析發現這就是JS加密算法,我的思路是加載CryptoJS然後,用他來加密登錄密碼,好我們來找到CryptoJS這個的加密JS。
坑3使用什麼去執行這段JS呢
執行JS的類庫:execjs,PyV8,selenium,node
1、selenium 開發中實在沒有辦法才使用的,不選擇
2、execjs 可以啊之前使用過哈哈來吧,可是老是報錯了我的媽呀,原來發現優化的JS有一個庫報錯嗯CryptoJS就是它,嘗試了使用這個不行啊好吧執行它的JS還需要導入包,放棄這個方法
3、使用PyV8吧,折騰了大半天沒有安裝成功,要哭的感覺,程序員嘛不能哭,遇到困難冷靜總能解決的。還是放棄吧沒有安裝成功!!!!!!!
4、好吧就只有node 了,這個怎麼搞有沒有python node執行的模塊,你可以去嘗試一個pip 安裝。還是放棄吧,這個是沒有的node 得獨立安裝
先把它安裝好,我安裝的是node_v7.6.0,附上:安裝連接與學習網
保證執行這段代碼沒有問題在進行下面的操作:
node1.js 執行命令node node1.js
'use strict';
var CryptoJS = require("crypto-js");
function encryption(password) {
var t = CryptoJS.MD5("login.189.cn"),
i = CryptoJS.enc.Utf8.parse(t),
r = CryptoJS.enc.Utf8.parse("1234567812345678"),
u = CryptoJS.AES.encrypt(password, i, {iv: r});
return u + ""
};
var passwordA ='不讓你看';
var aesEncrypt =encryption(passwordA);
console.log('aesEncrypt text: ' + aesEncrypt);
坑4 pycharm 解釋器出現了問題
執行下面的代碼發現 print(execjs.get().name) 打印出來的不是 Node.js (V8)
檢查解釋器是否出現了問題
def decode_password(self,password):
os.environ["NODE_PATH"] = 'E:/python3.6.1/Tools/node_v7.6.0/node_modules/'
print(execjs.get().name)
parser = execjs.compile("""
var CryptoJS = require("crypto-js");
function encryption(password) {
console.log('aesEncrypt text: ' + password)
var t = CryptoJS.MD5("login.189.cn"),
i = CryptoJS.enc.Utf8.parse(t),
r = CryptoJS.enc.Utf8.parse("1234567812345678"),
u = CryptoJS.AES.encrypt(password, i, {iv: r});
return u + ""
}
""")
obj = parser.call("encryption", password)
return obj
記得指定路徑:
os.environ[“NODE_PATH”] = ‘E:/python3.6.1/Tools/node_v7.6.0/node_modules/’
NODE_PATH就是你單獨安裝Node時候的路徑跟python沒有關係
坑5驗證碼
驗證碼藏得很深,關鍵理解好Cookies和Session的區別,官方解析
好了上面問題都解決好了就可以使用python登入電信網了
關於更多的知識大家可以相互交流