您的位置:首页 > Web前端 > JavaScript

Tp-link(TL-WR886N)无线路由器后台JS加密算法Python实现

2017-01-18 20:58 2687 查看
最近家里换了个TP的无线路由器,鼓捣鼓捣WEB登录原理,不得不说TPLink这中无线路由器功能虽然没有openWRT那么多功能,但是麻雀虽小五脏俱全,对普通人来说很实用
话不多说,开整:
简洁的界面:



看看源码,这里可以看到应用了个名字为class.js的JS文件(加密算法在这)


我操,更简单,,,连输入框和按钮都没有,估计使用JS生成的了
接下来抓个包来看看,看是怎么登录的
可以看到点击登录按钮后,输入的密码将会被加密输送,认证通过后获取一个类似令牌的字符,然后就登进去了





在浏览器打开class.js查看:找了半天,终于找到:
关键代码:
this.securityEncode(a, "RDpbLfCPsJZ7fiv", "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW")
};
//a估计是一个类似于密钥之类的字符
//b密码
//c长密钥,长度为255
//charCodeAt方法可返回指定位置的字符的 Unicode 编码
//charAt方法可返回指定位置的字符
//?: JS的三元运算符,就像if...else如:1>3?alert(1):alert(2),条件?情况1:情况2
this.securityEncode = function(a, c, b) {
var d = "",
e, f, g, h, k = 187,
m = 187;
f = a.length;
g = c.length;
h = b.length;
e = f > g ? f: g;
for (var l = 0; l < e; l++) m = k = 187,
l >= f ? m = c.charCodeAt(l) : l >= g ? k = a.charCodeAt(l) : (k = a.charCodeAt(l), m = c.charCodeAt(l)),
d += b.charAt((k ^ m) % h);
return d
};
看懂上面的JS代码后很容易用Python实现该算法
python实现:
#!/usr/bin/env python2.7
#-*- ending:utf-8 -*-
short = "RDpbLfCPsJZ7fiv"
#a
Lng = 'yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW'
#c
PawD = '123456@...'
#b
#ord与JS的charCodeAt方法类似,返回指定位置的字符的 Unicode 编码

def encrypt_passwd(a, b, c):
e = ''
f, g, h, k, l = 187, 187, 187, 187, 187
n = 187
g = len(a)
h = len(b)
k = len(c)
if g > h:
f = g
else:
f = h

for p in list(range(0, f)):
n = l = 187
if p >= g:
n = ord(b[p])
else:
if p >= h:
l = ord(a[p])
else:
l = ord(a[p])
n = ord(b[p])
e += c[(l ^ n) % k]

print e

encrypt_passwd(short, PawD, Lng )
效果:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息