吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 32217|回复: 107
收起左侧

[易语言 转载] 无线路由器一键设置工具,制作过程,成品。

    [复制链接]
材鸟 发表于 2017-3-3 19:13
本帖最后由 材鸟 于 2017-3-3 22:49 编辑

前言:某种需要,要换一百几十个路由器。买来的路由器还要挨个去设置。一直操作几个步骤,十分蛋疼的一件事,由此想到做一个工具,点一下自动设置完毕。

正文:
众所周知,路由器的设置过程一般是 连接 192.168.1.1 然后按提示步骤操作设置即可使用,其中每一步设置都会向 192.168.1.1 提交数据使设置生效,那么显而易见,要制作的工具原理就是模拟每一步的封包,提交。最终完成设置~
先看一下我手中的这款路由器的设置页面吧 ,型号是 MERCURY(水星) MW305R
1.png
设置过程就是-创建登录密码-选择上网方式-无线WIFI设置-。。。。

创建登录密码:
打开HTTP WATCH 抓取一下封包(最好先清除下缓存),这里我创建密码设置 123456
2.png
3.png
由此得出创建登录密码的设置
提交地址是 http://192.168.1.1/?code=10&asyn=0&auth=WaQ7xbhc9TefbwK  
提交了数据 0KcgeXhc9TefbwK //加密后的123456
返回  00000  //成功标识

这就犯难了,提交的不是明文密码,而是经过加密后的密码。怎么去找个加密过程呢?
别担心,IE自带了开发人员工具,按下F12即可拥有它
4.png
经过研究发现加密在 http://192.168.1.1/lib 静态库  的脚本Quary.js里
5.png
6.png
function jiami (pass)
{return this.securityEncode(pass,"RDpbLfCPsJZ7fiv","yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW")};
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};this.simulateMouseC=function(a){simulateMouseC=!0==isIE&&!1==isIENormal?function(a){var b=document.createEventObject();b.sceenX=100;b.sceenY=0;b.clientX=0;b.clientY=0;b.ctrlKey=!1;b.altKey=!1;b.shiftKey=!1;b.button=0;a.fireEvent("onclick",b)}:function(){};simulateMouseC(a)};this.emptyNodes=function(a){for(;a&&a.firstChild;)a.removeChild(a.firstChild)}
OK,找到加密算法。这里我用的是易语言写的代码,用了某论坛的模块写的POST
7.png
创建登录密码步骤完成,接下来是POST登录(需要登录后才能继续进行设置),然后POST上网方式,POST无线设置,POST LAN口IP地址。

登录:
8.png
9.png
地址 http://192.168.1.1/?code=2&asyn=1
提交数据  0KcgeXhc9TefbwK

