跳转至

2023年datacon初级赛解题部分

MISC

Misc | Basic type

解题思路 image.png 整理文件,将括号去掉: image.png 撰写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)
经过遍历发现19组可以看到清晰地镜像字符串。 image.png image.png 使用word翻转字符串,并拉伸比例得到

flag{RGB_1s_e4sY}

image.png

Misc | run

kali linux 使用分离工具 binwalk foremost ** image.png **发现三个张图片一个文档 binwalk -e 无法正确分离出来 使用foremost -e 进行分离 image.png image.png 解压出来的png 和exe 都没什么信息 image.png 直接看向zip里面,一个文章和一个可执行文件,运行可执行文件,双击运行文件偶然弹出来一个tif文件,直接补全tiff后缀 image.png WinHex 看一下 image.png photoshop,打开看看 image.png run->njCp1HJBPLVTxcMhUHDPwE7mPW photshop 分离图层移动矩形图层,发现隐藏代码。 image.png 这是一段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}
image.png

Misc | embarrass

wireshark 流量分析 解题思路: Ctrl+F → 字符串 → 分组字节流 ---> 关键字flag{ image.png

flag{Good_b0y_W3ll_Done}

这次大赛颇丰,非同凡响,记忆深刻。

Web 部分

Web | missing_php

image.png 首先用dirsearch扫描出.swp文件 使用卡里的vim修复文件 image.png 看见有文件包含漏洞,跟文件名提示

image.png base64 解码出flag image.png

Crypto部分

Crypto| XOR_writeup

解压得

image.png

image.png

分析是base64加密 打开Cyber tools,用base64解码,选择From Base64

image.png

用xor brute force

image.png

找到flag

image.png

找到flag

flag{d72737cf1ce698c58a6a65a8a19dbb48}

Re部分

Re | easyCrack

  1. 把文件放入IDA工具 F5反汇编

找到主函数 image.png 跳转到 main_0()

  1. 阅读反汇编代码,sub_401005是主要加密的函数,进入函数。

image.png image.png 跳转到

  1. 反汇编逻辑代码如下:

image.png image.png

  1. 用python实现反汇编代码逻辑,异或的加密。
    j='hboiuFklkGocs'
    for i in j:
        print(chr(ord(i)^0xe),end='')
    
    image.png

Re | pyre_writeup

image.png

image.png

image.png

pyre.exe与pyinstxtractor.py放在同一目录下

image.png

python执行文件后,多出一个目录

image.png image.png

用010 Editor工具编辑struct.pyc文件第一行复制到1.pyc文件第一行

image.png image.png

用在线工具对1.pyc进行编译在线工具 https://tool.lu/pyc/

image.png

代码如下,运行得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:

image.png

flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca}