- 下载相关文件并打开,其中为 Python 字节码。
- 字节码格式为
源码行号 | 指令在函数中的偏移 | 指令符号 | 指令参数 | 实际参数值 - 根据上述字节码格式以及文件内容开始手搓源码
1.
LOAD_CONST:载入常量
STORE_NAME:根据名称存入指定变量
翻译成源码为keys1 = "welcome_to_qsnctf_u_will_have_a_good_time!"
2.
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.
翻译成源码为flag=""
4.
SETUP_LOOP:开启循环
CALL_FUNCTION:启用函数
GET_ITER:获取参数
FOR_ITER:迭代参数
翻译成源码为for i in range(0, len(keys1)):
5.
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.
LOAD_NAME:根据名称载入指定变量
PRINT_ITEM:输出参数
PRINT_NEWLINE:输出换行
RETURN_VALUE:返回指定值
翻译成源码为print(flag)
- 根据上述过程总结源码如下:
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)
- 执行该程序,输出结果即是 flag
-End-
标签:keys1,翻译成,pycode,flag,keys2,qsnctfwp,源码,84,dis From: https://www.cnblogs.com/SRIGT/p/17501106.html