Tp-link(TL-WR886N)無線路由器後臺JS加密算法Python實現

最近家裏換了個TP的無線路由器,鼓搗鼓搗WEB登錄原理,不得不說TPLink這中無線路由器功能雖然沒有openWRT那麼多功能,但是麻雀雖小五臟俱全,對普通人來說很實用

話不多說,開整:

簡潔的界面:

wKioL1h_X4mgv30AAABZbAb6u5c007.png-wh_50

看看源碼,這裏可以看到應用了個名字爲class.js的JS文件(加密算法在這)

wKioL1h_YJfR7j2tAADDfItzk7k668.png-wh_50

我操,更簡單,,,連輸入框和按鈕都沒有,估計使用JS生成的了

接下來抓個包來看看,看是怎麼登錄的

可以看到點擊登錄按鈕後,輸入的密碼將會被加密輸送,認證通過後獲取一個類似令牌的字符,然後就登進去了

wKioL1h_YjOR2zruAAKYcpwR9-Q189.png-wh_50

wKioL1h_YmiyJi-nAACL-63dg60280.png-wh_50

在瀏覽器打開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 )

效果:

wKiom1h_ZlDgeVriAAEbosCgmTI177.png-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章