[GWCTF 2019]pyre
下载附件,是一个pyc文件。
转换为py文件。
在用vscode打开。
分析源码。源码就是进行了异或和数值转换。
有一点很坑,凑得中的值要转换为ASCII值否则就是一串乱码。
编写脚本:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char s[]= {'\x1f','\x12','\x1d','(','0','4','\x01','\x06','\x14','4',',','\x1b','U','?','o','6','*',':','\x01','D',';','%','\x13'};char flag[strlen(s)];
int i;
for(i = strlen(s)-2;i>=0;i--)
{
s[i]=s[i]^s[i+1];
}
for( i = 0;i<strlen(s);i++)
{ flag[i] = s[i]-i ;if(flag[i]<0)flag[i]+=128;
}
puts(flag);
}
flag:GWHT{Just_Re_1s_Ha66y!}
[广东省大学生攻防大赛 2022]pyre
下载附件,是一个zip文件。解压转换为pyc文件。
打开文件找到连个没有后缀的文件。
肯定有二进制缺失,所以查看二进制代码。
将其补全。
再将文件更改后缀名,改成pyc文件,在进行转换,将其转换为py文件。
在用VScode打开查看源码。
分析源码,就是一个简单的运算。
脚本:
c = [144, 163, 158, 177, 121, 39, 58, 58, 91, 111, 25, 158, 72, 53, 152, 78, 171, 12, 53, 105, 45, 12, 12, 53, 12, 171, 111, 91, 53, 152, 105, 45, 152, 144, 39, 171, 45, 91, 78, 45, 158, 8]
b = 179
# 尝试逆向推导可能的flag
flag = ""
for i in range(len(c)):for j in range(128): # 假设ASCII码值范围是0-127来尝试寻找合适的字符if j * 33 % b == c[i]:flag += chr(j)break
print(flag)
flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca}