Ez_pycode_dis qsnctfwp

Python字节码基础

  1. 下载相关文件并打开,其中为 Python 字节码。
  2. 字节码格式为
    源码行号 | 指令在函数中的偏移 | 指令符号 | 指令参数 | 实际参数值
  3. 根据上述字节码格式以及文件内容开始手搓源码
    1.
    image
    LOAD_CONST:载入常量
    STORE_NAME:根据名称存入指定变量
    翻译成源码为keys1 = "welcome_to_qsnctf_u_will_have_a_good_time!"
    2.
    image
    BUILD_LIST:创建列表
    翻译成源码为keys2 = [6, 22, 2, 0, 27, 11, 30, 109, 76, 86, 106, 92, 17, 15, 6, 76, 94, 102, 23, 105, 70, 68, 84, 85, 104, 12, 89, 79, 82, 62, 4, 108, 3, 66, 91, 84, 59, 18, 93, 9, 3, 92]
    3.
    image
    翻译成源码为flag=""
    4.
    image
    SETUP_LOOP:开启循环
    CALL_FUNCTION:启用函数
    GET_ITER:获取参数
    FOR_ITER:迭代参数
    翻译成源码为for i in range(0, len(keys1)):
    5.
    image
    BINARY_SUBSCR:设置下标
    BINARY_XOR:异或运算
    INPLACE_ADD:加法赋值,+=运算
    JUMP_ABSOLUTE:回到循环起点
    POP_BLOCK:弹出循环块
    翻译成源码为flag += chr(ord(keys1[i]) ^ keys2[i] ^ keys2[i] ^ keys2[i] ^ keys2[i] ^ keys2[i])
    6.
    image
    LOAD_NAME:根据名称载入指定变量
    PRINT_ITEM:输出参数
    PRINT_NEWLINE:输出换行
    RETURN_VALUE:返回指定值
    翻译成源码为print(flag)
  4. 根据上述过程总结源码如下:
keys1 = "welcome_to_qsnctf_u_will_have_a_good_time!"
keys2 = [6, 22, 2, 0, 27, 11, 30, 109, 76, 86, 106, 92, 17, 15, 6, 76, 94, 102, 23, 105, 70, 68, 84, 85, 104, 12, 89, 79, 82, 62, 4, 108, 3, 66, 91, 84, 59, 18, 93, 9, 3, 92]
flag = ""
for i in range(0, len(keys1)):
    flag += chr(ord(keys1[i]) ^ keys2[i] ^ keys2[i] ^ keys2[i] ^ keys2[i] ^ keys2[i])
print(flag)
  1. 执行该程序,输出结果即是 flag

-End-

posted @ 2023-06-24 14:39  SRIGT  阅读(22)  评论(0编辑  收藏  举报