返回数据
00007
00004
00000
<*)XVf*vGI!,3B!p
5JiHmd3E>k7voE(uN>s42D7D1!4uD^uOnzyIpE4v!E.bF5A0BT19}nF!{0n<BY034~]I7|0A,Wd>ALaY])JKG{5KCJrn<X7*,WXi]$0D*amLiit|,nr)XqHu3P|t{FZnp2Q4SWLKlCSypKa5(ramU^[V{ioA>jXqoVvE8vtWP}aekvrDyE3V(j3k{fn)xuD(4(Y35!xm{cf+rhaXCp7HWv3dQ^uu9!^9Rkc[oHH1F0D25Vn[T{B6u({Yhr0V>p
00000

WTF?返回的什么鬼?后面就知道,登录这就成功了~接下来POST上网方式,POST无线设置,POST LAN口IP地址。


POST上网方式:
登录后跳过向导,进管理页面再来抓。这里我抓的是自动获取IP设置
10.png
11.png
提交地址
http://192.168.1.1/?code=1&asyn=0&id=07Gz3p5V.b6aBHKO
提交数据
id 22
linkMode 0
linkType 0
返回
00000

好像很简单?NO。调试发现提交地址 http://192.168.1.1/?code=1&asyn=0&id= ??会变动的??  WTF?
还是这个JS  搜索&id=
12.png
发现提交地址是这么来的。
this.session=this.securityEncode(authInfo[3],b,authInfo[4]);c+="&id="+this.encodePara(this.session);

ID是this.encodePara(this.session) // 编码(this.session) 得来的
this.session=this.securityEncode(authInfo[3],b,authInfo[4]) //很熟悉吧,刚才创建登录密码的时候用的算法,但是参数呢? authInfo[3],b,authInfo[4] 三个参数是什么

往前翻可以看到 authInfo 的赋值
a=a.split("\r\n");EUNAUTH==this.result.errorno&&(authInfo[1]=a[0],authInfo[2]=a[1],authInfo[3]=a[2],authInfo[4]=a[3],$.group=a[4],$.pagePRHandle());
13.png
启动调试后,登录一下随便操作一下,让他POST,后断下
14.png
变量A的值是
00004
00000
k~xDW,8I,9gs)U4}
!cqU({BF1DS>,HLB|V<X2aL{m|X^WO(wqymZ<RGaD]1,7)+kW+IS{gc!q~EiM$CWJB7Prq*{A2WmBmqE4M3!^<C2cnEfCW0R8+4!]4e^[fbG6fW>V>tFfVm866kE}0W67wK+Rx7{SJ<GEV8Xu[Wb~4BcdDbuXOqne8vcpL<Tg484Ej6FZ,(j3mrAtPk3}Hr8{4HfTDwP7xSosp7!pOxv8A3{Fy3.s2OcB<W5O3xx,n4VkD0HN{0SxDKrXDx!7v}
00000
15.png
F10逐过程, a=a.split("\r\n")  执行完这个 //其实就是分割文本,用作分割的文本是换行符
authInfo[3]=a[2]//"k~xDW,8I,9gs)U4}"
authInfo[4]=a[3]//"!cqU({BF1DS>,HLB|V<X2aL{m|X^WO(wqymZ<RGaD]1,7)+kW+IS{gc!q~EiM$CWJB7Prq*{A2WmBmqE4M3!^<C2cnEfCW0R8+4!]4e^[fbG6fW>V>tFfVm866kE}0W67wK+Rx7{SJ<GEV8Xu[Wb~4BcdDbuXOqne8vcpL<Tg484Ej6FZ,(j3mrAtPk3}Hr8{4HfTDwP7xSosp7!pOxv8A3{Fy3.s2OcB<W5O3xx,n4VkD0HN{0SxDKrXDx!7v}"

显而易见,就是我们登录后返回的这个数据,拿去分割,然后再拿去计算。
this.session=this.securityEncode(authInfo[3],b,authInfo[4])  现在已知2个参数了, 中间的B是什么? 在这里下断看一下不就知道!
16.png
加密过后的密码。现在知道了。。
17.png

剩下POST无线设置,POST LAN口IP地址。无线设置的话,POST数据会要一个UsrPin,点击设置的时候有返回过来,获取即可。LAN口IP设置的话,没啥特别的~ 写的好乱~ 没心情写了,

附件源码既是成品

本篇目的是写过程,授人以渔也~。说不能通用的,我很无语,只能告诉你,多读书总没错
易语言源码和加密的JS.rar (149.67 KB, 下载次数: 433)

免费评分

参与人数 25吾爱币 +25 热心值 +22 收起 理由
kentelove + 1 我很赞同!
cntank01 + 1 + 1 用心讨论,共获提升!
aqq500 + 1 谢谢@Thanks!
xintian + 1 + 1 讲解的很详细,就是小白看不懂。一直想弄个路由器重启软件。不会搞
老军医擎天兔 + 1 + 1 我很赞同!
ptabc + 1 + 1 用心讨论,共获提升!
o奥特蛋 + 1 + 1 用心讨论,共获提升!
dzybui + 1 + 1 谢谢@Thanks!
不知道改成啥 + 2 + 1 本来很高兴的,看到多读书我就不服了!
lelenn + 1 + 1 跪了。。
siniandd + 1 本身就不通用 只能说同操作系统的通用 让别人多读书?可笑!
sinceret + 1 + 1 用心讨论,共获提升!
piliyazi + 1 + 1 热心回复!
i7_720qm + 1 + 1 谢谢@Thanks!
治愈先生 + 1 + 1 谢谢@Thanks!
jakhu + 1 + 1 做成了,那个加密的JS是什么?不用管它?
nocolor + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Dormleader + 1 + 1 支持。期待成品。
學无止境 + 1 + 1 谢谢@Thanks!感谢楼主详细教程,学习学习!
ayoma + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Anewbie + 1 + 1 我是越看越觉得没信心了
me17 + 1 + 1 懒是人进步的阶梯,哈哈
ryan0905 + 1 + 1 谢谢@Thanks!
HIM411 + 1 + 1 楼主快更,我也是水星
女朋友 + 1 前排

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Light紫星 发表于 2018-10-18 22:57
写过一个Python版本的。
#encoding:utf-8
"""
@author:zixing
@email:zixing@9smart.cn
@date:2017-06-02 02:46
"""
import urllib
import requests
class MercuryApi:
        def __init__(s,domainUrl,Pwd,showStatus=1):
                s.domainUrl = domainUrl #"http://192.168.0.1/"
                s.Pwd = Pwd
                s.TDDP()
                s.authInfo = []
                s.session = ""
                #s.UA = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
                #s.header = { "User-Agent" : s.UA,"Referer": "http://192.168.0.1" }
                #s.my_session = requests.Session()
                s.showStatus = showStatus
        def TDDP(s):
                #DM.js
                s.TDDP_INSTRUCT = 0
                s.TDDP_WRITE = 1
                s.TDDP_READ = 2
                s.TDDP_RESET = 5 #Reset the Router
                s.TDDP_REBOOT = 6
                s.TDDP_AUTH = 7
                s.TDDP_GETPEERMAC = 8
                s.TDDP_CHGPWD = 10
                s.TDDP_LOGOUT = 11
                #model.js
                s.DEVICE_DATA_ID = 0
                s.SYSTEM_DATA_ID = 1
                s.SYSTEM_LOG_DATA_ID = 2
                s.EXCEPT_LOG_DATA_ID = 3
                s.LAN_DATA_ID = 4
                s.DHCPS_DATA_ID = 8
                s.WLAN_AP_LIST_DATA_ID = 38
        def post(s,url,data=""):
                return requests.post(url,str(data)).content
        def ConvertErrCode(s,errorCode):
                result = "Unknow Error"
                if(errorCode == 0):
                        result = "Post Success"
                elif(errorCode == 7):
                        result = "Password Error"
                elif(errorCode == 9):
                        result = "Invalid Instruct"
                elif(errorCode == 114):
                        result = "Same Password"
                return result
        def encodePara(s,a):
                return urllib.quote(a)
        def securityEncode(s,a,b,c):
                d, f, h, m = "", len(a), len(b), len(c)
                e = max(f,h)
                for g in range(0,e):
                        l = k = 187
                        if(g >= f):
                                l = ord(b[g])
                        else:
                                if(g >= h):
                                        k = ord(a[g])
                                else:
                                        k = ord(a[g])
                                        l = ord(b[g])
                        d += c[ (k ^ l) % m ]
                return d
        def orgAuthPwd(s,Pwd = ""):
                return s.securityEncode(Pwd=="" and s.Pwd or Pwd, "RDpbLfCPsJZ7fiv", "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW")
        def getAuthInfo(s):
                result = s.post(s.getTDDPUrl(s.TDDP_READ)).split("\r\n")
                if(len(result) < 7):
                        return []
                s.authInfo = ["" for i in range(5)]
                for i in range(1,5):
                        s.authInfo = result.strip()
        def getSession(s):
                s.getAuthInfo()
                s.session = s.securityEncode(s.authInfo[3],s.orgAuthPwd(),s.authInfo[4])
        def printResult(s,loginResult,OperaName=""):
                if(s.showStatus == 0):
                        return
                loginCode = int(loginResult.split("\r\n")[0])
                if (loginCode == 0):
                        print("%s Success" % (OperaName))
                else:
                        print("%s Failed , error code:%d , error msg:%s " %(OperaName,loginCode,MwApi.ConvertErrCode(loginCode)))
        def orgURL(s,a):
                s.getSession()
                return "%s%sid=%s"%(a,(a.find("?")>-1 and '&' or '?'),s.encodePara(s.session))
                if(a.find("?")>-1):
                        return "%s&id=%s"%(a,s.encodePara(s.session))
                else:
                        return "%s?id=%s"%(a,s.encodePara(s.session))
        def getTDDPUrl(s,TDDP,asyn=0):
                return "%s?code=%d&asyn=%d"%(s.domainUrl,TDDP,asyn)
        def auth(s): #auth user,just like login
                url = s.orgURL(s.getTDDPUrl(s.TDDP_AUTH))
                result = s.post(url)
                s.printResult(result,"Login")
                return result
        def read(s,a = ""):
                url = s.orgURL(s.getTDDPUrl(s.TDDP_READ))
                result = s.post(url, a=="" and s.SYSTEM_DATA_ID or a )
                s.printResult(result,"Read")
                return result
        def write(s,data = ""):
                url = s.orgURL(s.getTDDPUrl(s.TDDP_WRITE))
                result = s.post(url, data=="" and "" or data )
                s.printResult(result,"Write")
                return result
        def reboot(s):
                url = s.orgURL(s.getTDDPUrl(s.TDDP_REBOOT))
                result = s.post(url)
                s.printResult(result,"Reboot")
                return result
        def changePwd(s,newPwd):
                url = s.getTDDPUrl(s.TDDP_CHGPWD)
                url += "&auth=" + s.encodePara(s.orgAuthPwd(s.Pwd))
                url = s.orgURL(url)
                result = s.post(url,s.orgAuthPwd(newPwd))
                s.printResult(result,"changePassWord")
                s.Pwd = newPwd
                return result
        def instr(s,instruct): #no use
                url = s.orgURL(s.getTDDPUrl(s.TDDP_INSTRUCT))
                result = s.post(url,instruct)
                s.printResult(result,"INSTRUCT")
                return result
        def logout(s): #It seems useless but for safe exit in the browser
                url = s.orgURL(s.getTDDPUrl(s.TDDP_LOGOUT))
                result = s.post(url)
                s.printResult(result,"Logout")
                return result
        def getPeerMac(s): #get your mac address
                url = s.orgURL(s.getTDDPUrl(s.TDDP_GETPEERMAC))
                result = s.post(url)
                s.printResult(result,"getPeerMac")
                return result
        def reset(s): #Reset your Router!!!
                result = "Warning,this operation will reset your router!!!"
                print(result)
                return result
                url = s.orgURL(s.getTDDPUrl(s.TDDP_RESET))
                result = s.post(url)
                s.printResult(result,"reset")
                return result
if(__name__ == "__main__"):
        MwApi = MercuryApi("http://192.168.0.1/","admin")
        MwApi.auth()
        #print(MwApi.getPeerMac())
        #print(MwApi.read(MwApi.DHCPS_DATA_ID))
        """print(MwApi.write(
                '''id 8
                enable 1
                poolStart 192.168.0.60
                poolEnd 192.168.0.170
                leaseTime 120
                dns 0 180.76.76.76
                dns 1 223.6.6.6
                gateway 192.168.0.1
                hostName
                '''))
        """
        #print(MwApi.read(MwApi.SYSTEM_DATA_ID))
        #MwApi.changePwd("admin")
        #MwApi.logout()
        #MwApi.reboot()
liaowei136 发表于 2018-5-29 06:53
UID6564精华0威望0 点 热心值1 点 悬赏值0 点听众7贡献值0 点 违规0 次 吾爱币733 CB注册时间2008-4-24
收听TA
12#
发表于 2017-3-3 19:50 | 只看该作者
成品在哪呢
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
青槿 发表于 2017-3-3 19:17 来自手机
桥段 发表于 2017-3-3 19:29
不同品牌,一键设置起来有困难吧
头像被屏蔽
wdy2008088 发表于 2017-3-3 19:29
提示: 作者被禁止或删除 内容自动屏蔽
jlzjf 发表于 2017-3-3 19:32
佩服佩服
zt185 发表于 2017-3-3 19:36
我也觉得不同品牌一键可能有难度,我手里有K2还没用,想试试呢
女朋友 发表于 2017-3-3 19:41
前排支持!
jakhu 发表于 2017-3-3 19:43
看好你,等成品
刘留留 发表于 2017-3-3 19:49
坐等成品,谢谢
ljty214 发表于 2017-3-3 19:50
成品在哪呢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-19 22:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表