看phrack的时候,作者的代码有时不是以plain text的格式粘贴出来,有时使用了base64的编码,有时使用的uuencode格式的编码。
要识别base64还是uuencode编码可以看文件的第一行,如果明确了base64的话,那么就是base64编码,否则很有可能就是uuencode。
于是写了一个小脚本用来把base64/uuencode转换成tar.gz(大多数情况下都是这种格式)的。
使用方法:
将文件粘贴到记事本中保存之。然后运行脚本。
如果是UUEncode的编码, 则begin和end也要保存。
然后运行
perl decode.pl -s source.txt -d dest.txt -c base64
perl decode.pl -s a.txt -c UU
===========================================================================================
decode.pl
===========================================================================================
#!/usr/bin/perl -w use strict; use warnings; use MIME::Base64; use Convert::UU qw(uudecode); use Getopt::Long; my $srcfile; my $dstfile; my $help; my $encode; GetOptions( 'h|help' => \$help, 's=s' => \$srcfile, 'd=s' => \$dstfile, 'c=s' => \$encode); sub help{ print <<_EOT_; 'perl $0 -s source.txt -d dest.txt -c base64' 'perl $0 -s source.txt -c UU' only decode base64 or UU when decoding base64,you should specify the dst file name _EOT_ exit; } help() if $help; help() unless $srcfile; help() unless ($encode eq "base64") or ($encode eq "UU"); print "$srcfile doesn't exist\n" unless -e $srcfile; sub main_base64{ my ($src,$dst) = @_; my $in; my $out; my $string; my $result; help() unless $dst; open $in,$src; open $out,">",$dst; while(<$in>){ chomp; $string = $string.$_; } # if($enc eq "base64"){ $result = decode_base64($string); # }elsif($enc eq "UU"){ # $result = uudecode($string,"vlc_lulz_v0.1.tar.gz",644 ); # } print $out $result; close($in); close($out); print "Done\n"; exit; } sub main_uu{ my ($src,$dst) = @_; my $in; my $out; open $in,$src; my($string,$filename,$mode) = uudecode($in); open $out,$filename; print $out $string; close($in); close($out); print "Done\n"; exit; } main_base64($srcfile,$dstfile)if $encode eq "base64"; main_uu($srcfile,$dstfile) if $encode eq "UU";