当前位置: 首页 > article >正文

[MRCTF2020]pyFlag(详解附送多个python脚本)

Hex:

FF D9 5B 53 65 63 72 65 74 20 46 69 6C 65 20 50
61 72 74 20 31 3A 5D
                                                                                 

ASCII:

ÿÙ[Secret File Part 1:]

发现Setsuna.jpg尾部有多余的一部分有左侧窗口pk头,前有一段ÿÙ[Secret File Part 1:],提示是第一部分

Hex:

FF D9 5B 53 65 63 72 65 74 20 46 69 6C 65 20 50
61 72 74 20 32 3A 5D
                                                                                 

ASCII:

ÿÙ[Secret File Part 2:]

发现Furan.jpg尾部有多余的一部分有左侧窗口pk头,前有一段ÿÙ[Secret File Part 2:],提示是第二部分

Hex:

FF D9 5B 53 65 63 72 65 74 20 46 69 6C 65 20 50
61 72 74 20 33 3A 5D

                                                                                 

ASCII:

ÿÙ[Secret File Part 3:]

发现Miku.jpg尾部有多余的一部分有左侧窗口pk头,前有一段ÿÙ[Secret File Part 3:],提示是第三部分

按下图新建一个hex file ,我们把Setsuna.jpg图片尾部的FF D9 5B 53 65 63 72 65 74 20 46 69 6C 65 20 50  61 72 74 20 31 3A 5D之下到尾部的内容全部复制为hex,黏贴到空白hexfile第一部分,接着我们把Furan.jpg图片尾部的FF D9 5B 53 65 63 72 65 74 20 46 69 6C 65 20 50  61 72 74 20 32 3A 5D之下到尾部的内容全部复制为hex,黏贴到空白hexfile第一段后面,把Furan.jpg图片尾部的FF D9 5B 53 65 63 72 65 74 20 46 69 6C 65 20 50  61 72 74 20 33 3A 5D之下到尾部的内容全部复制为hex,黏贴到空白hexfile最后面,另存为3.zip
简单的说就是灰色部分按顺序拷贝出来重建zip

有密码,爆破

