A perl script to bypass the OCR Shop XTR vvlicense validation scheme.
c421e21e1e3ad1e1c704a942563a1fcee8fa3f7a4e02ebabb0989d3873c8b188
#!/usr/bin/perl
use IO::Socket;
# ocrshopxtr_freebie.pl - VeNoMouS <venom@gen-x.co.nz>
# This code bypasses the OCR Shop XTR vvlicense.
# I was doing some ocr related stuff at work, and I didnt like how windows was limited
# in what it could do, so I googled and came across OCR Shop XTR, it even picked up order
# numbers that ifilter couldnt(oh yea adobe you so rule), then I went to look at the price $2,395.00,
# you can imagine how far my jaw dropped, anyway the licencse check is retarded
# it just binds vvlicense to port 10102 on 127.0.0.1 and sends a simple cmd seq.
#
# CLIENT -> S OCRC:0.
# SERVER -> SUCCESS:1.
# CLIENT -> F OCRC:0.
# SERVER -> 11111111111111111111111111111111 (bunch more look @ the hex below you lazy cunt)
# CLIENT -> O OCRC:0.
# SERVER -> SUCCESS:1.
# CLIENT -> I OCRC:1.
# SERVER -> SUCCESS:1.
#
# And from here it starts the ocr scan proccess cause it was successful from the licencse server.
# Anyway thnx to defy for giving me his perl socket engine (saved me writing one).
# Word up to str0ke.
sub ascii_to_hex ($)
{
(my $str = shift) =~ s/(.|\n)/sprintf("%02lx", ord $1)/eg;
return $str;
}
$| = 1;
my $server = IO::Socket::INET->new(
LocalAddr => '127.0.0.1',
LocalPort => 10102,
Reuse => 1,
Listen => 9
) or die "ws: $@ on server port 10102: $!\n";
warn "ws($$): (server) ready on port @{[$server->sockport]}\n";
while($SIG{CHLD} = 'IGNORE', my $c = $server->accept) {
my $header;
while ($header !~ /\n\n/ and sysread $c, $_, 1)
{
$_ =~ s/\r//;
$header .= $_;
my $data=ascii_to_hex($header);
if ($data =~ /53204f4352433a30/)
{
print $c "\x53\x55\x43\x43\x45\x53\x53\x3a\x31\x00";
}
if ($data =~ /46204f4352433a3000/)
{
print $c "\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x31\x30\x31\x00";
}
if ($data =~ /4f204f4352433a3000/)
{
print $c "\x53\x55\x43\x43\x45\x53\x53\x3a\x31\x00";
}
if ($data =~ /49204f4352433a3100/)
{
print $c "\x53\x55\x43\x43\x45\x53\x53\x3a\x31\x00";
}
}
}
$c->close;
undef($c);