2020年天山固网杯-misc-2
环境
- OS:Arch Linux
解题思路
首先查看文件,发现里面是python的字节码,应该是个加密函数。看样子我们需要根据这些字节码来推出加密函数再倒推解密函数。
In [1]: import dis
In [2]: dis.dis(encrypt)
4 0 LOAD_CONST 1 ('')
2 STORE_FAST 1 (O0O)
5 4 LOAD_FAST 0 (oO0)
6 LOAD_ATTR 0 (upper)
8 CALL_FUNCTION 0
10 STORE_FAST 2 (o0O)
6 12 LOAD_FAST 2 (o0O)
14 LOAD_CONST 0 (None)
16 LOAD_CONST 0 (None)
18 LOAD_CONST 3 (-1)
20 BUILD_SLICE 3
22 BINARY_SUBSCR
24 STORE_FAST 2 (o0O)
7 26 SETUP_LOOP 60 (to 88)
28 LOAD_GLOBAL 1 (range)
30 LOAD_GLOBAL 2 (len)
32 LOAD_FAST 2 (o0O)
34 CALL_FUNCTION 1
36 CALL_FUNCTION 1
38 GET_ITER
>> 40 FOR_ITER 44 (to 86)
42 STORE_FAST 3 (O0)
8 44 LOAD_GLOBAL 3 (ord)
46 LOAD_FAST 2 (o0O)
48 LOAD_FAST 3 (O0)
50 BINARY_SUBSCR
52 CALL_FUNCTION 1
54 LOAD_FAST 3 (O0)
56 BINARY_ADD
58 LOAD_GLOBAL 2 (len)
60 LOAD_FAST 2 (o0O)
62 CALL_FUNCTION 1
64 LOAD_FAST 3 (O0)
66 BINARY_SUBTRACT
68 BINARY_XOR
70 STORE_FAST 4 (OO)
9 72 LOAD_FAST 1 (O0O)
74 LOAD_GLOBAL 4 (chr)
76 LOAD_FAST 4 (OO)
78 CALL_FUNCTION 1
80 INPLACE_ADD
82 STORE_FAST 1 (O0O)
84 JUMP_ABSOLUTE 40
>> 86 POP_BLOCK
10 >> 88 LOAD_FAST 1 (O0O)
90 RETURN_VALUE
#result:[cgjegl_&]!VW&KS_GVXHWI_EVCVDXGc^mgrj
这道题没有什么脑洞,耐心死磕这些字节码就行了。这里我给一个网站,对照网站就能明白这些字节码的意思了
https://docs.python.org/2/library/dis.html#opcode-BINARY_SUBSCR
这里是我推出来的加密方法以及倒推出来的解密方法
=========== encrypt ===========
def encrypt(oO0):
O0O = ''
o0O = oO0.upper()
o0O = o0O[None:None:-1]
for O0 in range(len(o0O)):
OO = (ord(o0O[O0])+O0) ^ (len(o0O)-O0)
O0O = O0O+chr(OO)
return O0O
=========== decrypt ===========
def test(O0O):
d = ""
for O0 in range(len(O0O)):
a = ord(O0O[O0])
c = a ^ (len(O0O)-O0)
OO = c-O0
res = chr(OO)
d = d+res
d = d[::-1]
print(d.lower())
if __name__ == "__main__":
test("[cgjegl_&]!VW&KS_GVXHWI_EVCVDXGc^mgrj")
不出意外的话,你会得到flag了,然后你就可以快活的嘿嘿嘿了(>v<)
如果此篇文章有帮到你,请留个言吧。
do,一个从事着word工程师工作的计算机专业菜鸡卑微的请求着。QAQ
如果文中有什么不对或者不清楚的地方,欢迎指正。
留下评论