CMP09 -Tails RAR文件隐写

下载解压文件后,找到了flag.txt。打开后,解压后空欢喜一场。

用010edit打开flag.rar文件,查看一下。发现flag.txt 文件内容很少,为什么里边的内容这么多,仔细观察发现有一个flag.pyc。

下一步就是如何把flag.pyc文件提取出来,首先了解一下 rar 文件结构。

rar 是由一个一个 block 组成的,每个 block 有以下几个部分

HEAD_CRC    2   全部块或块部分的CRC

HEAD_TYPE   1   块类型

HEAD_FLAGS  2   阻止标志

HEAD_SIZE   2   块大小

ADD_SIZE    4   可选字段 - 添加块大小

手动将 block[1] 的HEAD_TYPE改成 file or directory

 

然后解压会报错但是可以解压成功,解压后需要将STM改为STM.pyc应该也可以不改)如下:

科普一下:.pyc文件是将.py形式的程序编译成中间式文件(byte-compiled。这么做的目的就是为了加快下次执行文件的速度。所以,在我们运行python文件的时候,就会自动首先查看是否具有.pyc文件,如果有的话,而且.py文件的修改时间和.pyc的修改时间一样,就会读取.pyc文件,否则,Python就会读原来的.py文件。其实并不是所有的.py文件在与运行的时候都会产生.pyc文件,只有在import相应的.py文件的时候,才会生成相应的.pyc文件

在线反编译https://tool.lu/pyc/)得到.py文件。

# !/usr/bin/env python

# encoding: utf-8

# 如果觉得不错,可以推荐给你的朋友!http://tool.lu/pyc

import base64


def encode():

    flag = '*************'

    ciphertext = []

    for i in range(len(flag)):

        s = chr(i ^ ord(flag[i]))

        if i % 2 == 0:

            s = ord(s) + 10

        else:

            s = ord(s) - 10

        ciphertext.append(str(s))



    return ciphertext[::-1]

ciphertext = [ '96', '65', '93', '123', '91','97','22','93','70','102', '94','132','46','112','64','97','88','80','82',

    '137','90','109','99','112']

根据 encode 编写 decode 代码

def decode(ciphert):

    ciphert = ciphert[:: -1]

    flag = ""

    for i, v in enumerate(ciphert):

        s = int(v)

        if i % 2 == 0:

            s2 = chr(s - 10)

        else:

            s2 = chr(s + 10)

        s3 = chr(ord(s2) ^ i)

        # print(s, s2, s3)

        flag += s3

    print(flag)

得到flag如下:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天若有情(爱笑妍)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值