#!/usr/bin/perl # xor3.pl - Don Yang (uguu.org) # # Test XOR encode with repeative 3 character pattern. # # 12/23/07 use strict; my $code = q{ $l = 23 - 2 * ($a = sin(($n = (time() % 100) / 50) * atan2(0, -1))); $p = 10.5 + $a; $q = 6.5 - $a; if( $n < 1 ) { $s = 56 - 33 * $n; $x = 2 * $n - 1; $t = 11 + $x * $x * 7; } else { $s = 23 + 33 * ($n - 1); $t = 18; } for($y = 0; $y < 24; $y++) { $v = ($y - $t) / ($y < $t ? $p : $q); for($x = 0; $x < 79; $x++) { $u = ($x - $s) / $l; $n = $x - int($s); $z .= chr ( $y == int($t + $q) && abs($x - $s) < 10 ? 33 : ( $u * $u + $v * $v > 1 || ($y > $t - 5 - 2 * $a && $y <= $t - 2 - 2 * $a && !($n + 6 && $n && $n + 5 && $n - 1)) ? 32 : 33 ) ); } $z .= "\n"; } $n = ($z =~ y/!/x/); $c = '$c=q{' . $c . '#'x($n - length($c) - 26) . '};$c=~s/\s//g;eval$c;'; $y = 0; foreach $x ($z =~ /./gs) { print 'x' eq $x ? substr($c, $y++, 1) : $x; } }; $code =~ s/\s//g; ($code eq lc($code)) or die; my $size = length($code); print "code =\n$code\nsize = $size\n"; ($size % 3) == 0 or die; for(my $i = 1; $i < 256; $i++) { for(my $j = 1; $j < 256; $j++) { for(my $k = 1; $k < 256; $k++) { my $x = $code ^ ((chr($i) . chr($j) . chr($k)) x ($size / 3)); my $c = 0; for(; $c < $size; $c++) { my $a = ord(substr($x, $c, 1)); if( $a <= 32 || $a >= 127 ) { last; } } if( $c == $size ) { printf '0x%02x 0x%02x 0x%02x', $i, $j, $k; print "\n$x\n"; } } } }