登入电信网遇到密码被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登入电信网了
关于更多的知识大家可以相互交流