#!/usr/bin/perl -w # encode_text.pl - Don Yang (uguu.org) # # 07/04/07 use strict; # Initialize data my $text = join '', ; $text =~ s/\s//g; print "orig\n$text\n"; # Test xor keys for(my $xor = 1; $xor < 127; $xor++) { my @encoded_char = map { chr($_ ^ $xor) } unpack 'C*', $text; # Check if xor key is acceptable my $accept = 1; foreach my $char (@encoded_char) { if( ord($char) < 33 || # Reject control characters ord($char) >= 127 || # Reject extended characters $char eq '"' || # Reject non-quote friendly characters $char eq '\\' ) { $accept = 0; last; } } # Check if encoded string contains trigraphs/digraphs my $encoded_str = join '', @encoded_char; if( index($encoded_str, '??') >= 0 || index($encoded_str, '<:') >= 0 || index($encoded_str, ':>') >= 0 || index($encoded_str, '<%') >= 0 || index($encoded_str, '%>') >= 0 || index($encoded_str, '%:') >= 0 || index($encoded_str, '%:%:') >= 0 ) { $accept = 0; } if( $accept ) { print "\n$xor\n$encoded_str\n"; } } __DATA__ " }, n[1<<16], t[1<<16], y, *u, *i, *a; int l, _; #include int main() { a = n; y = 5; for(u = c[5]; *u; u++) if( *u - 32 ) { for(i = c[*u - 98]; *i; i++) if( *i - 32 ) *a++ = *i ^ y; y ^= 5; } _ = l; u = n; a = t; i = c[2 //**/ 2 ]; for(; *i; i++) { if( (l = *i) > 93 ) { l = (l - 94) * 4 + 2; for(_ = 6; _--; *a++ = ((l /= 2) & 1) ? (y ^= (*u - 34) ? 0 : 1) ? *u++ : *u++ : 32); } if( l > 66 ) for(l -= 66; l--; *a++ = *u++) y ^= *u - 34 ? 0 : 1; if( l > 34 ) for(l -= 34; l--; *a++ = 32); if( l == 33 ) { if( y ) { *--a = 92; a++; u--; } *a++ = 10; } } *a = 0; return puts(t); }