JS开发字典探测用户名或密码工具

2008-02-23 08:03:49来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

用javascript开发字典探测用户名或密码工具

文章作者:翟振凯 (小琦)
作者网站:http://www.xiaoqi.net
作者论坛:http://www.tdqy.com
QQ: 22336848 53353866

实例演示
打包下载

授人予鱼,不如授人予渔。本文注重讲述作者的开发思路与程序的实现方法,目地是让大家了解一个程序的开发过程和这个程序功能的实现原理,而不仅仅是给大家提供一个这样的工具。希望看过本文后的朋友会有所收获,能和我共同分享用javascript编写程序的乐趣。
为了便于大家的理解,本程序在实现过程中,简洁的使用了多种javascript技术,并且在每一步,都有详细的注解,就算您是个WEB程序开发新手,也能比较容易理解本文,并相信本文会对您将来的WEB程序开发生涯有所帮助。

核心技术

  • xmlhttp获取数据 javascript对文本数据处理
  • javascript对数组循环读取(两种方法)
  • xmlhttp取中文值乱码转换
     

主要功能

  • 网站可用用户名探测
  • 使用用户名字典批量探测户名字
  • 用户名密码暴力破解

特色

  • 采用AJAX技术,无刷新操作、呈现结果 可以载入本地字典文件或网络字典文件 脱离后台动态语言依赖,B/S模式C/S界面,纯javascript编写功能代码,完美运行于所有IE内核浏览器 实时显示探测结果,探测进度,成功结果与失败结果分开显示 支持暂停探测和继续探测
  • 代码简洁仅1K
  • 支持多线程探测,可设定缓冲时间

开发思路及原理

一、基本探测

  • 用xmlhttp向被探测页面地址发送要探测数据
  • 对xmlhttp返回值进行判断
  • 将判断结果以追加的方式呈现在页面上

二、批量探测

  • 用xmlhttp载入字典文件
  • 用javascript将字典文件以换行符(\r\n)为分隔,转化为数组
  • 按照字典数组顺序循环向探测地址发送数据并且对返回数据进行判断处理

三、功能强化

  • 取得字典数组大小(即:要探测的次数),返回给用户 将探测次数依次累加,呈现给用户当前探测进度 设定探测进程,即:每探测多少个数据,才向用户返回一次结果
  • 设定缓冲时间,即:设定探测时间间隔,防止浏览器在大数据量探测时停止响应
  • 探测暂停或继续探测

四、开发背景

前些天,想在百度空间上注册一个简短而又有意义的用户名,发现自己喜欢的很多用户名都被占用了,而进行一个个的手工用户名探测又太麻烦了。
因为我是一个喜欢运用自己掌握的技术来解决问题(或困难)的人,于是就写了这个程序。
为了使它给使用起来比较方便,也为了让它更加实用,我又在它的通用性上做了些加强。
比如:
可以探测大部分不需要验证码检测用户名是否被占用的网站。
可以探测一些网站用户的密码。
可以探测一些网站用户的密码取回问题。
可以向WEB服务器批量提交指定数据

起初我是用ASP脚本来实现的,但ASP程序只能运行于支持ASP的WEB服务器上,无法直接在浏览器上执行,使用起来没有那么方便,于是就写了这个javascript的版本的程序。

五、实现过程

1、使用try-catch异常处理创建XMLHTTPRequest对象

//尝试用IE浏览器的方式创建XMLHttpRequest对象
var xmlhttp = null;
try
{
xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
alert("您的浏览器不能创建XMLHttpRequest对象,无法使用此程序!");
}
}
//尝试用IE浏览器的方式创建XMLHttpRequest对象结束

/*
翟振凯注:MSXML2.XMLHTTP 和 Microsoft.XMLHTTP 都是微软的XMLHTTP控件,只是版本不同。
IE的安全级别如果不是太高,微软的XMLHTTP控件是可以跨域获取数据的。
因为 Mozilla Firefox 浏览器的 XMLHttpRequest() 不能跨域获取数据,我们就不用 XMLHttpRequest() 方法创建XMLHTTP对象了。
*/

2、对返回的中文编码处理

//对返回的中文编码处理
function Rec_Html(Html)
{
var Rec=new ActiveXObject("ADODB.RecordSet");
Rec.Fields.Append("DDD",201,1);
Rec.Open();
Rec.AddNew();
Rec(0).AppendChunk(Html);
Rec.Update();
return Rec(0).Value;
Rec.Close();
}
//对返回的中文编码处理结束

3、检查判断依据中是否需要中文编码处理

if(err.value.replace(/[^\W]/g,'').length=0)
//用正则替换掉任何非单词和数字字符后,如果值大于0,说明判断依据中可能含有中文或其它字符,就进行编码转换。
{
Html=xmlhttp.responseText;//不转换
}
else
{
Html=Rec_Html(xmlhttp.responseBody);//转换
}

4、进行探测,对结果进行判断并输出

//开始探测 参数为要探测的当前值
function geturl(id)
{
try{
xmlhttp.open("GET",url.value id,false);//定义数据传送方式,服务网页的URL(探测地址 探测值),是否同步执行
xmlhttp.onreadystatechange = function() {//xmlhttp 触发事件

if(xmlhttp.readyState==4)//xmlhttp对象状态如果为完成
{
if(xmlhttp.status==200) //如果服务器返回的状态码为200(成功)
{

//对结果的中文编码转换判断

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JavaScript自定义模式对话框

下一篇:弹出窗口window.open()的参数列表