Skip to content

Latest commit

 

History

History

homepage

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

homepage:misc:100pts

Hmm wasnt the homepage logo rainbow before? I wonder how it works...
https://downunderctf.com
Hint
01101000 01100001 01110110 01100101 00100000 01111001 01101111 01110101 00100000 01100011 01101111 01101110 01110011 01101001 01100100 01100101 01110010 01100101 01100100 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00111111

Solution

トップページが問題のようだ。
DownUnderCTF
site1.png
マウスオーバーによってロゴの色が変わる。
site2.png
ソースを見るとsplash.jsなるファイルがあった。
中に以下のような記述がある。

~~~
    function reset(elem) {
        return function() {
            elem.style.fill = "";
        }
    }
    const lol = "00101000000010000010111101100001101001011101000101101110100001100011111101101010" +
        "1010001111000111101000110010000001000000010010001000011111011101001111101001110111101010" +
        "0110011110010111100011011110001010000010001100110110000101011001110101010001011101001001" +
        "0110000011011110001010110011001011111001110010011101100011110000110111111001000011010101" +
        "0100000000101000111110101000111001111100111000010001000100110";


    document.querySelectorAll("#logo circle").forEach(function (c, k) {
        c.addEventListener("mouseover", function (e) {
            e.target.style.fill = lol[k] === "0" ? "#005248" : "#C3FCF1";
        })
    });
~~~

そのままASCIIには変換できないようだ。
というのも、ロゴの点はこのビット順に着色されているが、cxとxyで座標が指定されている。
以下のdot.pyで座標順にビットを並び替える。
ファイルlogo.txtにはhtmlのロゴ部分を抜き出して記述した。

import re
from operator import itemgetter

lol = "00101000000010000010111101100001101001011101000101101110100001100011111101101010"\
"1010001111000111101000110010000001000000010010001000011111011101001111101001110111101010"\
"0110011110010111100011011110001010000010001100110110000101011001110101010001011101001001"\
"0110000011011110001010110011001011111001110010011101100011110000110111111001000011010101"\
"0100000000101000111110101000111001111100111000010001000100110"

html =  open("logo.txt").readlines()

#print(len(lol))
#print(len(html))

text = list()

for i in range(len(html)):
	s = re.search("cx=\"(?P<cx>[0-9]*?)\" cy=\"(?P<cy>[0-9]*?)\" fill", html[i])
	text.append((int(s.group("cx")), int(s.group("cy")), lol[i]))

text_x_y = sorted(text, key=itemgetter(0, 1))
text_y_x = sorted(text, key=itemgetter(1, 0))

for i in text_x_y:
	print(i[2],end="")
print()

for i in text_y_x:
	print(i[2],end="")
print()

x優先、y優先どちらも出力している。
実行する。

$ ls
dot.py  logo.txt
$ python dot.py
011101000110100001100101001000000110011001101100011000010110011100100000011010010111001100100000010001000101010101000011010101000100011001111011011010010101111101110100011101010111001001101110001100110110010001011111011011010111100101110011010001010011000101100110010111110110100101101110010101000011000001011111011100110011000001101101001100110101111101100110001100010110000101100111011111010000000000000
101110111101000011001111111011111111001001100100111011010111011101111001111000011010110001011110100001101010000100110100001001000110011011101001001001011101010100000010000101011101100110111111111101000110100100011010001000100100000000100000001000011000001110101001001101000010011010111110101011110011001101100100011101100010010110010001010110001010010001110100001010010010011100010101010001011000101010111

Binary to Text TranslatorでASCIIにすると、x優先のビットが以下になった。

the flag is DUCTF{i_turn3d_mysE1f_inT0_s0m3_f1ag}

DUCTF{i_turn3d_mysE1f_inT0_s0m3_f1ag}