diff --git a/newbiecontest/prog/lecture_learning/lecture.pl b/newbiecontest/prog/lecture_learning/lecture.pl new file mode 100755 index 0000000..3cf6370 --- /dev/null +++ b/newbiecontest/prog/lecture_learning/lecture.pl @@ -0,0 +1,176 @@ +#!/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; + +} + +# Write img to file +sub write_into_file +{ + + my $img = shift; + my $filename = shift; + + # open + open(my $file, '>', $filename) or die("[X] File not found"); + + # write + print $file $img; + + # close + close $file; + +} + +# Extract text using tesseract ocr +sub extract_text +{ + my $result; + my $filename = shift; + + system("convert", $filename, "-resize", "300%", $filename); + + system("convert", $filename, "-negate", "/tmp/negate.bpm"); + + system("tesseract", "/tmp/negate.bpm", "/tmp/text"); + +} + +sub read_text +{ + # open file + open(my $file, '<', "/tmp/text.txt") or die("[X] File not found"); + + # read the first line + my $line = <$file>; + + return $line; + +} + +# 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 . "?chaine=" . $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 != 4) { + + print("Get. The. Fuck. Out\n"); + print("[i] Usage : ./lecture.pl cookie.db url_in url_out filename_img\n"); + + exit; +} + +my $cookie_name; +my $cookie_val; +my $img; +my $result; + +($cookie_name, $cookie_val) = extract_cookie($ARGV[0]); + +$img = send_request($cookie_name, $cookie_val, $ARGV[1]); + +write_into_file($img, $ARGV[3]); + +extract_text($ARGV[3]); + +$result = read_text(); + +print $result; + +send_answer($cookie_name, $cookie_val, $ARGV[2], $result); + +print("Done.\n"); +