Python字节码基础

  1. 下载相关文件并打开,其中为 Python 字节码。
  2. 字节码格式为

    源码行号 | 指令在函数中的偏移 | 指令符号 | 指令参数 | 实际参数值
  3. 根据上述字节码格式以及文件内容开始手搓源码

    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)
  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-

随机推荐

  1. Java 常用类 String的常用方法(2)

    1 /** 2 * String 常用方法(2) 3 * boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 4 * boolean startsWith ...

  2. element_ui实现表格内套表单,点击可以编辑

    <template> <div class="app-container"> <el-table :data="list" str ...

  3. P8+架构师养成计划

    一.P8+要求 1.收集能力要求 1.专业能力 技术架构.业务架构.做到无中生有. 2.基石能力 沟通协调能力.团队管理能力.逻辑能力.风险控制能力. 3.影响力 团队内部影响.外部影响.行业影响力. ...

  4. jQuery 框架

    jQuery 框架 目录 jQuery 框架 一. 概述 二. jQuery 安装引用 2.1 安装 2.2 本地导入使用 2.3 jQuery CDN引入 三. jQuery基本语法 四. 查找标签 ...

  5. EL1008E: Property or field 'timestamp' cannot be found on object of type 'java.util.HashMap' - maybe not public-请求springboot-后台报错

    一.问题由来 自己在使用node.js写的前端项目访问springBoot访问的后端项目的时候,springboot项目中报这个错,抛出这个异常. 详细的错误信息如下: Servlet.service ...

  6. form 表单提交 保存的时候再提交文件,之前一直是选择文件就传了,这个也比较好

    form 表单提交 保存的时候再提交文件,之前一直是选择文件就传了,这个也比较好 代码 <Upload :action="action" :max-size="ma ...

  7. 掌握 Kubernetes 故障排除技巧:kubectl命令的基本指南

    Kubernetes 彻底改变了容器编排,简化了应用程序的管理和扩展.然而,与任何复杂系统一样,Kubernetes 集群也会遇到问题,需要及时解决才能保持最佳性能和可靠性.在本文中,我们将深入探讨必 ...

  8. 访问Webapp目录下面的html文件变为代码

    一.问题由来 一位朋友在学习使用Servlet做练习的时候,突然出现一个问题,他去访问自己创建的html文件时,发现返回的数据是html代码,而不是解析后的页面. 很是疑惑,自己尝试着解决这个问题,很 ...

  9. 移植openssh-7.5p1(包括openssl-1.0.2l、zlib-1.2.11)到HISI3520d(部署篇)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  10. Ubuntu如何进救援模式

    linux的救援模式-1 详解在 Ubuntu 中引导到救援模式或紧急模式 这篇教程将介绍如何在 Ubuntu 22.04.20.04 和 18.04 LTS 版本中引导到 救援Rescue 模式或 ...