Your IP : 216.73.217.17


Current Path : /usr/local/assp/
Upload File :
Current File : //usr/local/assp/decrypt.pl

#!/usr/local/bin/perl
# decripting
# usage
#
# /usr/local/perls/perl-5.16.3/bin/perl decrypt.pl SSLKeyFile 
# SSLKeyFile fe8f3323a76b60b6ecf934dd4d6d11b6adb181181ad8feb95e31ca69a2435cc0d2e988ac61cafa510022180cdc /var/cpanel/ssl/cpanel/asspkey.pem
# or
# /usr/local/perls/perl-5.16.3/bin/perl decrypt.pl SSLKeyFile fe8f3323a76b60b6ecf934dd4d6d11b6adb181181ad8feb95e31ca69a2435cc0d2e988ac61cafa510022180cdc 

use strict;
use Net::POP3;
use Net::SMTP;
use IO::Socket;
use Time::Local;
use re 'eval';

STDOUT->autoflush;
STDERR->autoflush;
our $VERSION = $1 if('$Id: assp_pop3.pl,v 1.13 2013/09/12 09:30:00 TE Exp $' =~ /,v ([\d.]+) /);

##############################################################################
# set the next values to 1 if you want to test your POP3 collection externaly
# or use the command line option  -nofork -debug
our $preventFORK = 0;
our $debug = 0;
##############################################################################

our %Config;

our $decriptthis = $ARGV[0];
our $value = $ARGV[1];



$preventFORK = 1 if (lc $ARGV[1] =~ /nofork/i || lc $ARGV[2] =~ /nofork/i);
$debug = 1 if (lc $ARGV[1] =~ /debug/i || lc $ARGV[2] =~ /debug/i);


&loadconfig();
our $asspCfgVersion = $Config{asspCfgVersion};
$asspCfgVersion =~ s/^(\d+\.\d+\.\d+).*/$1/;

$debug = $debug || $Config{debug} || $Config{POP3debug};
print "POP3: using debug mode\n" if $debug;

