czwartek, 20 września 2012

Pytanie rekrutacyjne - ciekawy pomysł

Ostatnio natrafiłem na ofertę pracy dla sys admin-a z ciekawym zapisem. W treści ogłoszenia było zadanie zapisane w base64:

Mile widziane
  - aHR0cDovL3d3dy5leGFtcGxlLnBsL2l3YW5hY29va2llCg==
Zapis zmieniony w stosunku do ogłoszenia.

Po odkodowaniu tego za pomocą base64:

echo aHR0cDovL3d3dy5leGFtcGxlLnBsL2l3YW5hY29va2llCg==  |  base64 -d

Otrzymałem:
   http://www.example.pl/iwanacookie


Za pomocą curl-a:

 curl -v  -s http://www.example.pl/iwanacookie

Otrzymałem nagłówki:

 HTTP/1.1 302 Found
 Date: Thu, 20 Sep 2012 11:26:54 GMT
 Server: Apache
 Set-Cookie: question=YmVnaW4gNjQ0IHRlc3QKTTBFSUguMyUhNjI5MzY3T1k7PVQhMDRRX19fQS1gIU8iMzcwJjVKRCYpJUZcIiVOKiMqNzBTPF0pNVU8UApNYC9QImBdRkkoYCI0Q0BgYGBgYGBgVGBgIzBgI1UjMCxAXElCIUgjMkhgIjhgYDMhLGBgJDo+QSxgRjNgCk1gYCImOmAvXVBgYDAoYGAkKjlYQihgQihAYCIoSCpgXEFJRiYsUydUMUpJPkk7UF1UTzQsMFlcXEgwMCYKTTkhPlNBI1JYVS1RWVRWJE5AVEA4VV1QMEArJ01WTDhMWCRZJVZcKl9eUUEyWDknSytRLiFVXkReLFEpLwpNLFlCNCRQKTtUV0tEMEUuUlBfMyI0RjYsK1VgXUZbMyNDMz5RTzJASFpJTyJDTEJbUDBgYDAoYGAkLydECio3PEQ0WDQpIVteNlc9YGBgCmAKZW5kCg==; Expires=Tue, 01 Jan 2013 00:00:00 GMT
Content-Length: 203
Content-Type: text/html; charset=iso-8859-1
Z tego wyciągnąłem cookie i ponownie puściłem przez base64:

echo "[base64 z question]" | base64 -d
 W wyniku otrzymałem:
 begin 644 test
M0EIH.3%!629367OY;=T!04Q___A-`!O"370&5JD&)%F\"%N*#*70S<])5U
M`/P"`]FI(`"4C@```````T``#0`#U#0,@\IB!H#2H`"8``3!,``$:>A,`F3`
M``"&:`/]P``0(``$*9XB(`B(@`"(H*`\AIF&,S'T1JI>I;P]TO4,0Y\\H00&
M9!>SA#RXU-QYTV$N@T@8U]P0@+'MVL8LX$Y%V\*_^QA2X9'K+Q.!U^D^,Q)/
M,YB4$P);TWKD0E.RP_3"4F6,+U`]F[3#C3>QO2@HZIO"CLB[P0``0(``$/'D
*7`
end
Czyli plik "uuencoded":

echo "[base64 z question]" | base64 -d  |  uudecode

W wyniku otrzymałem plik binary "test" o długości 235 znaków.

file test
# test: bzip2 compressed data, block size = 900k
Dalej:
bzip2 -d -c test >test.1
file test.1
# test.1: gzip compressed data, from Unix, max compression
Pliczek wynikowy miał 11 MB. Niezła kompresja (235 -> 11MB).
I ostatecznie:
 gzip -d -c test.1
Dało w wyniku:
(let* (
    (x  '( (1 2 (3 4 5) 6)  7  8  (9 10) ) )
  )
  ; use car/caaa..r/cd..r here to get 4 from x, append solution to your job application
)
Czyli kod w Lisp.

Co do działania tego kodu to:

http://stackoverflow.com/questions/12510086/lisp-code-how-to-run-this-example

Odpowiedzi:

(car (cdr (car (cdr (cdr (car x))))))

(let* ((x '((1 2 (3 4 5) 6) 7 8 (9 10))))
   (cadr (caddar x)))
Podsumowując. Super zadanie :)

Brak komentarzy: