diff --git a/newbiecontest/prog/2nd_degre/2nd_degre.pl b/newbiecontest/prog/2nd_degre/2nd_degre.pl new file mode 100755 index 0000000..4061bcf --- /dev/null +++ b/newbiecontest/prog/2nd_degre/2nd_degre.pl @@ -0,0 +1,235 @@ +#!/usr/bin/env perl + +# uses ######################################################################### +use diagnostics; +use warnings; +use strict; +# Modules +# database +use DBI; +# http +use LWP::UserAgent; +use HTTP::Cookies; + +# subs ######################################################################### +# extract cookie from SQLite db +sub extract_cookie +{ + # shift db_path + my $db_path = shift; + + # variables usefull for database connection and handler + my $dbh; + my $sth; + my $rv; + my @row; + + # string containing the query + my $query; + + # connect to the db + $dbh = DBI->connect("dbi:SQLite:dbname=$db_path","","") or die $DBI::errstr; + + # prepare the query + $query = "SELECT name, value FROM moz_cookies WHERE host LIKE\ + '%newbiecontest.org%' AND name LIKE '%SMFCookie%'"; + $sth = $dbh->prepare($query); + + # execute + $rv = $sth->execute() or die $DBI::errstr; + + # fetch the only row found + @row = $sth->fetchrow_array(); + + # close the database + $sth->finish(); + $dbh->disconnect(); + + return $row[0], $row[1]; + +} + +# Send http request +sub send_request +{ + + # shift args + my ($cookie_name, $cookie_val, $url) = @_; + + # create variables + my $ua = LWP::UserAgent->new; + my $cookies = HTTP::Cookies->new(); + + # create the cookie + $cookies->set_cookie(0, $cookie_name, $cookie_val, '/', 'newbiecontest.org', 80, 0, 0,\ + 0, 0); + + # add the cookie to the jar + $ua->cookie_jar($cookies); + + # send request + my $response = $ua->get($url); + + return $response->decoded_content; + +} + +# solve equation +sub solve_equation +{ + # shift equation + my $equation = shift; + + # variables + my $delta; + my $x1; + my $x2; + my $sol; + my $sol_trunc; + + print("\n" . $equation . "\n"); + + # calcul delta + ($delta, $a, $b) = delta($equation); + + # if it's < 0, no solution + if ($delta < 0) { + print("\t There is no solution...\n"); + exit; + } + + # if delta == 0 + if ($delta == 0) { + $sol = - $b / (2 * $a); + } + + # else (delta > 0), 2 solutions + else { + # calcul x1 and x2 + $x1 = - ($b - sqrt($delta)) / (2 * $a); + $x2 = - ($b + sqrt($delta)) / (2 * $a); + + # determine the one who is valid for the answer of the challenge + if ($x1 > $x2) { + $sol = $x1; + } + + else { + $sol = $x2; + } + } + + # truncate (2 decimals) + $sol_trunc = (int ($sol * 100)); + $sol_trunc /= 100; + + # return the solution + return $sol_trunc; + +} + +# calcul delta +sub delta +{ + # variables + my $delta; + my $a; + my $b; + my $c; + + # shift the equation + my $equation = shift; + + # funny time + print("\t Regex time boy !\n"); + + # regex + $equation =~ m/(\d*)x. (.) (\d*)x (.) (\d*)/; + + print("\t Regex time is done ! Well done\n"); + + # reorder all the coefficients + $a = $1; + + if ($a eq "") { + $a = 1; + } + + $b = $3; + + if ($3 eq "") { + $b = 1; + } + + if ($2 eq "-") { + $b *= -1; + } + + $c = $5; + + if ($c eq "") { + $c = 0; + } + + if ($4 eq "-") { + $c *= -1; + } + + # calcul delta + $delta = $b * $b - 4 * $a * $c; + + # return needed values + return $delta, $a, $b; + +} + +# send answer +sub send_answer +{ + my ($cookie_name, $cookie_val, $url, $result) = @_; + + # create variables + my $ua = LWP::UserAgent->new; + my $cookies = HTTP::Cookies->new(); + + # modify the url + $url = $url . "?solution=" . $result; + + # create the cookie + $cookies->set_cookie(0, $cookie_name, $cookie_val, '/', 'newbiecontest.org', 80, 0, 0,\ + 0, 0); + + # add the cookie to the jar + $ua->cookie_jar($cookies); + + # send request + my $response = $ua->get($url); + + print $response->decoded_content; +} + +# main ######################################################################### +# check argument number +if (@ARGV != 3) { + + print("Get. The. Fuck. Out\n"); + print("[i] Usage : ./2nd_degre.pl cookie.db url_in url_out\n"); + + exit; +} + +my $cookie_name; +my $cookie_val; +my $equation; +my $result; + +($cookie_name, $cookie_val) = extract_cookie($ARGV[0]); + +$equation = send_request($cookie_name, $cookie_val, $ARGV[1]); + +$result = solve_equation($equation); + +send_answer($cookie_name, $cookie_val, $ARGV[2], $result); + +print("Done.\n"); +