add solution for nbcontest, progra, n°8

This commit is contained in:
Wilfried OLLIVIER 2015-04-16 22:07:27 +02:00
parent d672a4f41b
commit e38775674e

View file

@ -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");