quarta-feira, 18 de abril de 2007

O processo de inscrição

Ao contrário do que muita gente pensa, a inscrição para poder participar da Arena não foi uma tarefa muito complicada. Curiosidade e um senso investigativo apurado já seriam suficientes para garantir uma vaga, como de fato foi. Das 40 vagas inicialmente alocadas, todas foram preenchidas (confira a ordem de inscrição dos participantes), mas apenas 29 inscritos se apresentaram na Arena no primeiro dia, o que me leva a crer que muitos (ok, talvez não muitos... mas pelo menos alguns...) dos 11 que conseguiram resolver o desafio da inscrição e se ausentaram, não eram programadores.

Voltando ao processo em si: no dia 31/03 a organização do FISL divulgou no endereço da Arena que as inscrições estavam abertas. Nenhuma outra informação foi divulgada até o dia 04/04, quando a primeira dica foi revelada. A partir de então, uma nova dica foi adicionada diariamente e chegamos em 11/04 com o seguinte conjunto:

  • 2007-04-04: Dica 1: "O processo de inscrição começa aqui..."
  • 2007-04-05: Dica 2: "Existe um código embutido nesta página HTML..."
  • 2007-04-06: Dica 3: "As salas do fisl importam..."
  • 2007-04-07: Dica 4: "O CMS usado no site do fisl importa..."
  • 2007-04-08: Dica 5: "Se você já sabe o que faz o código embutido e porque as salas do fisl importam então você já sabe o caminho..."
  • 2007-04-09: Dica 6: "A inicial do nome von Neumann é a letra "V"..."
  • 2007-04-10: Dica 7: "A URL desta página importa ..."
  • 2007-04-11: Dica fisl8.0: "As informações finais (último passo) para você conseguir fazer a inscrição estão em Português."

A primeira dica já dizia algo óbvio para quem participou de desafios semelhantes, como o fantástico Python Challenge: algo oculto na página daria uma pista da próxima coisa a ser feita.

A segunda dica confirmou a primeira: no fonte HTML da página haviam dois trechos codificados, no primeiro um código JavaScript e logo abaixo as cinco dicas iniciais. Ambos os trechos estavam cifrados com o famigerado ROT13 e três das cinco dicas ainda não haviam sido liberadas. O próprio trecho JavaScript era uma implementação do algoritmo ROT13 cifrado em ROT13. Isso já havia sido mencionado anteriormente pelo Hélio Castro. Durante o evento, a organização confirmou que as dicas haviam sido deixadas propositalmente no código HTML. O fato é que desde o dia 04/04 as cinco primeiras dicas já seriam conhecidas por quem decodificasse o fonte em ROT13, mas isso não resolvia o mistério.

A terceira dica foi fundamental para decifrar a charada. O fato das "salas importarem" e que logo abaixo tínhamos um link para a página com o nome dos homenageados das salas era muito suspeito. No referido link havia mais uma dica escondida no fonte HTML, antecedendo o nome das salas:

the names! THE NAMES! What are important in them?
Did you clicked on the url up above?
Get the important words and their first letters.
And hack the url, baby. Hack. 

Era uma dica direta: bastava clicar na URL acima (que remetia para a grade de programação, com as salas em uma determinada ordem) e para o nome de cada sala, na ordem apresentada, pegar a primeira letra, ou seja: bbtcdcvhh. Além disso, seria preciso hackear a URL do site (confirmado pela quarta dica). Era uma pista para juntar o fato de que o ROT13 havia sido mencionado com o fato de termos algo onde aplicá-lo. A quinta dica confirmou isso. Dessa forma, obtemos: oogpqpiuu e acessando http://fisl.softwarelivre.org/8.0/www/?q=pt-BR/oogpqpiuu é exibido as instruções para efetivar a inscrição.

Neste ponto aconteceu algo interessante: a grande maioria dos que tentaram resolver a charada estavam usando a letra N para a sala de John von Neumann, o que faz um grande sentido, afinal em português costumamos ignorar as preposições "da/de/dos" quando usamos as iniciais de nomes próprios. Porém, quem tivesse prestado atenção na grade de programação saberia que a organização deu o nome de "von Neumann" para a sala. Assim, a letra correta passa a ser o V. Isso foi enfatizado mais tarde pela sexta dica, que não estava inicialmente prevista, mas foi necessária em função do grande número de pessoas que estavam acessando a URL com o N no lugar do V, segundo a organização.

Outra dúvida recorrente foi: em qual URL deveria ser tentado o acesso? Afinal, as URLs do site e da grade de programação eram diferentes e havia ainda a possibilidade de que existissem outras URLs. A sétima dica veio para acabar com esse dilema, afirmando que a URL do site era a importante.

Uma observação importante a respeito da quarta dica, que era ambígua: ela falava sobre o Drupal, o CMS do site. Mas afinal, o que a respeito do CMS? Num primeiro momento ficou parecendo que se tratava da URL do site, onde deveria ser aplicado as iniciais com os nomes das salas. Porém, durante o período de julgamento das soluções para os problemas do segundo e terceiro dias, enquanto os finalistas aguardavam numa sala, um dos competidores comentou que o Drupal armazena internamente todos os conteúdos de forma sequencial e que ele havia baixado todos os items do site com um script, mas em função da grande quantidade de conteúdo, após uma rápida conferida, ele não havia encontrado nada de interessante. Então, enquanto eu estava escrevendo esse relato, fiz o seguinte script Python:

from urllib import urlopen
url = 'http://fisl.softwarelivre.org/8.0/www/?q=node/%s'
for n in xrange(1000):
    if 'Parab' in urlopen(url % n).read():
        print n

Surpreendentemente, entre as primeiras 1000 páginas do site, a única que possui a string 'Parab' (de 'Parabéns', que é o título da página com as instruções de inscrição) é a de número 192, então quem acessasse http://fisl.softwarelivre.org/8.0/www/?q=node/192 teria encontrado a URL para se inscrever. De qualquer forma, o mistério envolvia mesmo a questão de pegar as iniciais de cada sala e aplicar o ROT13, afinal mesmo que alguém tivesse entrado naquela página por acaso, ainda seria necessário informar ao menos 5 passos para chegar até aquele ponto.

0 comentários: