攻防世界bad_python

embedded/2025/1/27 3:23:01/

文件名pyre.cpython-36.pyc,说明是在python3.6环境下编译的,要把pyc反编译成py

但是显示失败了,结合题的名字文件的应该是文件头部被破坏

把第一行改为33 0D 0D 0A 0C 63 4A 63 61 02 00 00 E3 00 00 00

之后就能反编译了,得到源码如下

python"># uncompyle6 version 3.8.0
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)]
# Embedded file name: pyre.py
# Compiled at: 2022-10-15 15:36:44
# Size of source mod 2**32: 609 bytes
from ctypes import *
from Crypto.Util.number import bytes_to_long
from Crypto.Util.number import long_to_bytesdef encrypt(v, k):v0 = c_uint32(v[0])v1 = c_uint32(v[1])sum1 = c_uint32(0)delta = 195935983for i in range(32):v0.value += (v1.value << 4 ^ v1.value >> 7) + v1.value ^ sum1.value + k[(sum1.value & 3)]sum1.value += deltav1.value += (v0.value << 4 ^ v0.value >> 7) + v0.value ^ sum1.value + k[(sum1.value >> 9 & 3)]return (v0.value, v1.value)if __name__ == '__main__':flag = input('please input your flag:')k = [255, 187, 51, 68]if len(flag) != 32:print('wrong!')exit(-1)a = []for i in range(0, 32, 8):v1 = bytes_to_long(bytes(flag[i:i + 4], 'ascii'))v2 = bytes_to_long(bytes(flag[i + 4:i + 8], 'ascii'))a += encrypt([v1, v2], k)enc = [4006073346, 2582197823, 2235293281, 558171287, 2425328816, 1715140098, 986348143, 1948615354]for i in range(8):if enc[i] != a[i]:print('wrong!')exit(-1)print('flag is flag{%s}' % flag)
# okay decompiling d:\pyre.cpython-36.pyc

由此得到解密代码:

python">#include<stdio.h>
#define  u_int unsigned int
int main()
{u_int enc[] = { 4006073346, 2582197823, 2235293281, 558171287,2425328816, 1715140098, 986348143, 1948615354 };u_int k[] = { 255, 187, 51, 68 };for (int i = 0; i < 8; i += 2){u_int delta = 195935983;u_int s1 = delta * 32;for (int j = 0; j < 32; j++){enc[i + 1] -= (enc[i] << 4 ^ enc[i] >> 7) + enc[i] ^ s1 + k[s1 >> 9 & 3];s1 -= delta;enc[i] -= (enc[i + 1] << 4 ^ enc[i + 1] >> 7) + enc[i + 1] ^ s1 + k[s1 & 3];}}char flag[32] = { 0 };for (int i = 0; i < 8; i++){flag[4 * i] = enc[i] >> 24;flag[4 * i + 1] = (enc[i] >> 16) ^ 0xFF000000;flag[4 * i + 2] = (enc[i] >> 8) ^ 0xFF000000;flag[4 * i + 3] = enc[i] ^ 0xFF000000;}for (int i = 0; i < 32; i++){printf("%c", flag[i]);}
}

得到:flag{Th1s_1s_A_Easy_Pyth0n__R3veRse_0}


http://www.ppmy.cn/embedded/157265.html

相关文章

数据结构初阶之队列的介绍与队列的实现

一、概念与结构 概念&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO (First In First Out) 的特点。 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为…

第19章 走进 xUnit:测试驱动开发的关键工具(续)

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…

对神经网络基础的理解

目录 一、《python神经网络编程》 二、一些粗浅的认识 1&#xff09; 神经网络也是一种拟合 2&#xff09;神经网络不是真的大脑 3&#xff09;网络构建需要反复迭代 三、数字图像识别的实现思路 1&#xff09;建立一个神经网络类 2&#xff09;权重更新的具体实现 3&am…

【力扣Hot 100】矩阵2

旋转图像&#xff1a;观察旋转前后矩阵&#xff0c;发现点 i, j的变化规律&#xff0c;即每4个点会一同交换位置。遍历起始点。 搜索二维矩阵&#xff1a;按行二分法 3. 旋转图像 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原…

【脚本】如何禁用谷歌浏览器自动更新

这里写自定义目录标题 问题描述解决方法代码 问题描述 最近更新系统以后&#xff0c;发现chrome老是自己更新&#xff0c;导致我的代码也得跟着他更新&#xff0c;就跟一个拜托不掉的狗皮膏药一样。 解决方法 于是我写了一个脚本&#xff0c;以下代码都是bash代码&#xff0…

【python】subprocess.Popen执行adb shell指令进入linux系统后连续使用指令,出现cmd窗口阻塞问题

问题描述 subprocess.Popen执行adb shell指令进入linux系统后出现cmd窗口阻塞问题&#xff0c;需要手动关闭cmd才会继续执行其他指令。 解决方案 1、cmd指令后面加入exit\n关闭exe进程 2、subprocess.Popen()添加内置参数creationflagssubprocess.CREATE_NO_WINDOW隐藏窗口弹…

机器学习和深度学习的概念

Machine Learning 机器学习&#xff0c;可以看作是找一个函数。 这个函数是人类找不到的&#xff0c;所以交给机器来找。 Different types of Functions **Regression&#xff1a;**函数的输出是一个数值 for example&#xff1a; **Classification&#xff1a;**给出选项&…

AUTOSAR从入门到精通-汽车SOA架构

目录 前言 几个高频面试题目 SOA架构如何提升车载系统的灵活性 1. 模块化设计,实现功能解耦 2. 支持动态服务组合 3. 简化系统升级和维护 4. 支持跨平台兼容性 5. 提升用户体验 算法原理 SOA架构的起源 SOA架构的发展历程 什么是SOA架构? SOA架构的特点 SOA 设…