Mở
bằng Winhex ta thấy magic number là 1F 8B
OK
Vậy nó là file Gzip. Sử dụng 7zip để extract file ta được
file ctf.py
Mở
file ctf.py ra đọc thì thấy cú pháp tùm lum. Có dòng quan
trọng là # -*- coding: rot13 -*-
Vậy
ta sử dụng Rot13 để lấy plain text
#!/hfe/ova/rai
clguba
#
-*- pbqvat: ebg13 -*-
import
os
import
marshal
import
new
global
flag
def
f():
global flag
flag = "Nope!".decode("ebg13")
bytecode
= """
YwAAAAAAAAAAAwAAAEAAAABzlwAAAGQAAGQBAGwAAG0BAFoBAAFkAABkAgBsAgBtAwBaAwABZQMA
ZAMAZAQAgwIAZAUAawIAcpMAZAYAYQQAdAQAZAcAN2EEAHQEAGQIADdhBAB0BABkCQA3YQQAdAQA
agUAZAoAZAQAgwIAYQQAdAQAagYAZAsAgwEAYQQAZAwAZQEAdAQAgwEAagcAgwAAF2EEAG4AAGQN
AFMoDgAAAGn/////KAEAAABzBAAAAHNoYTEoAQAAAHMGAAAAZ2V0ZW52cwsAAABOT19DT05fTkFN
RXMAAAAAcwEAAABZczEAAAAgNTcgNjggNjEgNzQgMjAgNjkgNzMgMjAgNzQgNjggNjUgMjAgNjEg
NjkgNzIgMmQgczEAAAAgNzMgNzAgNjUgNjUgNjQgMjAgNzYgNjUgNmMgNmYgNjMgNjkgNzQgNzkg
MjAgNmYgczEAAAAgNjYgMjAgNjEgNmUgMjAgNzUgNmUgNmMgNjEgNjQgNjUgNmUgMjAgNzMgNzcg
NjEgcxAAAAAgNmMgNmMgNmYgNzcgM2YgcwEAAAAgcwMAAABoZXhzAwAAAE5DTk4oCAAAAHMHAAAA
aGFzaGxpYnMEAAAAc2hhMXMCAAAAb3NzBgAAAGdldGVudnMEAAAAZmxhZ3MHAAAAcmVwbGFjZXMG
AAAAZGVjb2RlcwkAAABoZXhkaWdlc3QoAAAAACgAAAAAKAAAAABzCAAAADxzdHJpbmc+cwgAAAA8
bW9kdWxlPgIAAABzEgAAABABEAEVAgYBCgEKAQoBEgEPAQ==
"""
if
__name__ != "__main__".decode("ebg13"):
f = new.function(codeobj, globals(), "f".decode("ebg13"),
None, None)
f()
print
flag
Chỉnh
sửa lại 1 chút:
Ở bytecode ta nhận ra nó là giá trị base64 encode
Vì vậy ở codeobj ta sửa ebg13 thành base64
Ở main không quan trọng ta bỏ luôn dòng này
Ở bytecode ta nhận ra nó là giá trị base64 encode
Vì vậy ở codeobj ta sửa ebg13 thành base64
Ở main không quan trọng ta bỏ luôn dòng này
hàm
f cũng không có gì
Vậy
flag sẽ nằm ở bytecode. Bytecode được load vào codeobj
thành object
Ta
Disassemble object này ra: (import dis và sử dụng
dis.dis(codeobj)
E:\CTF\Noconname\immiscible~>ctf.py
2 0 LOAD_CONST 0 (-1)
3 LOAD_CONST 1 (('sha1',))
6 IMPORT_NAME 0 (hashlib)
9 IMPORT_FROM 1 (sha1)
12 STORE_NAME 1 (sha1)
15 POP_TOP
3 16 LOAD_CONST 0 (-1)
19 LOAD_CONST 2 (('getenv',))
22 IMPORT_NAME 2 (os)
25 IMPORT_FROM 3 (getenv)
28 STORE_NAME 3 (getenv)
31 POP_TOP
4 32 LOAD_NAME 3 (getenv)
35 LOAD_CONST 3 ('NO_CON_NAME')
38 LOAD_CONST 4 ('')
41 CALL_FUNCTION 2
44 LOAD_CONST 5 ('Y')
47 COMPARE_OP 2 (==)
50 POP_JUMP_IF_FALSE 147
6 53 LOAD_CONST 6 (' 57 68 61 74 20 69 73 20
74 68 65 20 61 69 72 2d ')
56 STORE_GLOBAL 4 (flag)
7 59 LOAD_GLOBAL 4 (flag)
62 LOAD_CONST 7 (' 73 70 65 65 64 20 76 65
6c 6f 63 69 74 79 20 6f ')
65 INPLACE_ADD
66 STORE_GLOBAL 4 (flag)
8 69 LOAD_GLOBAL 4 (flag)
72 LOAD_CONST 8 (' 66 20 61 6e 20 75 6e 6c
61 64 65 6e 20 73 77 61 ')
75 INPLACE_ADD
76 STORE_GLOBAL 4 (flag)
9 79 LOAD_GLOBAL 4 (flag)
82 LOAD_CONST 9 (' 6c 6c 6f 77 3f ')
85 INPLACE_ADD
86 STORE_GLOBAL 4 (flag)
10 89 LOAD_GLOBAL 4 (flag)
92 LOAD_ATTR 5 (replace)
95 LOAD_CONST 10 (' ')
98 LOAD_CONST 4 ('')
101 CALL_FUNCTION 2
104 STORE_GLOBAL 4 (flag)
11 107 LOAD_GLOBAL 4 (flag)
110 LOAD_ATTR 6 (decode)
113 LOAD_CONST 11 ('hex')
116 CALL_FUNCTION 1
119 STORE_GLOBAL 4 (flag)
12 122 LOAD_CONST 12 ('NCN')
125 LOAD_NAME 1 (sha1)
128 LOAD_GLOBAL 4 (flag)
131 CALL_FUNCTION 1
134 LOAD_ATTR 7 (hexdigest)
137 CALL_FUNCTION 0
140 BINARY_ADD
141 STORE_GLOBAL 4 (flag)
144 JUMP_FORWARD 0 (to 147)
>> 147 LOAD_CONST 13 (None)
150 RETURN_VALUE
None
Như
vậy flag sau khi gán và INPLACE_ADD ta có: 57 68 61 74 20 69 73
20 74 68 65 20 61 69 72 2d 73 70 65 65 64 20 76 65 6c 6f 63 69 74 79
20 6f 66 20 61 6e 20 75 6e 6c 61 64 65 6e 20 73 77 616c 6c 6f 77
3f
Tiếp theo flag sẽ được replace các kí tự trắng. Và decode hex ra.
Flag = ‘What is the air-speed velocity of an unladen swallow?’
Tiếp theo flag sẽ được replace các kí tự trắng. Và decode hex ra.
Flag = ‘What is the air-speed velocity of an unladen swallow?’
Tiếp
theo: ta có flag = ‘NCN’ + sha1(flag) =
NCN6ceeeff26e72a40b71e6029a7149ad0626fcf310
Submit
thôi :D
Phiêu
Lãng – KQCQ
Không có nhận xét nào:
Đăng nhận xét