Noisecode

From Noisebridge
Jump to navigation Jump to search
Oldcomputer.png
Note: This page is for historic purposes only. It does not apply to modern Noisebridge. | Edit

Noisecode is a bot in #noisebridge which knows all about python. Fun things to ask it to do:

noisecode: eval __import__('urllib2').urlopen('http://www.slashdot.org/').info()['Server']
noisecode: eval self.ircobj.connections[0].get_nickname()
noisecode: eval file('/etc/passwd').readlines()
noisecode: eval __import__('smtplib').SMTP('172.30.0.3').sendmail('noisecodebot@gmail.com', 'noisebridge-discuss@lists.noisebridge.net', 'Noisecode online.')
noisecode: eval self.say_public('hi')
noisecode: eval reduce(lambda (say,s),i,w=110: [say, [[w>>(s[i-1]*4+s[i]*2+s[(i+1)%len(s)])&1 for i in range(len(s))], say("".join(c and "*" or " " for c in s)), __import__('time').sleep(1)][0]], range(25), [self.say_public, [0] * 70 + [ 1, 0]] ) and "ok 25 is enough"
noisecode: eval (lambda c,self=self: map(lambda m,self=self: self.say_public(m) or __import__("time").sleep(1) or c, __import__("re").compile("\w{2,}(?:\w+ ){1,5}(?:is)(?:\w+){1,5}\w{3,}",__import__("re").I).findall(__import__("urllib2").urlopen(__import__("urllib2").Request("http://www.google.com/search?q=%s" % c,headers={"User-agent":"Mozilla/5.0"})).read())[:5]))(__import__("random").choice(self.channels['#noisebridge'].users()))[0]

Noisec is another bot in #noisebridge which knows all about C. Fun things to ask it to do:

noisec: eval char * p; int i; p=&main; for(i=0;i<20;i++) { printf("%.02hhX ", p[i]);
noisec: eval char*f="eval char*f=%c%s%c;printf(f,34,f,34,10);%c";printf(f,34,f,34,10);
noisec: eval int i; __asm("movl $0xdeadbeef, %0": "m"(i)); printf("i=0x%x", i);

Noisesql is yet another bot in #noisebridge which knows all about MySQL. It's used so often that it also responds to anything prefixed with ".sql". It has a database of dong urls (dongs), a database of gong urls (gongs), and a database with a copy of the 2009 California legislature's output and the state codes (capublic). Fun things to ask it to do:

noisesql: eval SELECT REPLACE(@prog := 'SELECT REPLACE(@prog := \'lolz\', CONCAT(\'lo\', \'lz\'), REPLACE(REPLACE(@prog, \'\\\\\', \'\\\\\\\\\'), \'\\\'\', \'\\\\\\\'\'));', CONCAT('lo', 'lz'), REPLACE(REPLACE(@prog, '\\', '\\\\'), '\'', '\\\''));
noisesql: eval select cos(0)
noisesql: eval select aes_encrypt('hocus', 'pocus')
.sql select * from gongs order by rand() limit 1

Noiseelisp is, you guessed it, yet again another bot in #noisebridge which knows all about emacs lisp. Fun things to ask it to do:

noiseelisp: (message "1+1=%d" (+ 1 1))

Noisejs is yet another bot in #noisebridge which knows all about javascript. Fun things to ask it to do:

noisejs: eval function f(x) { if(x>2) { return x*f(x-1); } else { return x; } };  print(f(5));

There used to be a bot that looked for certain keywords and would respond with "appropriate" images, but it was kicked and the group arguing for the bot didn't exercise their do-ocratic rights and reinstate it.

Things people have tried to break the bots so far:

  • Flooding. The bots are ratelimited and rejoin if they are kicked by the server.
  • Multiline output, like "Hello, world\nquit\n". The bots only reply with the first line of the output.
  • Infinite loops. The bots use setrlimit and watchdog threads to cap the maximum amount of execution time per eval request.
  • Modifying noisecode's internal objects using setattr/getattr.
  • Calling eval() in noisecode via InteractiveConsole and InteractiveInterpreter.
  • feta called sleep() in noisesql to hang it:
< feta> .sql select sleep(999999999)
  • davr called sleep(), but with more snazz:
< davr> .sql set @s=concat('select sle','ep(99999)');prepare stmt1 from @s; execute stmt1;
  • feta called benchmark and md5 to hang it:
< feta> .sql select benchmark(99999999999999,md5(1))