eigenclass.org "Happy 2007!" Ruby mini-contest started
- 2007-01-06 20:39 UTC: the contest has been running for 40 minutes and nobody has cracked the script yet.
- 2007-01-07 00:52 UTC: 6 people have cracked the script so far (out of >120 who downloaded it)
- 2007-01-07 10:27 UTC: 160 participants, still only 6 people managed to decode the message. If you crack it, you can claim that your Ruby is stronger/you are more patient than 96% of the people.
- 2007-01-07 15:51 UTC: 8/182, 4.2% completion rate
- 2007-01-08 00:53 UTC: 9/206, at least ~120 people have had the code for over 24H now...
- 2007-01-08 20:03 UTC: 11/266, down to 4.1% :)
- 2007-01-09 23:50 UTC: 13/324, 4.0%
- 2007-01-11 00:04 UTC: 14/344, 4.1%.
- 2007-01-13 10:15 UTC: 14/456, 3.1%.
Your mission, should you choose to accept it, is to find the secret message hidden in that Ruby script, follow the instructions to generate the code that will prove you've found the message, and claim your chance to win a (very) modest prize at http://eigenclass.org/rubychallenge2007/YOURCODE . The completion times will be recorded and Kernel#rand will also pick a few lucky winners.
Here's what people had to say about a similar puzzle I made last year:
Wow, I'm really impressed. That was a tough (and fun) puzzle. -- Kevin Ballard
Thanks Mauricio, you made my day! -- olivier
My head hurts. Took me nearly two hours -- aniero
Anything from a few minutes (say 10-20 minutes if you're having a good day and aren't easily scared off by tricky Ruby code) to several hours. Many will give up before, though :-) I cannot really know, but I can say I've spent quite some time making this fairly tricky...
There's a different script for each supported Ruby version; get the one corresponding to your ruby executable or you won't be able to run it at all, let alone crack it.
(scripts not available before 2007-01-06 20H UTC)
- happy2007-eigenclass.org-1.8.5.rb for Ruby 1.8.5 (tested on -p12 too)
- happy2007-eigenclass.org-1.8.4.rb for Ruby 1.8.4 and 1.8.3
- happy2007-eigenclass.org-1.8.2.rb for Ruby 1.8.2
You have to make sure that no other files (e.g. RubyGems) are loaded when you execute the script, so you might have to unset RUBYOPT. Don't rename the file, and make sure you are running it from the directory it resides in. This should work if you're using Ruby 1.8.5:
$ RUBYOPT="" ruby happy2007-eigenclass.org-1.8.5.rb
It will decode itself while it prints a few random strings for a few seconds, and then a real-time AA animation will start. If you see the animation, it will mean the script works as intended.
If you did something wrong, the program will print one or more error messages and exit without the animation being shown. This means that your attempt to crack it wasn't successful.
All of these will fail:
$ ruby foo/happy2007-eigenclass.org-1.8.5.rb (wrong dir) $ ruby182 happy2007-eigenclass.org-1.8.5.rb (wrong version) $ ruby foo.rb (wrong name) $ ruby -rubygems happy2007-eigenclass.org-1.8.5.rb (RubyGems loaded) (can also happen if your RUBYOPT is set)
Go to http://eigenclass.org/rubychallenge2007/YOURCODE so the server records when you finished. I hope you liked the puzzle; you can leave your feedback below.
Here's the current hall of fame (all times are UTC):
2007-01-06 20:53 Stefan Walk 2007-01-06 22:30 Evan Weaver 2007-01-06 22:31 Kevin Ballard 2007-01-06 22:42 Pit Capitain 2007-01-06 23:00 Jamis Buck 2007-01-07 00:02 Dominik Bathon 2007-01-07 12:17 rubikitch 2007-01-07 14:53 Matthias Lederhofer 2007-01-07 21:50 John Aughey 2007-01-08 03:35 Peter Vanbroekhoven 2007-01-08 14:40 dseverin 2007-01-09 02:47 Mathew Abonyi 2007-01-09 07:44 Martin Traverso 2007-01-10 01:43 Anthony Ramahay 2007-01-14 16:29 Tim Lossen 2007-01-18 17:58 Haruki Kodera 2007-01-27 19:11 Marcus Blunzenauer 2007-02-08 13:33 Joseph Riesen 2007-02-14 12:36 Yusuke ENDOH
Please don't publish hints/the solution, so as to avoid spoiling the fun for others, thank you!
Check the release time in your timezone here. That's all I'll do for this contest, as I am not expecting to crack it any time soon ...
Good luck everyone!
Thank you, I'm giving that link some more visibility by putting it at the top.
Great challenge Mauricio! I didn't find it easy at all. Maybe I'm getting too old...
Well, it's not that easy, but it cannot stand against an experienced Rubyist for too long. And the effort is very assymmetric: it takes much longer to make than to crack, the reason being of course that after all the program does know how to decode itself. But it's still enough to discourage most people :-)
I'll try to make it harder next time ;)
It took me longer than it should have. I'll do better next time.
Is the first part of the puzzle to find the code that contains the puzzle?
The first part is waiting until the script is made available on Sat. 2007-01-06 20H UTC.
Okay, i completed it... but i kind of cheated. I think :) I hope the "All means are allowed" from http://eigenclass.org/hiki.rb?crackme+ruby+pastime is still valid. Anyway, great challenge ... and that animation is really great, btw :)
Wow, I just beat it a hair behind you.
That was really tough.
I'm also curious as to what you are referring to when saying "All means are allowed", because I'm pretty sure I didn't do anything that could be disallowed to find this code.
Ah, I see I was beaten. Stefan, I'm pretty sure I used your same way. I don't count it as cheating though. It's more like calling your mom on the phone.
Well, i already completed it at about 20:55 utc ... and to say what i did would be a how-to for those who didn't complete it yet, so i'm afraid i can't tell :)
I started late, and spent most of the time getting Ruby 1.8.5 installed. So....
I'm full of excuses.
I am pleased to see that Jamis is on the leader board, and that Rails Core spends energy on more than just Rails and contracting for new media startups.
You're definitely not cynical or anything, though. I can tell. ;)
That was a very interesting little challenge. I love the animation. Nice one!
$ hash -r $ hash hash: hash table empty $ type ruby1.8 ruby1.8 is /usr/bin/ruby1.8 $ dpkg -S /usr/bin/ruby1.8 ruby1.8: /usr/bin/ruby1.8 $ dpkg -l ruby1.8|tail -1 ii ruby1.8 1.8.2-7sarge5 Interpreter of object-oriented scripting lan $ ruby1.8 -v ruby 1.8.2 (2005-04-11) [i386-linux] $ RUBYOPT="" ruby1.8 happy2007-eigenclass.org-1.8.2.rb DECODING... IGNORE MESSAGES BEFORE ANIMATION (eval):2: [BUG] Segmentation fault ruby 1.8.2 (2005-04-11) [i386-linux] Aborted (core dumped) $
..or I was cracked my system itself? :-(
The puzzle does uses some uncommon tricks, so it might have exposed an old compiler-dependent bug. It works OK with a 1.8.2 executable I compiled myself (on Sid, not that it matters).
took me two sunday afternoons - but i learned quite a lot on the way! so don't give up yet.
I learned a lot, but had to use other means to get to the solution too. Had I solved it with only ruby, I would have learned a lot more. Will there be someone explaining the code?
I might write a "making of" special or an explanation in a while (maybe accessible only to those that have cracked the code?)
If you leave your address here I'll notify you if I do it.
hoped you enjoyed it
Great! Just send me an email to luniki at googlemail dot com. I never wrote more than 1000 lines of ruby before this contest, so I had a great time learning while cracking your code. In the next days I will try to get the solution without "cheating" ;-)
I completed it with only ruby, but I used a means based on "brute force attack". It's not pretty. So I look forward to read the "making of" too.
I tried to make brute force attacks more difficult by using "brute force code generation", but I was ultimately limited by the deadline...
I solved it by one line of code, you know, not in Ruby ;-) I am also looking forward to "making of". I think that the true winner is the organizer. Thank you for the nice game!
Hah! I may not be on the winner's board, but in my defense, I only found this contest a day ago. At least I'm one of the few, the proud, the less-than-3-percent. I sure tried to solve it purely with my Ruby knowhow, but your obfuscation-fu is too great, and I too had to do a little bit of brutish forcing to get to the secret. But hey, 'any means necessary' and all that. Thanks, this was a lot of fun and a pleasant distraction!
- 174 http://www.rubyist.net/~matz
- 137 http://weblog.jamisbuck.org
- 87 http://weblog.jamisbuck.org/2007/2/8/begin-else
- 70 http://www.rubyist.net/~matz/20070106.html
- 44 http://weblog.jamisbuck.org/tips-and-tricks
- 40 http://planetruby.0x42.net
- 27 http://www.adiazar.com/ruby-on-rails.html
- 25 http://www.ittutor.net/forums/index.php?showtopic=31138
- 20 http://www.los-angeles-seo.net
- 17 http://www.phrozz.com/forums/2/topics/37