my $w = 'a-zA-Z0-9_';
my $d = '0-9';
our $punyRE = 'xn--[a-zA-Z0-9\-]+';
our $EmailAdrRe=qr/[^()<>@,;:"\[\]\000-\040\x7F-\xFF]+/o;
our $EmailDomainRe=qr/(?:[$w][$w\-]*(?:\.[$w][$w\-]*)*\.(?:$punyRE|[$w][$w]+)|\[[$d][$d\.]*\.[$d]+\])/o;
our $HeaderNameRe=qr/\S[^\r\n]*/o;
our $HeaderValueRe=qr/[ \t]*[^\r\n]*(?:\r?\n[ \t]+\S[^\r\n]*)*(?:\r?\n)?/o;
our $HeaderRe=qr/(?:$HeaderNameRe:$HeaderValueRe)/o;
our %accounts;

# -- check and set the used or available encryption engine
#print "\n$Config{adminusersdbpass}";
#print "\n$Config{URIBLServiceProvider}";

#my $value ="";
if ($value == ""){
$value=$Config{$decriptthis};
}

our $usedCrypt;
our $AvailCryptGhost = ASSP::CRYPT->new('a',0,0)->ENCRYPT('a') ne ASSP::CRYPT->new('a',0,1)->ENCRYPT('a');




if ($value && $value =~ /^(?:[a-fA-F0-9]{2}){5,}$/o) {
    if ($AvailCryptGhost && defined ASSP::CRYPT->new($Config{webAdminPassword},0,1)->DECRYPT($value)) {
        $usedCrypt = 1; # can and use Crypt::GOST
	
    } elsif ($AvailCryptGhost && defined ASSP::CRYPT->new($Config{webAdminPassword},0,0)->DECRYPT($value)) {
        $usedCrypt = 0; # can but don't use Crypt::GOST
    } elsif (defined ASSP::CRYPT->new($Config{webAdminPassword},0,0)->DECRYPT($value)) {
        $usedCrypt = 0;  # can't and don't use Crypt::GOST
		
    } else {
        print "";
    }
} else {
    $usedCrypt = 1;	
}



sub loadconfig {
    open( my $confFile, '<', "/usr/local/assp/assp.cfg" ) || die "error: cannot open \"/usr/local/assp/assp.cfg\": $!";
    while (<$confFile>) {
        s/\r|\n//go;
        my ($k,$v) = split(/:=/,$_,2);
        $Config{$k} = $v;
    }
    close $confFile;
}

sub tzStr {
    my $minoffset = (Time::Local::timelocal(localtime()) - Time::Local::timelocal(gmtime()))/60;
    my $sign=$minoffset<0?-1:+1;
    $minoffset = abs($minoffset)+0.5;
    my $tzoffset = 0;
    $tzoffset = $sign * (int($minoffset/60)*100 + ($minoffset%60)) if $minoffset;
    return sprintf("%+05d", $tzoffset);
}



sub headerWrap {
  my $header=shift;
  $header=~s/(?:([^\r\n]{60,75}?;)|([^\r\n]{60,75}) ) {0,5}(?=[^\r\n]{10,})/$1$2\r\n\t/g;
  return $header;
}



package ASSP::CRYPT;
##################################
# based on GOST 28147-89  (Vipul Ved Prakash, 1997)
#
# GOST 28147-89 is a 64-bit symmetric block cipher
# with a 256-bit key developed in the former Soviet Union .
#
# redesigned and improved by Thomas Eckardt (2009,2013)
##################################

use strict qw(vars subs);

sub new {
    my ($argument,$pass,$bin,$enh) = @_;
	my $class = ref ($argument) || $argument;
	my $self = {};
    use bytes;
    {
        local $SIG{__WARN__} = sub {1};
        $self->{useXS} = (defined($enh) ? $enh : ($main::usedCrypt > 0)) && $pass && eval('use Crypt::GOST();1;');
    }
    $self->{KEY} = [];
	$self->{SBOX} = [];
	$self->{BIN} = $bin;
    if ($self->{useXS}) {
        $pass .= $pass x int(32 / length($pass) + 1);
        $pass = substr($pass , 0, 32);
        $self->{useXS} = Crypt::GOST->new($pass);
    }
    $self->{PASS} = $pass;
    if (! $self->{useXS} && $pass) {
        _generate_sbox($self,$pass);
        _generate_keys($self,$pass);
    }
    bless $self, $class;
    return $self;
}

sub _generate_sbox {
	my $self = shift;
	my $passphrase = shift;
	if (ref ($passphrase)) {
		@{$self->{SBOX}} = @$passphrase;
	} else {
		my ($i, $x, $y, $random, @tmp) = 0;
		my @temp = (0..15);
		for ($i=0; $i <= (length $passphrase); $i+=4)
		    { $random = $random ^ (unpack 'L', pack 'a4', substr ($passphrase, $i, $i+4)) };
		srand $random;
		for ($i=0; $i < 8; $i++) {
            @tmp = @temp;
            map { $x = _rand (15); $y = $tmp[$x]; $tmp[$x] = $tmp[$_]; $tmp[$_] = $y; } (0..15);
            map {$self->{SBOX}->[$i][$_] = $tmp[$_] } (0..15);
		}
	}
}

sub _generate_keys {
	my ($self, $passphrase) = @_;
	if (ref ($passphrase)) {
		@{$self->{KEY}} = @$passphrase;
	} else {
		my ($i, $random) = 0;
		for ($i=0; $i <= (length $passphrase); $i+=4)
		    { $random = $random ^ (unpack 'L', pack 'a4', substr ($passphrase, $i, $i+4))};
		srand $random; map { $self->{KEY}[$_] = _rand (2**32) } (0..7);
	}
}

sub _crypt {
	my ($self, $data, $decrypt, $bin) = @_;
    return $data unless $self->{PASS};
	$bin = $bin || $self->{BIN};
    my $l;
    my $check;
    my $cl = $bin ? 3 : 6;
    my $ll = $bin ? 2 : 4;
    if ($decrypt) {
        $check = substr($data,length($data)-$cl,$cl);
        $data = substr($data,0,length($data)-$cl);
        $l = int(hex(_IH(substr($data,length($data)-$ll,$ll),$bin)));
        $data = substr($data,0,length($data)-$ll);
	    $data = _HI($data,! $bin);
	} else {
        $check = _XOR_SYSV($data,$bin);
        $l = length($data);
        my $s = $l % 8;
        $l = _HI(sprintf("%04x",($l % 65536)),$bin);
        $data .= "\x5A" x (8-$s) if $s;
	}
	my ($d1, $d2) = (0,0);
	my $return = '';
    if ($self->{useXS}) {
        for (unpack('(a8)*',$data)) {
            $return .= ($decrypt) ? $self->{useXS}->decrypt($_) : $self->{useXS}->encrypt($_);
        }
    } else {
        my @j =
    		map { $decrypt ? (($_ >  7) ? (31 - $_) % 8 : ($_ % 8))
                           : (($_ > 23) ? (31 - $_)     : ($_ % 8));
    		} (0..31);
        for (unpack('(a8)*',$data)) {
            ($d1,$d2) = unpack 'L2';
            map { ($_ % 2) ? ($d1 ^= _substitute ($self, ($d2 + $self->{KEY}[$j[$_]])))
                           : ($d2 ^= _substitute ($self, ($d1 + $self->{KEY}[$j[$_]])));
    		} (0..31);
    		$return .= pack 'L2', $d2, $d1;
    	}
	}
    return _IH($return,! $bin).$l.$check unless ($decrypt);
    $l += int(length($return)/65536) * 65536 if (length($return) > 65535);
    $return = substr($return,0,$l);
    return if _XOR_SYSV($return,$bin) ne $check;
    return $return;
}

sub ENCRYPT    {_crypt(shift,shift,0,0);}

sub DECRYPT    {_crypt(shift,shift,1,0);}

sub ENCRYPTHEX {_crypt(shift,shift,0,1);}

sub DECRYPTHEX {_crypt(shift,shift,1,1);}

sub _substitute {
	my ($self, $d) = @_;
	my $return = 0;
	map {$return |= $self->{SBOX}->[$_][$d >> ($_ << 2) & 15] << ($_ << 2)} reverse (0..7);
    return $return << 11 | $return >> 21;
}

sub _rand {
	return int (((shift) / 100) * ((rand) * 100));
}

sub _XOR_SYSV {
    my ($d,$bin) = @_;
    my $xor = 0x03 ^ 0x0d;
    map { $xor ^= ord($_); } split(//o, $d);
    return _HI(sprintf ("%02x", $xor),$bin) . _HI(sprintf("%04x",unpack("%32W*",$d) % 65535),$bin);
}

sub _SYSV {
    my $d = shift;
    my $checksum = 0;
    foreach (split(//o,$d)) { $checksum += unpack("%16C*", $_) }
    $checksum %= 65535;
    return $checksum;
}

sub _IH {
	my ($s,$do) = @_;
    return $s unless $do;
    return join('',unpack 'H*',$s);
}

sub _HI {
	my ($h,$do) = @_;
    return $h unless $do;
    return pack 'H*',$h;
}
#1;

our $usedCrypt;
our $AvailCryptGhost = ASSP::CRYPT->new('a',0,0)->ENCRYPT('a') ne ASSP::CRYPT->new('a',0,1)->ENCRYPT('a');




if ($value && $value =~ /^(?:[a-fA-F0-9]{2}){5,}$/o) {

    if ($AvailCryptGhost && defined ASSP::CRYPT->new($Config{webAdminPassword},0,1)->DECRYPT($value)) {
        $usedCrypt = 1; # can and use Crypt::GOST
		
    } elsif ($AvailCryptGhost && defined ASSP::CRYPT->new($Config{webAdminPassword},0,0)->DECRYPT($value)) {
        $usedCrypt = 0; # can but don't use Crypt::GOST
    } elsif (defined ASSP::CRYPT->new($Config{webAdminPassword},0,0)->DECRYPT($Config{adminusersdbpass})) {
        $usedCrypt = 0;  # can't and don't use Crypt::GOST
		
    } else {
        
    }
} else {
    $usedCrypt = 1;
}


my $popcfg = $value;
my $enc = ASSP::CRYPT->new($Config{webAdminPassword},0);
$popcfg = $enc->DECRYPT($popcfg);
print "$decriptthis $value $popcfg\n";