BUU MISC(看心情写)

[羊城杯 2020]signin

看了wp才知道是toycrypto。这个真的不知道。

根据提示,一表人才,二表倒立,我估计有用的信息就是二表倒立。

关键就在于这个表:

首先进行替换再说。

出来了LDVUUCMEXMLQSSFUSXKEOCCG

二表倒立,综合来看就是ACEG本来指向M,现在指向了Y,以此类推,就是从左到右从上到下翻了个顺序。

出来了GWHTTOYSAYGREENTEAISCOOL,除去羊城杯的flag头即可。

以下是完整脚本:
 

mydict = {
    'ACEG': 'M',
    'ADEG': 'R',
    'BCEG': 'K',
    'BDEG': 'S',
    'ACEH': 'A',
    'ADEH': 'B',
    'BCEH': 'L',
    'BDEH': 'U',
    'ACEI': 'D',
    'ADEI': 'C',
    'BCEI': 'N',
    'BDEI': 'V',
    'ACFG': 'H',
    'ADFG': 'F',
    'BCFG': 'O',
    'BDFG': 'W',
    'ACFH': 'T',
    'ADFH': 'G',
    'BCFH': 'P',
    'BDFH': 'X',
    'ACFI': 'E',
    'ADFI': 'I',
    'BCFI': 'Q',
    'BDFI': 'Y'
}

cipher = 'BCEHACEIBDEIBDEHBDEHADEIACEGACFIBDFHACEGBCEHBCFIBDEGBDEGADFGBDEHBDEGBDFHBCEGACFIBCFGADEIADEIADFH'
original_flag = ''
for i in range(0, len(cipher), 4):
    key = cipher[i:i+4]
    original_flag += mydict.get(key, '')
print('替换后:'+original_flag)
new=['M','R','K','S','A','B','L','U','D','C','N','V','H','F','O','W','T','G','P','X','E','I','Q','Y']
reversed_new=new[::-1]
true_new={new[i]: reversed_new[i] for i in range(len(new)) }
flag=''.join([true_new[char] for char in original_flag])
print('flag:'+flag)

顺便通过这个学了下字典和列表推导式,嘻嘻。

[NPUCTF2020]碰上彩虹,吃定彩虹!

附件首先给了一个hint.txt,里面是零宽隐写,先不着急看,先看看其他文件。

看了还是没有头绪,还是得看提示。

看了零宽说是:do u know NTFS?

所以猜测应该是哪里有NTFS数据流。果然发现一个

进去之后杂乱无章,看WP才知道你需要词频分析。

解出来是加密的意思。搜索得知实际上是一个加密软件。加密后的格式恰好是crypto。

需要先更换后缀

看来是需要密码了,恰好还有一个txt没有看。

进去全选才知道有隐藏信息。后面是摩斯密码,翻译得到:

这里了解到breakautokey.py,直接爆破即可。出来了结果:

解密之后还需要注意一点,这个文件也被做过手脚,需要删除一行多余字母。

他妈的藏在这里,不看WP根本都找不到,删除了再解密。

出来了一张图片。里面隐藏的有压缩包,压缩包真的被加密了。

我考虑的其实是爆破,所以先试试。其实没有出来,暴力破解得搞一小时多至少。

看WP才知道黄色的颜色不一样,用PS看RGB数据。这里黄色吸管不要吸偏,我吸偏了导致最后一个字母变成了e

color=['ffff70','ffff40','ffff73','ffff73','ffff57','ffff64']
flag=''
for i in color:
    char = chr(int(i[-2:],16))
    flag+=char
print(flag)

然后咱们解压文档。注意看大写字母提示ALPHUCK

看样子是类似于brainfuck。总算出来了。

只能说这个SB题目,唉。

[NewStarCTF 公开赛赛道]奇怪的二维码

二维码缺少很多信息,想办法进行补充。binwalk隐藏了个看似不相关的png,俩png无法进行组合。

图片上说阿兹特克,搜一下原来是阿兹特克码,补全一下就可以识别了。

这一题确实有意思

[DASCTF X GFCTF 2022十月挑战赛!]滴滴图

里面有一个压缩包,和图片,图片也隐藏有压缩包,二者均被加密

先怀疑是LSB隐写。发现并不是。

看WP

DASCTF X GFCTF 2022十月挑战赛 WriteUp_dasctfxcbctf无畏者先行-CSDN博客

还是不要小看010,用010看结尾有unicode编码,解码:this_is_paSS

这就是密码了。

修改宽高,将这个this_is_not_PASSWORD输进去试试。果然是密码,这个SB套路还无法影响到我。

分离左右声道,分别识别音频即可。除了乱码就是这个十六进制。转换就行了。

74 6F 5F 62 65 5F 63 74 66 65 72

DASCTF Oct X 吉林工师 欢迎来到魔法世界~]giveyourflag

