2023年datacon初级赛解题部分¶
MISC¶
Misc | Basic type¶
解题思路 整理文件,将括号去掉: 撰写python PIL绘画脚本,引用1.txt 里面的数值,分别对应着RGB
from PIL import Image
def Crack(n):
flag = [image.png]
for each in range(2,int(n **0.5)+1):
if(n % each == 0):
print(each,int(n/each))
flag += [(each,int(n/each))]
if len(flag) == 1:return flag[0]
else:
choice = input("输入组号(0-%s):"%(len(flag)-1))
return flag[int(choice)]
def Paint(X,Y,listrgb):
pic = Image.new("RGB",(X, Y))
i=0
for x in range (0,X):
for y in range (0,Y):
temp = listrgb[i].split(',')
pic.putpixel([x,y],(int(temp[0]),int(temp[1]),int(temp[2])))
i = i+1
pic.show()
pic.save(r"C:\Users\30297\Desktop\1\flag%s.png"%(X))
listrgb = open(r"C:\Users\30297\Desktop\1.txt").readlines()
X,Y = Crack(len(listrgb))
Paint(X,Y,listrgb)
Paint(Y,X,listrgb)
flag{RGB_1s_e4sY}
Misc | run¶
kali linux 使用分离工具 binwalk foremost ** **发现三个张图片一个文档 binwalk -e 无法正确分离出来 使用foremost -e 进行分离 解压出来的png 和exe 都没什么信息 直接看向zip里面,一个文章和一个可执行文件,运行可执行文件,双击运行文件偶然弹出来一个tif文件,直接补全tiff后缀 WinHex 看一下 photoshop,打开看看 run->njCp1HJBPLVTxcMhUHDPwE7mPW photshop 分离图层移动矩形图层,发现隐藏代码。 这是一段C++语言 构造C++按照图片中的ASCII字符算法,写出如下代码:
#include <iostream>
using namespace std;
int main()
{
char flag[image.png] = "njCp1HJBPLVTxcMhUHDPwE7mPW"; // 要加密的字符串
for (int i = 0; i < 26; i++) { // 遍历字符串中的每个字符
if (i % 2 != 0) // 如果下标是奇数
flag[i] += 1; // 将字符的 ASCII 码值加1
else // 如果下标是偶数
flag[i] -= 1; // 将字符的 ASCII 码值减1
};
printf(flag); // 输出加密后的结果
return 0; // 返回程序执行结果
}
// 执行结果为:miBo0IKAMKVUwbLgTGeoD6nqQV
flag{miBo0IKAMKVUwbLgTGeoD6nqQV}
Misc | embarrass¶
wireshark 流量分析 解题思路: Ctrl+F → 字符串 → 分组字节流 ---> 关键字flag{
flag{Good_b0y_W3ll_Done}
这次大赛颇丰,非同凡响,记忆深刻。
Web 部分¶
Web | missing_php¶
首先用dirsearch扫描出.swp文件 使用卡里的vim修复文件 看见有文件包含漏洞,跟文件名提示
base64 解码出flag
Crypto部分¶
Crypto| XOR_writeup¶
解压得
分析是base64加密 打开Cyber tools,用base64解码,选择From Base64
用xor brute force
找到flag
找到flag
flag{d72737cf1ce698c58a6a65a8a19dbb48}
Re部分¶
Re | easyCrack¶
- 把文件放入IDA工具 F5反汇编
找到主函数 跳转到 main_0()
- 阅读反汇编代码,sub_401005是主要加密的函数,进入函数。
跳转到
- 反汇编逻辑代码如下:
- 用python实现反汇编代码逻辑,异或的加密。
j='hboiuFklkGocs' for i in j: print(chr(ord(i)^0xe),end='')
Re | pyre_writeup¶
pyre.exe与pyinstxtractor.py放在同一目录下
python执行文件后,多出一个目录
用010 Editor工具编辑struct.pyc文件第一行复制到1.pyc文件第一行
用在线工具对1.pyc进行编译在线工具 https://tool.lu/pyc/
代码如下,运行得Flag
#!/usr/bin/env python
# visit [https://tool.lu/pyc/](https://tool.lu/pyc/) for more information
# Version: Python 3.7
def check():
a = input('plz input your flag:')
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]
if len(a) != 42:
print('wrong length')
return 0
b = None
for i in range(len(a)):
if ord(a[i]) * 33 % b != c[i]:
print('wrong')
return None
print('win')
check()
分析源码可知: a长度必须42
修改代码:
#!/usr/bin/env python
# visit [https://tool.lu/pyc/](https://tool.lu/pyc/) for more information
# Version: Python 3.7
check = "flag{"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 ] tmp = [image.png]for i in range(len(check)): for j in range(1, 1000): if ord(check[i]) * 33 % j == c[i]: tmp.append(j) b = max(tmp, key=tmp.count) List = "0123456789abcdeflg{}-"for i in range(42): for tmp in List: if ord(tmp) * 33 % b == c[i]: print(tmp, end="")
| --- |
运行得到flag:
flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca}