DASCTF X CBCTF 2023|无畏者先行(Misc WP)

王國慶  金牌会员 | 2023-11-14 00:04:31 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 925|帖子 925|积分 2779

justpaint

1、题目信息

FLAG被我弄丢了>_1.log[/code]得到密钥e63af7cc 55ef839d dc10b922,直接解压
  1. import torch
  2. import torch.nn as nn
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from PIL import Image
  6. import cv2
  7. class JBN(nn.Module):
  8.     def __init__(self):
  9.         super(JBN, self).__init__()
  10.         self.main = nn.Sequential(
  11.             nn.Linear(100, 256),
  12.             nn.ReLU(),
  13.             nn.Linear(256, 512),
  14.             nn.ReLU(),
  15.             nn.Linear(512, 452 * 280),
  16.             nn.Tanh()
  17.         )
  18.     def forward(self, x):
  19.         img = self.main(x)
  20.         img = img.view(-1, 452, 280)
  21.         return img
  22. def watch_flag(img):
  23.     flag = cv2.imread('./data/data/flag.png')
  24.     gray_image = cv2.cvtColor(flag, cv2.COLOR_BGR2GRAY)
  25.     flag_tensor = torch.from_numpy(np.array(gray_image))
  26.     flag_tensor = flag_tensor.unsqueeze(0).transpose(1, 2)
  27.     img_tensor = img
  28.     flag_tensor = flag_tensor.unsqueeze(0)
  29.     img_tensor = img_tensor.unsqueeze(0)
  30.     loss_fn = torch.nn.MSELoss()
  31.     loss = loss_fn(flag_tensor.float(), img_tensor)
  32.     return loss
  33. jbn = JBN()
  34. g_optimizer = torch.optim.Adam(jbn.parameters(), lr=0.001)
  35. min_loss = float('inf')
  36. for epoch in range(10):
  37.     random_noise = torch.randn(1, 100)
  38.     jbn_img = jbn(random_noise)
  39.     g_optimizer.zero_grad()
  40.     g_loss = watch_flag(jbn_img)
  41.     g_loss.backward()
  42.     g_optimizer.step()
  43.     with torch.no_grad():
  44.         if g_loss < min_loss:
  45.             min_loss = g_loss
  46.             torch.save(jbn.state_dict(), 'jbn.pth')
复制代码
注意此时的zip是压缩之后的,需要解压一下,然后cyberchef里面使用raw inflate解一下
压缩包注释提示password is two bytes
直接zip2john和hashcat进行爆破,得到密码为$HEX[9c07]
随便写个脚本解压,然后里面给了一串密钥,结合zpaq文件尾的提示,一眼丁真直接爆
  1. import torch
  2. import torch.nn as nn
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from PIL import Image
  6. import cv2
  7. class JBN(nn.Module):
  8.     def __init__(self):
  9.         super(JBN, self).__init__()
  10.         self.main = nn.Sequential(
  11.             nn.Linear(100, 256),
  12.             nn.ReLU(),
  13.             nn.Linear(256, 512),
  14.             nn.ReLU(),
  15.             nn.Linear(512, 452 * 280),
  16.             nn.Tanh()
  17.         )
  18.     def forward(self, x):
  19.         img = self.main(x)
  20.         img = img.view(-1, 452, 280)
  21.         return img
  22. jbn = JBN()
  23. jbn.load_state_dict(torch.load('jbn.pth'))
  24. random_noise = torch.randn(1, 100)
  25. jbn_img = jbn(random_noise)
  26. jbn_img = jbn_img.squeeze().detach().numpy()
  27. jbn_img = (jbn_img + 1) / 2  # 将图像像素值范围从[-1, 1]转换为[0, 1]
  28. jbn_img = (jbn_img * 255).astype(np.uint8)  # 将图像像素值转换为[0, 255]的整数
  29. jbn_img = cv2.resize(jbn_img, (280, 452))  # 调整图像大小为452x280
  30. flag_image = Image.fromarray(jbn_img)
  31. flag_image.save('flag.png')
复制代码
得到密码

MD5再用bandizip解开zpaq压缩包即可。
justlisten

1、题目信息
听听这是什么

2、解题方法
我们先扫一下hint.png
明显是汉信码,但在线工具扫不出来,然后发现还有一个可以扫“中国编码APP”下载一下APP扫就行了

得到密码“0urS3cret”我们利用ourSecret来解bmp文件,导入文件,输入密码得到txt文件。
这里为什么用这个工具,因为密码的提示以及文件的名字就可以想到。

打开txt得到
  1. # 扫描单个文件
  2. olevba file.doc
  3. # 扫描单个文件 只显示VBA代码,不分析
  4. olevba file.doc -c
  5. # 扫描单个文件 显示解码之后的混淆字符串
  6. olevba file.doc --decode
  7. # 扫描单个文件 显示经过字符串反混淆之后的VBA宏代码
  8. olevba file.doc --reveal
复制代码
像是某种表。。先不管它了看看WAV吧
音频的话试了好多发现使用Sonic Visualiser可以,下载官网:https://www.sonicvisualiser.org/
打开一看就是十进制,右上方是设置。

我们需要提取十进制数据,左上角导出图片然后写脚本读像素
  1. olevba attachment.doc
复制代码
然后得到十进制数据
  1.     Sub XOREncryptFile()
  2.         Dim numbers(8) As Integer
  3.         numbers(0) = 19
  4.         numbers(1) = 71
  5.         numbers(2) = 122
  6.         numbers(3) = 99
  7.         numbers(4) = 65
  8.         numbers(5) = 111
  9.         numbers(6) = 43
  10.         numbers(7) = 67
  11.         Dim CurrentDirectory As String
  12.         CurrentDirectory = "."
  13.         If Dir(CurrentDirectory & "abc") = "" Then
  14.             Exit Sub
  15.         End If
  16.         Dim FileNumber As Integer
  17.         FileNumber = FreeFile
  18.         Open CurrentDirectory & "abc" For Binary Access Read Write As #FileNumber
  19.         Dim FileContent As String
  20.         FileContent = Input$(LOF(FileNumber), #FileNumber)
  21.         Close #FileNumber
  22.         Dim EncryptedContent As String
  23.         For i = 1 To Len(FileContent)
  24.             EncryptedContent = EncryptedContent & Chr(Asc(Mid(FileContent, i, 1)) Xor numbers((i - 1) Mod 8))
  25.         Next i
  26.         FileNumber = FreeFile
  27.         Open CurrentDirectory & "enc" For Binary Access Write As #FileNumber
  28.         Put #FileNumber, , EncryptedContent
  29.         Close #FileNumber
  30.     End Sub
复制代码
根据我们第一步解出来的txt文件中的表猜测可能是每两位int一下后再去表里找相应的字符,如果超出范围就舍去。
  1. table = "# 扫描单个文件
  2. olevba file.doc
  3. # 扫描单个文件 只显示VBA代码,不分析
  4. olevba file.doc -c
  5. # 扫描单个文件 显示解码之后的混淆字符串
  6. olevba file.doc --decode
  7. # 扫描单个文件 显示经过字符串反混淆之后的VBA宏代码
  8. olevba file.doc --reveal"a = "    Sub XOREncryptFile()
  9.         Dim numbers(8) As Integer
  10.         numbers(0) = 19
  11.         numbers(1) = 71
  12.         numbers(2) = 122
  13.         numbers(3) = 99
  14.         numbers(4) = 65
  15.         numbers(5) = 111
  16.         numbers(6) = 43
  17.         numbers(7) = 67
  18.         Dim CurrentDirectory As String
  19.         CurrentDirectory = "."
  20.         If Dir(CurrentDirectory & "abc") = "" Then
  21.             Exit Sub
  22.         End If
  23.         Dim FileNumber As Integer
  24.         FileNumber = FreeFile
  25.         Open CurrentDirectory & "abc" For Binary Access Read Write As #FileNumber
  26.         Dim FileContent As String
  27.         FileContent = Input$(LOF(FileNumber), #FileNumber)
  28.         Close #FileNumber
  29.         Dim EncryptedContent As String
  30.         For i = 1 To Len(FileContent)
  31.             EncryptedContent = EncryptedContent & Chr(Asc(Mid(FileContent, i, 1)) Xor numbers((i - 1) Mod 8))
  32.         Next i
  33.         FileNumber = FreeFile
  34.         Open CurrentDirectory & "enc" For Binary Access Write As #FileNumber
  35.         Put #FileNumber, , EncryptedContent
  36.         Close #FileNumber
  37.     End Sub"for i in range(len(a)//2):    try:        ii = a[2*i:2*i+2]        print(table[int(ii)],end='')    except:        continue
复制代码
但只得到了右半边的flag

脑洞一下,删掉第一个0再转一下,得到了另一半flag,为什么这么干呢?我们可以分析下第一次得到的结果“{Q2qSvkE?vqwPHvey_informat1on!!!}”,明显我们可以发现前面的“Q2qSvkE?vqwPHvey”肯定不全是flag,一般我们得到的flag都是有一定意义的(大部分形式上都可以翻译出来)为什么得到的不全是flag呢?因为我们刚才也说了两位一组超出范围就舍去所以肯定有出入。因此我们可以通过控制十进制前面数字的增减来查看情况,经检验发现把开头0删去可以得到flag前缀“DASCTF{”,那么也就是说这样做是正确的。

经过上面两次结果我们可以拼接出flag大概形式
  1. .\bkcrack -C purezip.zip -c "secret key.zip" -p key -o 0 >1.log
复制代码
我们再根据意义来分析一下最终可得正确flag
  1. .\bkcrack -C purezip.zip -c "secret key.zip" -k e63af7cc 55ef839d dc10b922 -d 1.zip
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表