~ K    A     L    I ~
UNAME : Linux web63.extendcp.co.uk 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64
SERVER IP : 10.0.187.63 -________- CLIENT IP : 216.73.216.210
PATH :/bin/
UP FILE :
MINI SHELL D ZAB '
Current File : //bin/zip-restore.pl
#!/usr/bin/perl -w
use strict;

my $passed_username=$ARGV[0];
my $zipfile=$ARGV[1];
my $restore_type=$ARGV[2];
my $start_dir = $ARGV[3] || "";

my $home_dir = (getpwuid($<))[7];
chdir($home_dir);

if($start_dir) {
	chdir($start_dir);
} else {
	$start_dir = $home_dir;
}

unless($zipfile) {
  warn "No zip file.";
  exit 1;
}
unless($restore_type) {
  warn "No restore type.";
  exit 2;
}
unless(-r $zipfile) {
  warn "Zip file does not exist, or is not readable.";
  exit 1;
}

# Set the file type so we can take the corect unpack action

my $file_type;
if ( $zipfile =~ m/\.zip$/) { $file_type = 1; }
elsif ( $zipfile =~ m/\.tar\.gz$/) { $file_type = 2; }
elsif ( $zipfile =~ m/\.tgz$/) { $file_type = 2; }
elsif ( $zipfile =~ m/\.tar\.Z$/) { $file_type = 2; }
elsif ( $zipfile =~ m/\.tar$/) { $file_type = 3; }
elsif ( $zipfile =~ m/\.tar\.bz2$/) { $file_type = 4; }
elsif ( $zipfile =~ m/\.tbz2$/) { $file_type = 4; }
else {
  warn "Zip file does not have standard suffix; cannot determine unpack process.";
  exit 1;
}

# Get a file list from the zip file.

my %zip_contents;

###### .zip files
if ($file_type == 1 ) {
	open ZIPLIST, "-|","unzip","-l",$zipfile or die $!;
	while(<ZIPLIST>) {
        chomp;
        my @parts=split(/\s+/,$_,5);
        if($parts[4] and $parts[2]=~/^[[:digit:]]/ and $parts[4]=~m#^[^\.][^/]+/
?$#) {
			$zip_contents{$parts[4]}=1;
        }
	}
	close ZIPLIST;
}
##### .tar.gz; .tgz; .tar.Z files
elsif ($file_type == 2 ) {
	open ZIPLIST, "-|","/bin/tar","tzf",$zipfile or die $!;
	while(<ZIPLIST>) {
        chomp;
        if($_ =~ m#^[^\.][^/]+/ ?$#) {
			$zip_contents{$_}=1;
        }
	}
	close ZIPLIST;
}
##### .tar files
elsif ($file_type == 3 ) {
	open ZIPLIST, "-|","/bin/tar","tf",$zipfile or die $!;
	while(<ZIPLIST>) {
        chomp;
        if($_ =~ m#^[^\.][^/]+/ ?$#) {
			$zip_contents{$_}=1;
        }
	}
	close ZIPLIST;
}
##### .tar,bz2; .tbz2  files
elsif ($file_type == 4 ) {
	open ZIPLIST, "-|","/bin/tar","tjf",$zipfile or die $!;
	while(<ZIPLIST>) {
        chomp;
        if($_ =~ m#^[^\.][^/]+/ ?$#) {
			$zip_contents{$_}=1;
        }
	}
	close ZIPLIST;
}

my @unsafe_dirs=qw/logs/;

opendir DIR, "." or die $!;
my @safe_dirs;
my @safe_dirs_d;
foreach my $dname (readdir DIR) {
        next if $dname=~m/^\./;
        if(not grep {$dname eq $_} @unsafe_dirs) {
                if($zip_contents{$dname} or $zip_contents{"$dname/"}) {
                        push @safe_dirs, $dname;
                } else {
                        push @safe_dirs_d, $dname;
                }
        }
}
closedir DIR;

if($restore_type eq "missing") {
        restore_missing($file_type);
} elsif($restore_type eq "temp") {
        restore_temp($file_type);
} elsif($restore_type eq "delete") {
        delete_and_restore($file_type);
}

sub restore_missing {
		my $file_type = shift;
		if ($file_type == 1) {
			system("unzip","-n",$zipfile);
		} elsif ($file_type == 2) {
			system("/bin/tar","xzf",$zipfile);
		} elsif ($file_type == 3) {
			system("/bin/tar","xf",$zipfile);
		} elsif ($file_type == 4) {
			system("/bin/tar","xjf",$zipfile);
		}
}
sub restore_temp {
		my $file_type = shift;
        my @more_args=@_;
        use File::Temp;
        my $temp_dir=mkdtemp("zip.XXXXXX");
		if ($file_type == 1) {
			system("unzip",@more_args,"-d",$temp_dir,$zipfile);
		} elsif ($file_type == 2) {
			 chdir($temp_dir);
		     system("/bin/tar","xzf","$start_dir/$zipfile");
			 chdir($start_dir);
		} elsif ($file_type == 3) {
			 chdir($temp_dir);
		     system("/bin/tar","xf","$start_dir/$zipfile");
			 chdir($start_dir);
		} elsif ($file_type == 4) {
			 chdir($temp_dir);
		     system("/bin/tar","xjf","$start_dir/$zipfile");
			 chdir($start_dir);
		}
		return $temp_dir;
}

sub delete_and_restore {
		my $file_type = shift;
        print "Performing full delete and restore.\n";
        my $temp_dir=restore_temp($file_type, "-q");
        my $delete_dir=mkdtemp("delete.XXXXXX");
        foreach my $dname (@safe_dirs) {
                rename($dname,"$delete_dir/$dname");
                rename("$temp_dir/$dname",$dname);
        }
        foreach my $dname (keys %zip_contents) {
                rename("$temp_dir/$dname",$dname);
        }
        foreach my $dname (@safe_dirs_d) {
                rename($dname,"$delete_dir/$dname");
        }

        rmdir $temp_dir;
        system("/bin/chmod","-R","+wx",$delete_dir);
        system("/bin/chmod","-R","+wx",$temp_dir);
        system("/bin/rm","-rf",$delete_dir);
        system("/bin/rm","-rf",$temp_dir);
        print "Completed.\n";
}
Coded by KALI :v Greetz to DR HARD ../ kali.zbi@hotmail.com