[N0wayback 2023春节红包题] happyGame python反编译

news2024/10/7 12:24:25

这个反编译的比较深

一,从附件的图标看是python打包的exe文件,先用pyinstxtractor.py 解包

生成的文件在main.exe_extracted目录下,在这里边找到main

二,把main改名为pyc然后加上头

这个头从包里找一个带头的pyc文件(这里用的_boot文件)把E3前边的16字节插进来

三,用uncompyle6反编译,生成mai.py

N0WayBack\春节红包题\Re_rabbit_Game>uncompyle6 main.pyc > main.py 

四,打开main.py查看流程,这里需要运行114514次magic_s()每次会进行一个LCG处理

                            if self.score < 114514:
                                self.magic_s()
                            self.score += 1

LCG

    def magic_s(self):
        p = 16045690984230472446
        a = 114514
        b = 1919810
        self.magic = (a * self.magic + b) % p

 

然后会打印解密的flag

    def print_flag(self):
        key = str(self.magic)[:16]
        enc = AES.new(key.encode(), AES.MODE_ECB)
        flag = enc.decrypt(self.FLAG)
        print(flag)
        self.draw_text(flag, 22, WHITE, WIDTH / 2, HEIGHT / 2)
        self.draw_text('Happy 2023!!!!!', 22, WHITE, WIDTH / 2, HEIGHT / 2 - 40)

五,这里要对FLAG进行AES解密,key在secret里

from secret import flag

问大姥,这个自己写导入的secret都在 PYZ-00目录里,文件是经过aes加密和zlib压缩

PYZ-00.pyz_extracted

 六,用网上的脚本进行解密解压,生成secret.pyc文件

import glob
import zlib
import tinyaes
from pathlib import Path
 
CRYPT_BLOCK_SIZE = 16
 
# key obtained from pyimod00_crypto_key
key = bytes('0000000000r4bb1t', 'utf-8')
 
for p in ['secret.pyc.encrypted']: #Path("PYZ-00.pyz_extracted").glob("**/*.pyc.encrypted"):
    inf = open(p, 'rb') # encrypted file input
    outf = open('secret.py', 'wb') # output file
 
    # Initialization vector
    iv = inf.read(CRYPT_BLOCK_SIZE)
 
    cipher = tinyaes.AES(key, iv)
 
    # Decrypt and decompress
    plaintext = zlib.decompress(cipher.CTR_xcrypt_buffer(inf.read()))
 
    # Write pyc header
    # The header below is for Python 3.8
    outf.write(b'\x55\x0d\x0d\x0a\0\0\0\0\0\0\0\0\0\0\0\0')
 
    # Write decrypted data
    outf.write(plaintext)
 
    inf.close()
    outf.close()
 
    # Delete .pyc.encrypted file
    #p.unlink()

这里的aes用的key在pyimod00_crypto_key 文件里,这也是个pyc文件,可以反编译也可以直接看,拿到key

七,得到flag后对,编写代码利用原用函数解密

from Crypto.Cipher import AES 

FLAG = bytes.fromhex('17e8fb647b4b10cc8182f0f76649f08bd2d33eacb5fa4ca865d99062f8d0b4c479d7d2328081121536c26c6a4150efb5')

magic = 0
def magic_s():
    global magic 
    p = 16045690984230472446
    a = 114514
    b = 1919810
    magic = (a * magic + b) % p

def print_flag():
    key = str(magic)[:16]
    enc = AES.new(key.encode(), AES.MODE_ECB)
    flag = enc.decrypt(FLAG)
    print(flag)

for _ in range(114514):
    magic_s()

print_flag()
#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm永久代配置

1. 元空间介绍 在JDK1.7之前&#xff0c;HotSpot 虚拟机把方法区当成永久代&#xff08;方法区的落地实现&#xff09;来进行垃圾回收。 而从 JDK 1.8 开始&#xff0c;移除永久代&#xff0c;并把方法区移至元空间&#xff0c;它位于本地内存中&#xff0c;而不是虚拟机内存中…

文本生成图形功能,采用非WGS84坐标系的一定要注意

新版GIS数据转换器-矢量5.1和新版GIS数据转换器-栅格4.3已经上传微云&#xff0c;修正了一些BUG。需要请自行下载&#xff01; 文本生成图形功能,采用非WGS84坐标系的一定要选择输入坐标系&#xff0c;因为默认是WGS84&#xff0c;其它都不会软件自动填写&#xff0c;需要您手…

MYBATIS-PLUS入门使用、踩坑记录

转载&#xff1a; mybatis-plus入门使用、踩坑记录 - 灰信网&#xff08;软件开发博客聚合&#xff09; 首先引入MYBATIS-PLUS依赖&#xff1a; SPRING BOOT项目&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus…

Git 基本操作【本地仓库与远程仓库的推送、克隆和拉取】

文章目录 一、Git简介二、Git的下载安装三、Git常规命令四、新建本地仓库五、本地分支操作六、Git远程仓库七、远程仓库克隆、抓取和拉取八、总结九、学习交流 一、Git简介 Git是分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称 DVCS&…

每日一博 - 闲聊SQL Query Execution Order

文章目录 SQL查询阶段关键字对结果集和性能的影响Flow小结 SQL查询阶段 在MySQL中&#xff0c;SQL查询的执行顺序可以分为以下几个阶段&#xff1a; 词法分析&#xff08;Lexical Analysis&#xff09;&#xff1a;在这个阶段&#xff0c;MySQL首先将SQL查询文本分解成词法单元…

算法通关18关 | 回溯模板如何解决排列和单词搜索问题

