Skip to content

Instantly share code, notes, and snippets.

@oki
Created June 27, 2018 08:38
Show Gist options
  • Select an option

  • Save oki/039a523fd80bac26ff65cc8f14fa0a1f to your computer and use it in GitHub Desktop.

Select an option

Save oki/039a523fd80bac26ff65cc8f14fa0a1f to your computer and use it in GitHub Desktop.
#!/usr/bin/perl -w
# Skrypt pisany na ostatnich wakacjach. Miał on na celu wygrywanie nagród
# w internetowym konkursie jednej z tytoniowych firm. Konkurs polegał na
# wpisaniu kodu z paczki papierosów, wygrywała ta osoba, która wpisała kod
# jako pierwsza w danej minucie. Skrypt po odczytaniu kodu z "konfiga"
# robił to automatycznie, a że skrypt działający na serwerze www
# "chwalił się czasem" z którego korzysta, mozna bylo przewidzieć w której
# minucie kliknąć. Statystki działania skryptu: na 36 kodów z paczek króre
# posiadałem aż 17 zostało trafionych, 17 drobnych nagród typu koszulki,
# zapalniczki, podstawki pod komórkę, okulary. Do wygrywania takich tez
# nagród skrypt byl uzywany, poniewaz przy bardziej wartosciowych obciazenie
# serwera bylo zbyt duze a klikniecie jako pierwszy w minucie zalezalo
# od szczescia ;)
use LWP;
use HTTP::Request::Common;
use Data::Dumper;
use locale;
use POSIX;
use Time::HiRes 'time';
use locale;
use strict;
$|++;
my @Ua=( 'Microsoft Internet Explorer','Mozilla/4.0 (Compatible; MyWay)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)', 'Mozilla/4.0 (compatible; MSIE 5.01; Hotbar 4.4.2.0)', 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)',);
my $Browser = LWP::UserAgent->new(agent => $Ua[int(rand(@Ua))],timeout => 2);
my $Url = "http://www.cominute.pl/";
my $CzasSerwer = "";
my $CzasSerwerOld = "";
#my $Config = "rafal.cfg";
#my $Config = "rafal_ok.cfg";
#my $Config = "maniek.cfg";
my $Config = "ok1.cfg";
# wczytujemy konfig, fomat pliku: w jednej lini id i kod odzielone ':'
open(C,$Config) || die "\$Config: nie moge otworzyc..\n";
my($Id,$Kod)=split(/:/,<C>);chomp($Kod);close(C);
print "Id: [1m#$Id# [0m\nKod: [1m#$Kod# [0m\n";
my $WyslijKod = new HTTP::Request POST => 'http://www.cominute.pl/Default.aspx';
$WyslijKod->content_type('application/x-www-form-urlencoded');
# Glowna petla..
while(1) {
my$Res;my$Roznica="";my$T0;my$T1;
for( my $x = 0; $x < 10; $x++ ) { # proboje 10 razy pobrac strone..
$T0 = time;
$Res = $Browser->request( GET $Url );
$T1=time;$Roznica=sprintf("%2.4f",$T1-$T0);$T0=time;
last if( $Res->is_success );
}
if($Res->headers->{date} =~ /\w+, \d+ \w+ \d+ (\d+):(\d+):(\d+) GMT/i ) {
$CzasSerwer = { Hour => $1, Min => $2, Sec => $3 };
} else { return 0; }
my $Body = $Res->content || return 0;
my $Nagroda; my $Czas; my $Stat;
# po pobraniu strony luskamy co potrzebne..
if($Body=~/nextptit" \w+="\d+" \w+="\d+" \w+="\w+">(\w+)<\/td>/i){$Nagroda=$1;}if($Body=~/nextptm" \w+="\d+" \w+="\d+" \w+="\w+">(.*)<\/td>/i){$Czas=$1;}if($Body=~/"__VIEWSTATE" \w+="(.*)" \/>/i){$Stat=$1;}
$T1 = time; my $Roznica2=sprintf("%2.4f",$T1-$T0);$Roznica+=$Roznica2;
$WyslijKod->content("__VIEWSTATE=${Stat}&Mcodeform1:txtCID=${Id}&Mcodeform1:txtMCODE=${Kod}&Mcodeform1:btnAkceptuj=Akceptuj");
if ( $CzasSerwerOld && $CzasSerwer->{Hour} eq $CzasSerwerOld->{Hour} &&
$CzasSerwer->{Min} eq $CzasSerwerOld->{Min} ) { # Dodajemy roznice..
$CzasSerwer->{Sec} = $CzasSerwerOld->{Sec} + $Roznica;
}
if(sprintf("%2d",$CzasSerwer->{Sec}) % 2 == 0){print" [1;34m";}
else{print" [1;33m";}
printf("[*] (%02d:%02d:%02.3f) %-10s o %5s\n",
$CzasSerwer->{Hour}, $CzasSerwer->{Min}, $CzasSerwer->{Sec},
$Nagroda, $Czas);
if ( $CzasSerwer->{Sec} >= 59.3 ) {
#if ( $CzasSerwer->{Sec} <= 0.2 ) {
print "[*] Go!!!\n";
my $Res = $Browser->request($WyslijKod);
open(W,">"."log_www.html") || die "$!\n";
open(D,">"."log_dump.html") || die "$!\n";
print D Dumper ( $Res );
print W $Res->content;
close(D);close(W);
die;
}
print " [0m";
$CzasSerwerOld = $CzasSerwer;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment