清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#!/usr/bin/env perl use LWP; use Data::Dumper; use HTML::Form; use JSON; use Switch; use HTML::Form; use File::Basename; use XML::Simple; use URI::Escape; use URI; use URI::QueryParam; push @INC,dirname(__FILE__); use Javascript::MD5; use JavaScript::Runtime; use File::Basename; use Data::Dumper; use threads; use threads::shared; use strict; #binmode(STDIN, ':encoding(utf8)'); #binmode(STDOUT, ':encoding(utf8)'); #binmode(STDERR, ':encoding(utf8)'); my $mt:shared; use lib './'; my $firstPG='http://ui.ptlogin2.qq.com/cgi-bin/login?target=self&style=4&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin_level%3D3&f_url=loginerroralert'; my $loginURL='http://ptlogin2.qq.com/login'; my $verifyURL='http://ptlogin2.qq.com/check?appid=#APPID#&uin=#UIN#&r='; my $VURL='http://ui.ptlogin2.qq.com/cgi-bin/ver'; my $homeUrl='http://home.pengyou.com/index.php?mod=home'; my $channelURL='http://d.web2.qq.com/channel/login2'; my $logProxy='http://d.web2.qq.com/proxy.html?v=20101025002'; my $firstProy='http://web2.qq.com/loginproxy.html?login_level=3'; my $realLoginURL='http://d.web2.qq.com/channel/poll2?'; my $onlineStatus='http://d.web2.qq.com/channel/get_online_buddies2?'; my $friendURL='http://s.web2.qq.com/api/get_user_friends2'; my $cwd=dirname(__FILE__); chdir($cwd); my $rt = JavaScript::Runtime->new(); my $cx = $rt->create_context(); my $js=Javascript::MD5->javascript(); my $PASS; $cx->bind_function(write => sub { $PASS=shift; }); my $jsTT.= <<EOT; function md5_3(B){ var A=new Array; A=core_md5(str2binl(B),B.length*chrsz); A=core_md5(A,16*chrsz); A=core_md5(A,16*chrsz); return binl2hex(A) }function md5(A){ return hex_md5(A) } function preprocess(P,V){ var T=""; T+=V; T=T.toUpperCase(); return md5(md5_3(P).toUpperCase()+T).toUpperCase(); } write(preprocess("#P#","#V#")); EOT sub genPass{ my ($P,$V)=@_; my $jst=$jsTT; $jst=~s/#P#/$P/g; $jst=~s/#V#/$V/g; my $tjs=$js.$jst; $cx->eval($tjs); return $PASS; } sub ua { use HTTP::Cookies; my $cookie_jar = HTTP::Cookies->new(file => "lwp_cookies.dat", autosave => 1); my $u=LWP::UserAgent->new('agent'=>'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1'); $u->cookie_jar($cookie_jar); push @{ $u->requests_redirectable }, 'POST'; $u; } sub get{ my ($ua,$url)=@_; my $rs=$ua->get($url); return $rs->content if($rs->is_success); return $rs->status_line; } sub post{ my ($ua,$url,@form)=@_; my $rs=$ua->post($url,\@form); return $rs->content if($rs->is_success); return $rs->status_line; } sub getVerifyCode{ my ($ua,$appid,$uid)=@_; my $VURL=$verifyURL; $VURL=~s/#APPID#/$appid/g; $VURL=~s/#UIN#/$uid/g; # print my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time); $VURL.="0.".time.reverse(time); my $rs =$ua->get($VURL); my $ctx=$rs->content; $ctx=~/,\'(.*)\'/g; $1; } sub getV{ my $ua=shift; my $rs=$ua->get($VURL); print $rs->content."\n"; } sub login{ my ($ua,$u,$p,$v)=@_; print $p,$v; # my $pass=genPass($p,$v); my $qp=URI->new("", "http"); $qp->query_param(u => $u); $qp->query_param(p => $p); $qp->query_param(aid => '1003903'); $qp->query_param(fp => 'loginerroralert'); $qp->query_param(dumy =>''); $qp->query_param(from_ui => '1'); $qp->query_param(h => '1'); $qp->query_param(mibao_css => ''); $qp->query_param(ptlang => '2052'); $qp->query_param(ptredirect => '1'); $qp->query_param(pttype => '1'); $qp->query_param(remember_uin => '1'); $qp->query_param(u1 => 'http://web2.qq.com/loginproxy.html?login_level=3'); $qp->query_param(verifycode => $v); # print Dumper($qp); my $getStr=$loginURL."?".$qp->query; print $getStr=($getStr); print "\n"; open F,">login.html"; binmode(F, ':encoding(utf-8)'); my $rs=$ua->get($getStr); print $rs->content; print F ($rs->content); close F; } sub gotoHome{ my $ua=shift; open F,">home.html"; # binmode(F, ':encoding(utf8)'); my $rs=$ua->get($homeUrl); print $rs->content; print F ($rs->content); close F; } sub readUsers{ my $xml=XMLin('users.xml'); $xml->{'user'}; } sub getFistPG{ my $ua=shift; open FP,">firstPG.html"; print FP (get($ua,$firstPG)); close FP; } sub channelLogin{ my $ua=shift; print my $ptwebqq=$ua ->{cookie_jar}->{COOKIES}->{'.qq.com'}->{'/'}->{'ptwebqq'}[1]; my $clientid=int(rand(99)).time%1000000; my @form=('r'=>qw{\{"status":"","ptwebqq":"}.$ptwebqq.qw{","passwd_sig":"","clientid":"}.$clientid.qw{","psessionid":null\}}); # my @form=('r'=> '{"status":"","ptwebqq":"4814b0b42af1b1c5939c2eac68c11f8f407cbed31e704465f6b571ec76bd98f4","passwd_sig":"","clientid":"22850164","psessionid":null}'); my $rs=$ua->post($channelURL,\@form); # print Dumper(@form); ($clientid,$rs->content); } sub getFriends{ my ($ua,$pv)=@_; my @form=('r'=>'{"h":"hello","vfwebqq":'."\"$pv\"}"); print post($ua,$friendURL,@form); } sub getFirstProxy{ my $ua=shift; get($ua,$firstProy); } sub getLogProxy{ my $ua=shift; get($ua,$logProxy); } sub realLogin{ my ($ua,$cid,$pvid,$vf)=@_; my $t=substr(time,0); print my $getstr=$realLoginURL."clientid=$cid&psessionid=$pvid&t=$t&vfwebqq=$vf"; my $rs=$ua->get($getstr); open F ,">error.html"; binmode(F, ':encoding(gbk)'); my $ctx=$rs->content; $ctx=~s/\\\\u/\\u/g; print F ($ctx); close F; # print Dumper($rs); # print Dumper($ua); } sub getOnline{ my ($ua,$cid,$pvid,$vf)=@_; my $t=substr(time,0); print my $getstr=$onlineStatus."clientid=$cid&psessionid=$pvid&t=$t"; my $rs=$ua->get($getstr); print $rs->content; } sub work{ my ($ua,$user,$v,$p)=@_; getV $ua; login $ua,$user->{'username'},$p,$v; $ua->default_headers()->push_header('Referer'=>$logProxy); my @channelRs=channelLogin $ua; my $clientId=@channelRs[0]; print @channelRs[1]; my $json=new JSON; my $rs=$json->jsonToObj(@channelRs[1]); print Dumper($rs); getLogProxy $ua; # print $rs->{'retcode'}; my $ps=$rs->{'result'}->{'psessionid'}; my $vf=$rs->{'result'}->{'vfwebqq'}; getOnline $ua, $clientId,$ps; getFriends $ua, $vf; while(1){ realLogin $ua,$clientId,$ps,$vf; sleep(10); } # sleep(1000); } sub main{ my $users=readUsers(); for my $user(@{$users}){ my $ua=&ua; my $v=getVerifyCode $ua,"1003903",$user->{'username'}; my $p=genPass($user->{'pass'},$v); threads->create(\&work,$ua,$user,$v,$p); } for my $th(threads->list()){ $th->join(); } sleep(10); } main;