1. 排列问题 题目 LeetCode46 给定一个没有重复数字的序列&#xff0c;返回其所有可能的全排列&#xff0c; 思路 排列问题的思路同样使用与字母大小写全排列LeetCode784。 元素在使用过一次的时候&#xff0c;在图中第二层的时候&#xff0c;还会再被使用&#xff0c;所以能…

从实时监控到智能洞察:Grafana 和 CnosDB 的无限潜力

在今天的数字化世界中&#xff0c;监控系统对于维护应用程序和基础设施的稳定性至关重要。本文将介绍如何使用 Grafana 和 CnosDB 构建强大的监控体系&#xff0c;以便实时监视性能、发现问题并采取及时的措施。 CnosDB已正式上架Grafana插件市场 Grafana&#xff1a;开源监控和…

C++ 类的继承特性简单运用

封装一个名为Shape&#xff08;图形&#xff09;的父类&#xff0c;从父类中派生两个子类&#xff0c;分别为Circle&#xff08;圆形&#xff09;&#xff0c;Rect&#xff08;矩形&#xff09;&#xff0c;父类拥有两个子类的共同特性&#xff0c;面积和周长&#xff0c;两个子…

buuctf crypto 【密码学的心声】解题记录

1.打开可以看到一个曲谱 2.看到曲谱中的提示埃塞克码可以想到ascii码&#xff0c;没有八可以联想到八进制&#xff0c;而八进制又对应着三位的二进制&#xff0c;然后写个脚本就好了 oct [111,114,157,166,145,123,145,143,165,162,151,164,171,126,145,162,171,115,165,143,…

UG\NX二次开发 获取曲面上指定点位置的uv参数 UF_MODL_ask_face_parm

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 获取曲面上指定点位置的uv参数 UF_MODL_ask_face_parm。 效果: 代码: #include "me.hpp"//parm[2] static void AskFaceUVP…

使用NSISW工具打包

程序使用VS2019Qt5.6.3开发工具编写。 已经有生成的32位Release文件夹 D:\work\版本\1.0.0\code\Release 文件夹内含&#xff1a; 关键是nsis.nsi 把nsis.nsi拖拽入下面的页面&#xff1a; 等待一段时间。打包成功。

随机密码生成器(Python)

随机密码生成器 想要生成一个随机密码&#xff0c;需要考虑下面两点&#xff1a; 1.字符集合 2.密码的位数 下面代码中引用了string模块和random模块&#xff0c;string.printable是string中的可打印字符&#xff0c;用strip函数首尾去掉空格&#xff1b;random模块用来取字符&…

JavaScript中循环遍历数组、跳出循环和继续循环

循环遍历数组 上个文章我们简单的介绍for循环&#xff0c;接下来&#xff0c;我们使用for循环去读取数据的数据&#xff0c;之前我们写过这样的一个数组&#xff0c;如下&#xff1a; const ITshareArray ["张三","二愣子","2033-1997","…

Java复习-多线程编程

多线程编程 解决并发访问的问题。 一. 继承 Thread 类实现多线程 1. 继承实现 继承thread类 class MyThread extends Thread{}覆写run主方法 多线程要执行的功能都应该在 run() 方法中定义。 class MyThread extends Thread { // 线程的主体类private String title;public…

Windows上Qt配置OpenCV(最简单版本无需自己编译-避坑必看)

文章目录 Windows上Qt配置OpenCV(最简单版本无需自己编译-避坑必看)1 前言2 软件安装2.1 安装qt2.2 安装OpenCV(分为vc版和mingw版)2.2.1 配置环境变量 3 Qt配置OpenCV3.1 创建一个项目(注意选择的是MinGW编译器还是MSVC编译器)msvc:mingw: 4 简单快捷添加OpenCV库的方法5 简单…

人类文明之光,历史上最伟大的10位程序员

21世纪&#xff0c;被称作计算机的时代&#xff0c;程序员是其中不可或缺的组成部分。不夸张的说&#xff0c;他们贡献改变了我们人类的整个文明进程。今天我们就来看看人类历史上最伟大的10位程序员。 丹尼斯里奇&#xff08;Dennis Ritchie&#xff09;&#xff1a;C语言之父…

驱动开发--自动创建节点udev机制的实现过程分析

一&#xff0c;创建设备文件的机制 1&#xff0c;mknod&#xff1a;手动创建设备节点 2&#xff0c;devfs&#xff1a;创建设备节点的逻辑在内核空间&#xff0c;2.5版本后淘汰 3&#xff0c;udev&#xff1a;自动创建设备节点的机制&#xff0c;逻辑在用户空间&#xff0c;…

Linux编辑器-vim使用

文章目录 前言一、vim编辑器1、vim的基本概念2、vim的基本操作2.1 命令模式切换至插入模式2.2 插入模式切换至命令模式2.3 命令模式切换至底行模式 3、vim命令模式命令集3.1 移动光标3.2 删除文字3.3 复制与粘贴3.4 替换3.5 撤销上一次操作3.6 更改3.7 跳至指定的行 4、vim末行…

相关性分析-Pearson, Spearman, Kendall 三大相关系数+绘制热力图

相关性分析 1、Pearson 相关系数(连续变量)Pearson代码2、Spearman 秩相关系数(连续变量)Spearman代码3、Kendall 相关系数 (有序分类变量)Kendall代码Pearson, Spearman, Kendall 三类相关系数是统计学上的三大重要相关系数,表示两个变量之间变化的趋势方向和趋势程度。…

将Windows本地的数据集上传到Linux服务器

一、用MobaXterm软件 软件界面如下&#xff1a; 在左侧边栏中找到存放数据集的位置&#xff0c;点击上传按钮&#xff08;这里只能上传单个文件&#xff09;&#xff0c;就可以完成上传了。 具了解上传速度为1M/s-22M/s. 其他方法待尝试&#xff0c;未完待续。。。。 点赞…