无线路由器一键设置工具,制作过程

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

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

设置过程就是-创建登录密码-选择上网方式-无线WIFI设置-。。。。

创建登录密码:
打开HTTP WATCH 抓取一下封包(最好先清除下缓存),这里我创建密码设置 123456
无线路由器一键设置工具,制作过程

无线路由器一键设置工具,制作过程

由此得出创建登录密码的设置
提交地址是 //192.168.1.1/?code=10&asyn=0&auth=WaQ7xbhc9TefbwK
提交了数据 0KcgeXhc9TefbwK //加密后的123456
返回00000//成功标识

这就犯难了,提交的不是明文密码,而是经过加密后的密码。怎么去找个加密过程呢?
别担心,IE自带了开发人员工具,按下F12即可拥有它
无线路由器一键设置工具,制作过程

经过研究发现加密在 //192.168.1.1/lib 静态库的脚本Quary.js里
无线路由器一键设置工具,制作过程

无线路由器一键设置工具,制作过程

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=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
无线路由器一键设置工具,制作过程

创建登录密码步骤完成,接下来是POST登录(需要登录后才能继续进行设置),然后POST上网方式,POST无线设置,POST LAN口IP地址。

登录:
无线路由器一键设置工具,制作过程

无线路由器一键设置工具,制作过程

地址 //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!{0nALaY])JKG{5KCJrnjXqoVvE8vtWP}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设置
无线路由器一键设置工具,制作过程

无线路由器一键设置工具,制作过程

提交地址
//192.168.1.1/?code=1&asyn=0&id=07Gz3p5V.b6aBHKO
提交数据
id 22
linkMode 0
linkType 0
返回
00000

好像很简单?NO。调试发现提交地址 //192.168.1.1/?code=1&asyn=0&id= ??会变动的??WTF?
还是这个JS搜索&id=
无线路由器一键设置工具,制作过程

发现提交地址是这么来的。
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());
无线路由器一键设置工具,制作过程

启动调试后,登录一下随便操作一下,让他POST,后断下
无线路由器一键设置工具,制作过程

变量A的值是
00004
00000
k~xDW,8I,9gs)U4}
!cqU({BF1DS>,HLB|VV>tFfVm866kE}0W67wK+Rx7{SJ 00000
无线路由器一键设置工具,制作过程

F10逐过程, a=a.split("\r\n")执行完这个 //其实就是分割文本,用作分割的文本是换行符
authInfo[3]=a[2]//"k~xDW,8I,9gs)U4}"
authInfo[4]=a[3]//"!cqU({BF1DS>,HLB|VV>tFfVm866kE}0W67wK+Rx7{SJ
显而易见,就是我们登录后返回的这个数据,拿去分割,然后再拿去计算。
this.session=this.securityEncode(authInfo[3],b,authInfo[4])现在已知2个参数了, 中间的B是什么? 在这里下断看一下不就知道!
无线路由器一键设置工具,制作过程

加密过后的密码。现在知道了。。
无线路由器一键设置工具,制作过程

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