给的这个没有后缀的实际上是ZIP。里面仍然是一个zip,怀疑是反复解压

豆包搞了个脚本,解压出来即可,还真的不少

注意出来的文本base64之后还得凯撒一下,不过真的打的时候肯定就知道了。

import os
import zipfile
import tempfile
from pathlib import Path
import shutil

def is_zip_file(file_path):
    """通过文件内容(魔术数字)判断是否为ZIP文件"""
    ZIP_MAGIC_NUMBERS = b'\x50\x4B\x03\x04'
    
    try:
        with open(file_path, 'rb') as f:
            header = f.read(4)
            return header == ZIP_MAGIC_NUMBERS
    except Exception:
        return False

def extract_nested_zips(initial_zip_path, output_dir):
    """
    迭代解压嵌套的ZIP文件(修复临时文件找不到问题)
    
    参数:
        initial_zip_path (str): 初始ZIP文件的路径
        output_dir (str): 最终文件的输出目录
    """
    os.makedirs(output_dir, exist_ok=True)
    
    # 创建一个持久的临时目录,而不是每次迭代都创建新的
    with tempfile.TemporaryDirectory() as base_temp_dir:
        # 复制初始ZIP文件到临时目录,确保文件可用性
        initial_zip_name = os.path.basename(initial_zip_path)
        temp_initial_zip = os.path.join(base_temp_dir, initial_zip_name)
        shutil.copy2(initial_zip_path, temp_initial_zip)
        
        # 栈存储需要处理的ZIP文件:(zip文件路径, 相对路径)
        zip_stack = [(temp_initial_zip, "")]
        
        while zip_stack:
            current_zip_path, relative_path = zip_stack.pop()
            
            # 为当前ZIP创建一个子临时目录
            current_temp_dir = tempfile.mkdtemp(dir=base_temp_dir)
            
            try:
                # 解压当前ZIP文件
                with zipfile.ZipFile(current_zip_path, 'r') as zip_ref:
                    zip_ref.extractall(current_temp_dir)
                    print(f"解压: {os.path.basename(current_zip_path)}")
                
                # 处理解压后的内容
                for item in Path(current_temp_dir).rglob('*'):
                    if item.is_file():
                        # 复制文件到一个安全的位置,避免临时目录被清理
                        temp_item_path = os.path.join(base_temp_dir, item.name)
                        shutil.copy2(item, temp_item_path)
                        
                        if is_zip_file(temp_item_path):
                            # 是ZIP文件,加入处理栈
                            item_relative_path = os.path.join(relative_path, 
                                item.relative_to(current_temp_dir).parent.as_posix())
                            zip_stack.append((temp_item_path, item_relative_path))
                            print(f"发现嵌套ZIP: {item.name},将在后续处理")
                        else:
                            # 不是ZIP文件,复制到输出目录
                            item_rel_path = item.relative_to(current_temp_dir)
                            full_relative_path = os.path.join(relative_path, item_rel_path.as_posix())
                            target_path = Path(output_dir) / full_relative_path
                            
                            os.makedirs(target_path.parent, exist_ok=True)
                            shutil.copy2(item, target_path)
                            print(f"提取文件: {full_relative_path}")
            
            except zipfile.BadZipFile:
                print(f"警告: {os.path.basename(current_zip_path)} 不是有效的ZIP文件,已跳过")
            except Exception as e:
                print(f"处理 {os.path.basename(current_zip_path)} 时出错: {str(e)}")
            finally:
                # 清理当前ZIP的临时目录
                if os.path.exists(current_temp_dir):
                    shutil.rmtree(current_temp_dir, ignore_errors=True)
            
            # 删除已处理的ZIP文件,释放空间
            if os.path.exists(current_zip_path) and current_zip_path != temp_initial_zip:
                try:
                    os.remove(current_zip_path)
                except Exception as e:
                    print(f"无法删除 {os.path.basename(current_zip_path)}: {str(e)}")

if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(description='修复临时文件问题的嵌套ZIP解压工具')
    parser.add_argument('zip_file', help='要解压的ZIP文件路径')
    parser.add_argument('-o', '--output', help='输出目录路径', default='extracted_files')
    
    args = parser.parse_args()
    
    if not os.path.isfile(args.zip_file):
        print(f"错误: 文件 '{args.zip_file}' 不存在")
        exit(1)
    
    if not is_zip_file(args.zip_file):
        print(f"错误: '{args.zip_file}' 不是ZIP文件(通过内容判断)")
        exit(1)
    
    print(f"开始解压嵌套ZIP文件: {args.zip_file}")
    extract_nested_zips(args.zip_file, args.output)
    print(f"所有文件已成功解压到: {os.path.abspath(args.output)}")
    

[DASCTF Oct X 吉林工师 欢迎来到魔法世界~]卡比卡比卡比

内存取证!

不太会呀,先搁置一旁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值