Exemplo n.º 1
0
    def do_compute(self):
        # step 1, get information from web source
        bell_url = TextHelper.find_text_between_tag(self.web_source,
                                                    '<a href="', '">')
        bell_url = WebHelper.join_url(self.url, bell_url)
        print "Find some url: %s" % bell_url
        zigzag_jpg = TextHelper.find_text_between_tag(self.web_source,
                                                      '<img src="', '"> <!--')
        zigzag_jpg = WebHelper.join_url(self.url, zigzag_jpg)
        print "Find a picture: %s" % zigzag_jpg
        gif_prompt = TextHelper.find_text_between_tag(self.web_source,
                                                      'did you say ', '? -->')
        gif_url = WebHelper.change_suffix_url(zigzag_jpg, gif_prompt)
        print "Get a gif picture: %s" % gif_url

        # step 2, deal with gif
        img = ImageHelper.create_image_from_web(gif_url, self.user,
                                                self.password)
        img_content = img.tobytes()
        img_plt = img.palette.getdata()[1][::3]
        trans = string.maketrans("".join([chr(i) for i in range(256)]),
                                 img_plt)
        img_tran = img_content.translate(trans)
        diff = ["", ""]
        img = Image.new("1", img.size, 0)
        for i in range(1, len(img_content)):
            if img_content[i] != img_tran[i - 1]:
                diff[0] += img_content[i]
                diff[1] += img_tran[i - 1]
                img.putpixel(((i - 1) % img.size[0], (i - 1) / img.size[0]), 1)
        img.show(
        )  # two words shows in picture: 'not', 'word', between is an key
        text = bz2.decompress(diff[0])
        auth = set()
        for i in text.split():
            if not keyword.iskeyword(i):
                auth.add(i)
        # print repeat, switch, ../ring/bell
        auth = list(auth)
        print auth
        for item in auth:
            if 'html' in item:
                next_level_url = WebHelper.join_url(self.url, item)
                auth.remove(item)
        try:
            content_ignore = WebHelper.get_auth_web_source(
                next_level_url, auth[0], auth[1])
            self.result.set_user_password(auth[0], auth[1])
            print "Set next level user, password = (%s, %s)" % (auth[0],
                                                                auth[1])
        except HTTPError:
            self.result.set_user_password(auth[1], auth[0])
            print "Set next level user, password = (%s, %s)" % (auth[1],
                                                                auth[0])

        # step 3, set next level url
        self.set_next_level_url(next_level_url)
