IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> BUU 羊城杯re -> 正文阅读

[Python知识库]BUU 羊城杯re

羊城杯

  1. easyre
  2. login

easyre

打开一看非常明了,输入的字符串经过三次加密后和Str2比较
用Str2往回逆即可
在这里插入图片描述
倒着逆
第三次加密:好像是后移三位的凯撒但又不完全是。。唉不会就爆破
第二次加密:13位位一组调换了前后顺序,换回去即可
第一次加密:最后解一个base64

#include<iostream>
using namespace std;

int main()
{
	char temp[] = "EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG";
	char flag[100] = "";
	char* v8 = temp;
	char v5;
	char* v7 = flag;
	for (int i = 0; i < strlen(temp); i++)
	{
		for (int a = 0x20; a < 0x7b; a++)
		{
            v5 = a;
            if (v5 <= 64 || v5 > 90)
            {
                if (v5 <= 96 || v5 > 122)
                {
                    if (v5 <= 47 || v5 > 57)
                        *v7 = v5;
                    else
                        *v7 = (v5 - 48 + 3) % 10 + 48;
                }
                else
                {
                    *v7 = (v5 - 97 + 3) % 26 + 97;
                }
            }
            else
            {
                *v7 = (v5 - 65 + 3) % 26 + 65;
            }
            if (*v7 == *v8)
            {
                v7++;
                v8++;
                printf("%c", v5);
            }//BjYjM2Mjk4NzMR1dIVHs2NzJjY0MTEzM2VhMn0=zQ3NzhhMzhlOD
		}
	}
    char a1[100] = "BjYjM2Mjk4NzMR1dIVHs2NzJjY0MTEzM2VhMn0=zQ3NzhhMzhlOD";
    char a3[100] = "";
    char* Source;
    char* v6;
    Source = a1;
    v6 = a3;
    strncpy(a3, a1 + 13, 13);
    strncpy(v6 + 13, Source + 39, 13);
    strncpy(v6 + 26, Source , 13);
    strncpy(v6 + 39, Source + 26, 13);
    cout << endl << a3;
    //R1dIVHs2NzJjYzQ3NzhhMzhlODBjYjM2Mjk4NzM0MTEzM2VhMn0=
    //base64: GWHT{672cc4778a38e80cb362987341133ea2}
    // 包上 flag
}

login

拿到的是用pyinstaller压缩成exe的py文件

