2020年天山固网杯-misc-2

1 分钟阅读

环境

  • 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

如果文中有什么不对或者不清楚的地方,欢迎指正。

标签: ,

分类:

更新时间:

留下评论