G&eOhGcq(ZG(t2*H8M3dG&wXiGcq(ZG&wXyG(j~tG&eOdGcq+aG(t5oG(j~qG&eIeGcq+aG)6Q<G(j~rG&eOdH9<5qG&eLvG(j~sG&nRdH9<8rG%++qG%__eG&eIeGc+|cG(t5oG(j~sG&eOlH9<8rH8C_qH9<8oG&eOhGc+_bG&eLvH9<8sG&eLgGcz?cG&3|sH8M3cG&eOtG%_?aG(t5oG(j~tG&wXxGcq+aH8V6sH9<8rG&eOhH9<5qG(<E-H8M3eG&wXiGcq(ZG)6Q<G(j~tG&eOtG%+<aG&wagG%__cG&eIeGcq+aG&M9uH8V6cG&eOlH9<8rG(<HrG(j~qG&eLcH9<8sG&wUwGek2

)

这是什么?

还有隐藏文件,提示有base加密套娃

后面的0x10、0x20、0x30、0x55(16进制转10进制)代表的应该也就是base16base32base48base85

base16base32base48base85 加密

反过来解密base85 -base48-base32-base16

base85解码:

在cmd命令窗口依次输入

python

import base64

base64.b85decode('G&eOhGcq(ZG(t2*H8M3dG&wXiGcq(ZG&wXyG(j~tG&eOdGcq+aG(t5oG(j~qG&eIeGcq+aG)6Q<G(j~rG&eOdH9<5qG&eLvG(j~sG&nRdH9<8rG%++qG%__eG&eIeGc+|cG(t5oG(j~sG&eOlH9<8rH8C_qH9<8oG&eOhGc+_bG&eLvH9<8sG&eLgGcz?cG&3|sH8M3cG&eOtG%_?aG(t5oG(j~tG&wXxGcq+aH8V6sH9<8rG&eOhH9<5qG(<E-H8M3eG&wXiGcq(ZG)6Q<G(j~tG&eOtG%+<aG&wagG%__cG&eIeGcq+aG&M9uH8V6cG&eOlH9<8rG(<HrG(j~qG&eLcH9<8sG&wUwGek2)')

475532444B4E525549453244494E4A57475132544B514A54473432544F4E4A5547515A44474D4A5648415A54414E4257473434544B514A5647595A54514D5A5147553444474D5A5547453355434E5254475A42444B514A57494D3254534D5A5447555A444D4E5256494532444F4E4A5D3D3D7475A41544952425547343254454E534447595A544D524A5447415A55493

注意尾部的3D3D3D

去https://icyberchef.com/   URL decode 

发现%3D%3D%3D   URL decode    ===

推测每隔2个字符前面缺少了%的url编码,写个脚本加个%并进行先base32解码再base16解码

import base64
from urllib import parse

s1 = "475532444B4E525549453244494E4A57475132544B514A54473432544F4E4A5547515A44474D4A5648415A54414E4257473434544B514A5647595A54514D5A5147553444474D5A5547453355434E5254475A42444B514A57494D3254534D5A5447555A444D4E5256494532444F4E4A57475A41544952425547343254454E534447595A544D524A5447415A55493D3D3D"
s2 = ""

for i in range(0,len(s1),2):
    s2 += '%'
    print(s2)                #可以省略,为了便于理解保留
    s2 += s1[i:i+2]
    print(s2)                #可以省略,为了便于理解保留
print(base64.b64decode(base64.b16decode(base64.b32decode(parse.unquote(s2)))))

MRCTF{Y0u_Are_4_p3rFect_dec0der}

也可以使用以下两个脚本直接读取flag.txt获得flag

import base64

def baseDec(text, type):

    if type == 1:

        return base64.b16decode(text)

    elif type == 2:

        return base64.b32decode(text)

    elif type == 3:

        return base64.b64decode(text)

    elif type == 4:

        return base64.b85decode(text)

    else:

        pass

def detect(text):

    try:

        base64.b16decode(text)

        return 1

    except:

        pass

   

    try:

        base64.b32decode(text)

        return 2

    except:

        pass

    try:

        base64.b64decode(text)

        return 3

    except:

        pass

   

    return 4

def autoDec(text):

    while True:

        if b"MRCTF{" in text:

            print("\n" + text.decode())

            break

        code = detect(text)

        text = baseDec(text, code)

with open("flag.txt", 'rb') as f:

    flag = f.read()

autoDec(flag)


 

#以下使用了Python内置的base64模块来替代正则表达式表示的base编码:

 #使用了`base64.b16decode()`、`base64.b32decode()`、`base64.b64decode()`和`base64.b85decode()`函数来替代了正则表达式表示的base编码。

 # #这样可以更直接地进行base解码,避免了使用正则表达式的性能开销。

如果运行上面脚本出现下面错误提示

试试下面脚本

import base64

def baseDec(text, type):

    if type == 1:

        return base64.b16decode(text)

    elif type == 2:

        return base64.b32decode(text)

    elif type == 3:

        return base64.b64decode(text)

    elif type == 4:

        return base64.b85decode(text)

    else:

        pass

def detect(text):

    try:

        base64.b16decode(text)

        return 1

    except:

        pass

   

    try:

        base64.b32decode(text)

        return 2

    except:

        pass

    try:

        base64.b64decode(text)

        return 3

    except:

        pass

   

    try:

        base64.b85decode(text)

        return 4

    except:

        pass

   

    return None

def autoDec(text):

    while True:

        if b"MRCTF{" in text:

            print("\n" + text.decode())

            break

        code = detect(text)

        if code is None:

            break

        text = baseDec(text, code)

with open("flag.txt", 'rb') as f:

    flag = f.read()

autoDec(flag)

#

#在修改后的代码中,我们使用`base64.b16decode()`、`base64.b32decode()`、`base64.b64decode()`和`base64.b85decode()`来检测和解码base编码,而不再使用正则表达式。

# 在`detect()`函数中,我们使用`try-except`块来检测解码是否成功,如果成功则返回对应的编码类型,如果失败则继续尝试其他编码类型。

# 在`autoDec()`函数中,我们添加了一个判断,如果无法检测到有效的编码类型,则退出循环。这样可以避免出现无效的字符导致的错误。

--------------------------------------------------------------------------------------------------------------------------------

最后介绍一种basecrack解码方式

下载地址

Release v4.0 · mufeedvh/basecrack · GitHub

以windwos为例,下载解压,cmd切换到目录下输入

python basecrack.py --magic

注意:加了--magic就是魔法解码,连续解码,直到解出为止

BaseCrack 是一个用 Python 编写的工具,可以解码所有字母数字基本编码方案。该工具可以接受单个用户输入、来自文件的多个输入、来自参数的输入、多编码基图像 EXIF 数据中的基基于 OCR 的图像并非常快地解码它们。

GitHub - mufeedvh/basecrack: Decode All Bases - Base Scheme Decoder


http://www.kler.cn/a/287155.html

相关文章:

  • 多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系
  • ADS 2022软件下载与安装教程
  • 《译文》2024年11月数维杯国际大学生数学建模挑战赛题目
  • sqli—labs靶场 5-8关 (每日4关练习)持续更新!!!
  • C# 面向对象
  • RadSystems 自定义页面全攻略:个性化任务管理系统的实战设计
  • Zookeeper 官方示例2-SyncPrimitive 代码解读(二)
  • 数据库(MySQL)的基本操作
  • C# 异步编程
  • linux-基础知识2
  • echarts地图下钻+平面3D效果+自定义toolTip+自定义立体数据图层
  • J.U.C Review - CAS的工作原理
  • CS224W—07 Machine Learning with Heterogeneous Graphs
  • Javaweb12-Maven基础和进阶
  • 【工控】线扫相机小结 第二篇
  • 38道数据分析-Python面试题,程序员面试之前一定要看哦!
  • 深度学习系列72:torch-tensorrt入门
  • uniapp 生成H5 返回上一页 事件不执行
  • Python入门案例01
  • 20240829软考架构-------软考91-95答案解析
  • 视联动力数字科技新成果闪耀2024数博会
  • 科普小课堂:中等硬度的床垫,合适的睡姿,通过日常力量练习提升自身能力以支撑脊柱形态。
  • 【drools】intelj修改JDK版本、进行maven test
  • 业务资源管理模式语言04
  • 【Python-办公自动化】批量修改EXCEL指定内容
  • 牛客周赛 Round 57(A,B,C,D,E,F,G)