第一步需要两个py工具:
pyinstxtractor 和 uncompyle6
(第一个工具可以在github上下载

把 login.exe和pyinstxtractor.py 放在同一目录下
在这里插入图片描述
然后在解压结果的文件夹里找到login.pyc
但直接反编译报错了,原来在用pyinstaller压缩时会丢失一部分文件头,要对着struct.pyc改一下(绝了。。。
在这里插入图片描述
在这里插入图片描述
改完后就可以正常用uncompyle反编译成py文件了
一轮加密:每个数跟后一个数异或
在这里插入图片描述
在这里插入图片描述
要根据所给方程算出a1到a14
这时候就要 z3,yyds!!!


from z3 import *

a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 = Ints("a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14")
s = Solver()
s.add(a1 * 88 + a2 * 67 + a3 * 65 - a4 * 5 + a5 * 43 + a6 * 89 + a7 * 25 + a8 * 13 - a9 * 36 + a10 * 15 + a11 * 11 + a12 * 47 - a13 * 60 + a14 * 29 == 22748)
s.add(a1 * 89 + a2 * 7 + a3 * 12 - a4 * 25 + a5 * 41 + a6 * 23 + a7 * 20 - a8 * 66 + a9 * 31 + a10 * 8 + a11 * 2 - a12 * 41 - a13 * 39 + a14 * 17 == 7258)
s.add(a1 * 28 + a2 * 35 + a3 * 16 - a4 * 65 + a5 * 53 + a6 * 39 + a7 * 27 + a8 * 15 - a9 * 33 + a10 * 13 + a11 * 101 + a12 * 90 - a13 * 34 + a14 * 23 == 26190)
s.add(a1 * 23 + a2 * 34 + a3 * 35 - a4 * 59 + a5 * 49 + a6 * 81 + a7 * 25 + a8 * 128 - a9 * 32 + a10 * 75 + a11 * 81 + a12 * 47 - a13 * 60 + a14 * 29 == 37136)
s.add(a1 * 38 + a2 * 97 + a3 * 35 - a4 * 52 + a5 * 42 + a6 * 79 + a7 * 90 + a8 * 23 - a9 * 36 + a10 * 57 + a11 * 81 + a12 * 42 - a13 * 62 - a14 * 11 == 27915)
s.add(a1 * 22 + a2 * 27 + a3 * 35 - a4 * 45 + a5 * 47 + a6 * 49 + a7 * 29 + a8 * 18 - a9 * 26 + a10 * 35 + a11 * 41 + a12 * 40 - a13 * 61 + a14 * 28 == 17298)
s.add(a1 * 12 + a2 * 45 + a3 * 35 - a4 * 9 - a5 * 42 + a6 * 86 + a7 * 23 + a8 * 85 - a9 * 47 + a10 * 34 + a11 * 76 + a12 * 43 - a13 * 44 + a14 * 65 == 19875)
s.add(a1 * 79 + a2 * 62 + a3 * 35 - a4 * 85 + a5 * 33 + a6 * 79 + a7 * 86 + a8 * 14 - a9 * 30 + a10 * 25 + a11 * 11 + a12 * 57 - a13 * 50 - a14 * 9 == 22784)
s.add(a1 * 8 + a2 * 6 + a3 * 64 - a4 * 85 + a5 * 73 + a6 * 29 + a7 * 2 + a8 * 23 - a9 * 36 + a10 * 5 + a11 * 2 + a12 * 47 - a13 * 64 + a14 * 27 == 9710)
s.add(a1 * 67 - a2 * 68 + a3 * 68 - a4 * 51 - a5 * 43 + a6 * 81 + a7 * 22 - a8 * 12 - a9 * 38 + a10 * 75 + a11 * 41 + a12 * 27 - a13 * 52 + a14 * 31 == 13376)
s.add(a1 * 85 + a2 * 63 + a3 * 5 - a4 * 51 + a5 * 44 + a6 * 36 + a7 * 28 + a8 * 15 - a9 * 6 + a10 * 45 + a11 * 31 + a12 * 7 - a13 * 67 + a14 * 78 == 24065)
s.add(a1 * 47 + a2 * 64 + a3 * 66 - a4 * 5 + a5 * 43 + a6 * 112 + a7 * 25 + a8 * 13 - a9 * 35 + a10 * 95 + a11 * 21 + a12 * 43 - a13 * 61 + a14 * 20 == 27687)
s.add(a1 * 89 + a2 * 67 + a3 * 85 - a4 * 25 + a5 * 49 + a6 * 89 + a7 * 23 + a8 * 56 - a9 * 92 + a10 * 14 + a11 * 89 + a12 * 47 - a13 * 61 - a14 * 29 == 29250)
s.add(a1 * 95 + a2 * 34 + a3 * 62 - a4 * 9 - a5 * 43 + a6 * 83 + a7 * 25 + a8 * 12 - a9 * 36 + a10 * 16 + a11 * 51 + a12 * 47 - a13 * 60 - a14 * 24 == 15317)

print(s.check())
print(s.model())

踩坑一:
在这里插入图片描述
这个z3好像不能给解,二进制左移7位就是乘2的7次方(128

踩坑二:
开心地去异或结果报错。。。
在这里插入图片描述
注意这个a1 a3 a9 a10 它换位了。。。无语

终于最后一步异或!
每一位和后一位异或,且最后一位不变(33是’!’),逆推就行

a=[10, 24, 119, 7, 104, 43, 28, 91, 108, 52, 88, 74, 88, 33]
flag = '!'
b=12
temp=33
for i in range(13):
    c=a[b]^temp
    temp=c
    flag+=chr(c)
    b-=1

print(flag[::-1])  #reverse
#U_G07_th3_k3y!

按题目要求取md5
在这里插入图片描述
(取32位 小写。。。完工!

buu上还有道羊城杯的ByteCode,看了一下。。!要手翻好长的python机器码啊啊啊,什么时候有空再做吧(咕。。。)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:08:04  更:2021-08-03 11:09:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 1:46:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码