无线路由器一键设置工具,制作过程
前言:某种需要,要换一百几十个路由器。买来的路由器还要挨个去设置。一直操作几个步骤,十分蛋疼的一件事,由此想到做一个工具,点一下自动设置完毕。
正文:
众所周知,路由器的设置过程一般是 连接 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
OK,找到加密算法。这里我用的是易语言写的代码,用了某论坛的模块写的POST
登录:
地址 //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
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|V
F10逐过程, a=a.split("\r\n")执行完这个 //其实就是分割文本,用作分割的文本是换行符
authInfo[3]=a[2]//"k~xDW,8I,9gs)U4}"
authInfo[4]=a[3]//"!cqU({BF1DS>,HLB|V
显而易见,就是我们登录后返回的这个数据,拿去分割,然后再拿去计算。
this.session=this.securityEncode(authInfo[3],b,authInfo[4])现在已知2个参数了, 中间的B是什么? 在这里下断看一下不就知道!
加密过后的密码。现在知道了。。
剩下POST无线设置,POST LAN口IP地址。无线设置的话,POST数据会要一个UsrPin,点击设置的时候有返回过来,获取即可。LAN口IP设置的话,没啥特别的~ 写的好乱~ 没心情写了,