Exemplo n.º 2
0
    def do_compute(self):
        # step 1, get prompt information from web source
        print TextHelper.find_text_between_tag(self.web_source, '<!-- ', '-->')
        wav_suffix = 'wav'
        print "Above prompt words ask us to replace the suffix of jpg to %s" % wav_suffix
        wave_img_url = WebHelper.join_url(
            self.url,
            TextHelper.find_text_between_tag(self.web_source, '<img src="',
                                             '">'))
        print "wave image web url is %s" % wave_img_url
        ImageHelper.show_image_from_web(
            WebHelper.join_url(self.url, wave_img_url), self.user,
            self.password)
        print "This picture prompt us: there is 25 block, we need to combine them"

        # step 2, download waves
        wave_url = WebHelper.change_suffix_url(wave_img_url, wav_suffix)
        print "After change suffix: %s" % wave_url
        local_directory = 't25'
        FileHelper.mkdir(local_directory)
        waves = []
        for i in range(25):
            store_path = FileHelper.join_path(local_directory,
                                              WebHelper.get_url_page(wave_url))
            WebHelper.download_with_auth(wave_url, store_path, self.user,
                                         self.password)
            waves.append(wave.open(store_path))
            wave_url = WebHelper.url_add(wave_url)

        # step 3, Create combine image from waves
        img = Image.new('RGB', (300, 300), 'black')
        frames = waves[0].getnframes()
        print "Totally waves: %d" % len(waves)
        for i in range(len(waves)):
            tmp_img = Image.frombytes('RGB', (60, 60),
                                      waves[i].readframes(frames))
            current_pos = (60 * (i % 5), 60 * (i // 5))
            print "Put image to position%s" % str(current_pos)
            img.paste(tmp_img, current_pos)
        img.show()  # It shows a words 'decent'

        # step 4, set prompt words
        prompt_word = 'decent'
        print "Get prompt words from combined picture: %s" % prompt_word
        self.set_prompt(prompt_word)

        # step 5, clean unused file
        FileHelper.remove_folder(local_directory)
Exemplo n.º 3
0
    def do_compute(self):
        # step 1. get prompt information
        prompt_img_url = TextHelper.find_text_between_tag(self.web_source, "<img src=\"", "\"><br>")
        img_url = T12.evil_add_url(WebHelper.join_url(self.url, prompt_img_url))
        print "get new image url: " + img_url
        url_ignore, img_data = WebHelper.get_auth_url_content(img_url)
        img = Image.open(StringIO(img_data))
        img.show()  # shows: we should use suffix .gfx not .jpg

        # step 2. get gfx file
        gfx_url = WebHelper.change_suffix_url(img_url, ".gfx")
        url_ignore, gfx_data = WebHelper.get_auth_url_content(gfx_url)

        # step 3. play data cards
        T12.play_cards(gfx_data)  # There were five picture shows : 'dis', 'pro', 'port', 'ional', 'ity' (strikeout)

        # step 3. set prompt for next level
        self.set_prompt('disproportional')
Exemplo n.º 4
0
    def do_compute(self):
        # step 1. Get hint from page source
        hint = TextHelper.find_text_between_tag(self.web_source,
                                                "<html> <!-- <-- ",
                                                " -->\n<head>")
        zip_url = WebHelper.change_suffix_url(self.url, hint)

        # step 2. Download zip to local and extract
        tmp_zip = zip_url[zip_url.rindex("/") + 1:]
        tmp_folder = tmp_zip[:tmp_zip.index(".")]
        WebHelper.download(zip_url, tmp_zip)
        zip_ref = zipfile.ZipFile(tmp_zip, 'r')
        zip_ref.extractall(tmp_folder)
        zip_ref.close()

        # step 3. Get next hint
        readme_txt = open(tmp_folder + "/readme.txt", 'r').read()
        start_txt = TextHelper.find_text_between_tag(readme_txt,
                                                     "hint1: start from ",
                                                     "\n")
        next_hint = T6.read_traverse(start_txt)
        print next_hint  # Hint: Collect the comments.

        # step 4. Get comments
        print T6.collect_comments(
            tmp_zip, start_txt)  # Comments: HOCKEY  (Small letter oxygen)

        # step 5. Wrong way
        wrong_url = WebHelper.join_url(self.url, "hockey")
        print WebHelper.get_web_source(
            wrong_url)  # it's in the air. look at the letters.

        # step 6. Get next url hint
        self.set_prompt(WebHelper.join_url(self.url, "oxygen"))

        # step 7. Clean folder
        FileHelper.remove_folder(tmp_folder)
        FileHelper.remove_file(tmp_zip)
Exemplo n.º 5
0
    def do_compute(self):
        # step 1. get information from web source
        print TextHelper.find_text_between_tag(self.web_source, '<!--\n',
                                               '\n-->')
        beer_url = TextHelper.find_text_between_tag(self.web_source,
                                                    '<img src="',
                                                    '" border="0"')
        beer_url = WebHelper.join_url(self.url, beer_url)
        print beer_url
        beer_url = WebHelper.url_add(beer_url)
        beer_url = WebHelper.change_suffix_url(beer_url, 'png')

        # step 2. try out this picture
        beer_img = ImageHelper.create_image_from_web(beer_url, self.user,
                                                     self.password)
        data = list(beer_img.getdata())
        local_dir = 'img_data'
        FileHelper.mkdir(local_dir)
        print len(data)
        count = 0
        while len(data) > 0:
            if self.is_int_sqrt(len(data)) and len(data) > 0:
                count += 1
                size = int(math.sqrt(len(data)))
                print "data length = %i, sqrt value = %i" % (len(data), size)
                new_img = Image.new('RGB', (size, size))
                new_img.putdata(data)
                new_img.save(os.path.join(local_dir, 'img_%i.png' % count))
            max_value = max(data)
            data = [x for x in data if x != max_value]

        # step 3, Get hint from these pictures
        print "check png under %s, you will find many characters!" % local_dir
        prompt = 'gremlins'
        print "but only characters %s are in square" % str(list(prompt))
        self.set_prompt(prompt)
        FileHelper.remove_folder(local_dir)
Exemplo n.º 6
0
    def do_compute(self):
        # step 1, get information from web source
        question = TextHelper.find_text_between_tag(self.web_source, '<title>',
                                                    '</title>')
        print "The title asked us: %s" % question
        answer = ("kohsamui", "thailand")
        self.result.set_user_password(answer[0], answer[1])
        print "Set next level user, password = (%s, %s)" % answer
        print "Search google by this photograph, you can find the place: %s, %s" % answer
        prompt = TextHelper.find_text_between_tag(self.web_source, '<a href="',
                                                  '"><img src')
        new_url = WebHelper.join_url(self.url, prompt)
        print "Get prompt jpg url: %s" % new_url
        new_web_content = WebHelper.get_auth_web_source2(new_url, answer)
        print TextHelper.find_text_between_tag(new_web_content,
                                               '<font color="gold">',
                                               '</font>')
        mandelbrot_gif = TextHelper.find_text_between_tag(
            new_web_content, '<img src="', '" border="0">')
        mandelbrot_gif = WebHelper.join_url(new_url, mandelbrot_gif)
        print "Get new gif picture: %s" % mandelbrot_gif
        print TextHelper.find_text_between_tag(new_web_content,
                                               'border="0">\n', '\n	</img>')

        # step 2, parse mandelbrot gif
        left, top, width, height, iteration = 0.34, 0.57, 0.036, 0.027, 128
        img = ImageHelper.create_image_from_web(mandelbrot_gif, answer[0],
                                                answer[1])
        print "Get image size: %s, %s" % img.size
        w, h = img.size
        x_step, y_step = width / w, height / h
        result = []
        for y in range(h - 1, -1, -1):
            for x in range(w):
                c = complex(left + x * x_step, top + y * y_step)
                z = 0 + 0j
                for i in range(iteration):
                    z = z * z + c
                    if abs(z) > 2:
                        break
                result.append(i)
        new_img = img.copy()
        new_img.putdata(result)
        new_img.show()

        # step 3, show diff about these two picture
        diff = [(a - b) for a, b in zip(img.getdata(), new_img.getdata())
                if a != b]
        print len(diff)
        print set(diff)

        plot = Image.new('L', (23, 73))
        plot.putdata([(i < 16) and 255 or 0 for i in diff])
        plot.resize((230, 730)).show()
        prompt = 'arecibo'
        print "Oh, God dammit! Who knows this is a message humanity send to the starts from %s telescope" % prompt

        # step 4, set next challenge url
        next_level_url = WebHelper.join_url(mandelbrot_gif, prompt)
        next_level_url = WebHelper.change_suffix_url(next_level_url, 'html')
        self.set_next_level_url(next_level_url)