PuttyWeb: bending the truth

Inspiration:

Using an idea started with this website: Upside-Down-Ternet

And mentioned by XKCD:

http://imgs.xkcd.com/comics/1337_part_1.png

 Reamweaver, software created in collaboration with Amy Alexander:

http://reamweaver.com/reamweaver_samples/cnncompare.jpg 

About: 

I have created my own proxy software to subvert the web and promote hacktivism.

Grab the free source code here:

Download Now

Try it out:

Download a pre-configured web browser to view the code in action:

 Windows: Click Here

OS-X: Click Here

How?

1. Squid Cache: Runs the url redirection script to manipulate links

2. Apache HTTP Server: Serves the manipulated content.

3. Ruby with GChart gem: Helps create random charts

4. Python with flickrfs: Search flickr by tag for interesting photos 

5. Perl: Squid redirections script calls other code on the fly

6. Bash script: Set up cron jobs and run code periodically 

README:

1. You need the squid proxy server. Set squid's user as apache if using the apache web server.

httpd.conf:

User apache
Group apache
squid.conf:
# OPTIONS FOR URL REWRITING
# -----------------------------------------------------------------------------

url_rewrite_program /class/putty.pl

#  TAG: cache_effective_user
#       If you start Squid as root, it will change its effective/real
#       UID/GID to the user specified below.  The default is to change
#       to UID of squid.
#       see also; cache_effective_group
#
#Default:
cache_effective_user apache

2. You need ruby installed with the gcharts gem.

bash_script:

while true; do random_chart.rb; sleep 3; done

random_chart.rb:

# To change this template, choose Tools | Templates
# and open the template in the editor.

require 'googlecharts'
require 'gchart'
#require 'gtk2'
require 'uri'
require 'rubygems'
require 'open-uri'
require 'fileutils'
require 'net/http'

if ARGV[0] == nil
  ARGV[0] = 'Obama'
  #exit
end

options = ["Communists","Socialists","Democrats","Republicans","World Bank","Treasury",
  "Facists","United Nations","NATO","Haitians","New England","Africa","Libertarian Party",
  "Nationalists","Labour Party","Muslisms","Health Care","Lobbyist","Christians","Your Mama","Warhawks","Military
  Industrial Complex","CNN","FOX News","Faux News","MSNBC","Bernanke","The Fed","Tea Party","Conspiracy Theorists","Pro-lifers","Abortionists"
  ]

  aopts = Array.new(4)

  aopts[0] = options[rand(options.size-1)]
  aopts[1] = options[rand(options.size-1)]
  aopts[2] = options[rand(options.size-1)]
  aopts[3] = options[rand(options.size-1)]

  aopts = aopts.uniq

def unique_ar(options)

  aopts = Array.new(4)

  aopts[0] = options[rand(options.size-1)]
  aopts[1] = options[rand(options.size-1)]
  aopts[2] = options[rand(options.size-1)]
  aopts[3] = options[rand(options.size-1)]

  aopts = aopts.uniq

end

if (aopts.size != 4)
  unique_ar(options)
end

#puts aopts

first = 100 - (rand(60) + 3) #subtract 3-62 -> 97-38
second = 100 - first - (rand(30) + 4)
second = second.abs
third = 100 - first - second - (rand(10) + 4)
third = third.abs
forth = 100 - (first+second+third)
forth = forth.abs
fifth = 100 - (rand(50) + 1)

#puts first
#puts second
#puts third
#puts forth
#puts fifth

random = rand(6)

if (random == 0)
#  puts "Zero"
  url = Gchart.meter(
    :title => 'Who loves ' + ARGV[0]+ '?',
    :size=> '400x200',
    :data => [first,second,third,forth],
    :labels=> [aopts[0],aopts[1],aopts[2],aopts[3]])
end

if (random == 1)
#  puts "One"
  url = Gchart.bar(
    :title => 'Who loves ' + ARGV[0]+ '?',
    :size=> '400x200',
    :data => [first,second,third,forth],
    :labels=> [aopts[0],aopts[1],aopts[2],aopts[3]])
end

if (random == 2)
#  puts "Two"
  url = Gchart.venn(
    :title => 'Who loves ' + ARGV[0]+ '?',
    :size=> '400x200',
    :data => [first,second,third,forth,fifth],
    :labels=> [aopts[0],aopts[1],aopts[2]])
end

if (random == 3)
# puts "Three"
  url = Gchart.pie_3d(
    :title => 'Who loves ' + ARGV[0]+ '?',
    :size=> '400x200',
    :data => [first,second,third,forth],
    :labels=> [aopts[0],aopts[1],aopts[2],aopts[3]])
end

if (random == 4)
#  puts "Four"
  url = Gchart.pie(
    :title => 'Who loves ' + ARGV[0]+ '?',
    :size=> '400x200',
    :data => [first,second,third,forth],
    :labels=> [aopts[0],aopts[1],aopts[2],aopts[3]])
end

if (random == 5)
#  puts "Five"
  url = Gchart.line(
    :title => ARGV[0]+"'s Approval Rating",
    :size=> '400x200',
    :data => [first,second,third,forth],
    :labels=> ["Monthly Rating"],
    :encoding=> "text")
end

#url.to_url
#url.fetch
#url.write("/images/chart.png")
#url.write(stream)

#puts url

#system("wget " +""" + url +""" + "-.png")
system("wget " +""" + url +""" + ".png -O chart.png")


#Gtk.init
#clipboard = Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD)
#clipboard.set_text(url)
#clipboard.store

#uri = URI.parse(url)
#uri.path
#h = Net::HTTP.new(uri.hosts, uri.port)
#data = h.get(uri.path,nil)
#f = File.open("chart.png","w+")
#f << data
#f.close()

3. You need python installed to access flickr photos.

4. For (3) you need the fuse library installed.

Gallery

 

 

 

 

 

 

Etomite Rocks!
Vacation2005-092.jpg