登入電信網遇到密碼被JS加密,關于加密算法可以先了解一下基礎:加密算法基礎
JavaScript基礎
遇到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登入電信網了
關于更多的知識大家可以互相交流