得到一个T4.pyc
回编译一下
得到下面代码
import base64def encrypt_and_compare(user_input, offset_str, target_base64):if len(user_input) != 24:return 'Please enter a string with a length of 24'encrypted = Nonefor i, char in enumerate(user_input):offset = int(offset_str[i])ascii_val = ord(char)if i % 2 == 0:new_ascii = ascii_val + offsetelse:new_ascii = ascii_val - offsetencrypted_char = chr(new_ascii ^ offset)encrypted.append(encrypted_char)encrypted_bytes = ''.join(encrypted).encode('utf-8')encrypted_base64 = base64.b64encode(encrypted_bytes).decode('utf-8')print('Encrypted result:{}'.format(encrypted_base64))if encrypted_base64 == target_base64:return 'Find key'return Noneoffset_str = '123456789012345678901234'
target_base64 = 'TWF/c1sse19GMW5gYVRoWWFrZ3lhd0B9'
user_input = input('Please enter a string with a length of 24:')
result = encrypt_and_compare(user_input, offset_str, target_base64)
print(result)
很简单逻辑,你解密出来就是第一段密码(这个我不想再写了,相信各位都会,不会私信我,嘿嘿)
第一段密码拿去解压缩出来
就有这些东西
这是一个处理png文件的模型
我让AI修改一下(我肯定是不会的)
import torch
from torch import nn
from torchvision import transforms
from PIL import Image
import os# 定义网络结构
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, 10)def forward(self, x):x = x.view(-1, 28 * 28)x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.fc3(x)return x# 直接加载整个模型实例
model_instance = torch.load('D:/CTF/problem/iscc/AI/AI-23/confused_digit_recognition_model.pt', map_location='cpu')# 确保模型处于评估模式
model_instance.eval()# 定义图像预处理变换
transform = transforms.Compose([transforms.Grayscale(num_output_channels=1),transforms.Resize((28, 28)),transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])# 图像文件所在目录
image_folder = "D:\\CTF\\problem\\iscc\\AI\\AI-23\\"# 遍历编号从1到24的图像文件并进行预测
for i in range(1, 25):# 构建完整的图像路径image_path = os.path.join(image_folder, f"{i}.png")try:# 加载并预处理图像image = Image.open(image_path)image = transform(image)image = image.unsqueeze(0)# 模型预测with torch.no_grad():outputs = model_instance(image)_, predicted = torch.max(outputs.data, 1)# 打印预测结果print( predicted.item(),end='')except IOError as e:print(f"Error opening {image_path}: {e}")except Exception as e:print(f"An error occurred during prediction for {image_path}: {e}")
得到第二段密码
这就是对照表的内容啦
然后写个脚本就OK
def toint(a):b=ord(a)-ord('0')return b
a='384362683985682257091427'
for i in range(24):enc=toint(a[i])if(enc==0):print('@nd',end='')elif(enc==1):print('a!',end='')elif (enc == 2):print('_',end='')elif (enc == 3):print('F',end='')elif (enc == 4):print('SSS',end='')elif (enc == 5):print('W@',end='')elif (enc == 6):print('K',end='')elif (enc == 7):print('1',end='')elif (enc == 8):print('C',end='')elif (enc == 9):print('d',end='')