2025年浙江省信息通信业职业技能竞赛-数据安全管理员竞赛-初赛WriteUp - 渗透测试中心
文章描述了多个网络安全与数据处理挑战:分析网恋聊天记录提取隐藏信息、恢复勒索病毒数据、分解私钥恢复种子、解决矩阵与线性方程组问题及提取数字水印定位资产。 2025-9-13 15:13:0 Author: www.cnblogs.com(查看原文) 阅读量:4 收藏

数据传输-网恋需谨慎:

你是一个管理员,在一个名为orwell.freenode.net的服务器上结识了用户RiotCard85,RiotCard85主动联系了你,询问近况并提到他最近在做一个项目想让你看看。项目中隐藏了一些有趣的信息和内容,不幸的是黑客截获了你们的的网恋聊天记录,请分析找出RiotCard85留下的有趣的信息,帮助他尽快消除这些隐私泄露,SSH账号密码为ctf/123456,flag为flag{md5(题目中获取的有效flag信息)},md5默认为32位小写。

首先是Web端的提示告诉了密码和压缩包名称
image.png
image.png
ssh连接下载第一个包,进行分析
image.png
因为给的提示是.7z最后搜文件头
图片
图片
输入密码:MarioRulez1985
得到一个flag.nes文
解法1:
strings 直接一把嗦哈
image.png
解法2:
放入16进制编辑器,找到关键信息。
图片
解法3:

拖到nes模拟器,得到flag

图片

Flag:NESted_in_a_PCAP

图片
flag{993f09e2be95e2a3073b819f2ef24585}

勒索病毒数据恢复场景:

通过初步排查,发现存在大量SSH登录日志,请筛查SSH日志,找出境外攻击者的IP。SSH登录信息:ctf/123456 提交格式为flag{md5(ip)}

ps:ssh登不了没提供服务,只能web访问
直接登入在log路径下发现日志
笨办法一个一个试,或者搜归属更好判断
ea6a44c74c9d83787cc66b89f8d4b851.png
38.180.105.69个是黑客ip md5加密一下
图片
flag{17be68c6011ca57cbe87b3256e65702f}

数据加密解密-损坏的签名也不能泄露:

题目描述:在计算机飞速发展的情况下,数据安全变得尤为重要,我们采用更为安全的非对称加密对数据进行处理,这使得对于私钥的管理变得更为严格,意外泄露私钥签名,会带来巨大的数据安全隐患。

first blood

这题一血,吐槽一下设计的不合理这么难才50分!
题目给出完整的私钥文件,可以直接读取文件,得到n,e,d。然后找一个网上已知n,e,d分解n的模板进行分解即可得到:
p = 101847683421654680716375842695034943233474607295920357073189009241656737716914371690243711460398867127651266347312129924919977661218999208063330343536013922323662312399299474655370999029196885945932836549374793299266781427165928628878598475537865329482879199651690967937724199458455481792004282475605823232563
q = 163210729062940435641851566626943305331251877830909198443806240864198682758985962110875675836580622882438335913592229471847355588617787116228491327914590616301603257385538591488022620864955374260532671790453204386239739135973102414175524438716221979798897211790763739046103381955260186638088754228604073920479
图片
得到w:
取出$\omega{0,0},\omega{1,1}$这样的元素,在模$p$下开5次方即可得到$seeds_i$然后爆破即可恢复seed
from hashlib import md5
import json
import gmpy2

def obscure_calculation(p, enc, x, y, z):
    # Initialize structures with meaningless names
    Omega = [[0]*100 for _ in range(100)]
    Theta = [0]*100

    for j_prime in range(100):
        # ---- Phase 1: Obfuscated Sj calculation ----
        temp_list = [gmpy2.mpz(v) for v in x[j_prime]]
        sigma = sum(temp_list)
        delta = gmpy2.mpz(enc[j_prime]) - sigma
        Theta[j_prime] = int(delta % p) if p else 0

        # ---- Phase 2: Confusing counting ----
        occurrence_matrix = [[0]*10 for _ in ' '*10]
        for pair in zip(y[j_prime], z[j_prime]):
            occurrence_matrix[pair[0]][pair[1]] += 1

        # ---- Phase 3: Nonlinear column filling ----
        position_counter = 0
        for first_dim in range(10):
            for second_dim in range(10):
                Omega[j_prime][position_counter] = int(
                    occurrence_matrix[first_dim][second_dim]
                )
                position_counter += 1
                if position_counter >= 100:
                    break
            if position_counter >= 100:
                break

    return Omega, Theta

p = 101847683421654680716375842695034943233474607295920357073189009241656737716914371690243711460398867127651266347312129924919977661218999208063330343536013922323662312399299474655370999029196885945932836549374793299266781427165928628878598475537865329482879199651690967937724199458455481792004282475605823232563
q = 163210729062940435641851566626943305331251877830909198443806240864198682758985962110875675836580622882438335913592229471847355588617787116228491327914590616301603257385538591488022620864955374260532671790453204386239739135973102414175524438716221979798897211790763739046103381955260186638088754228604073920479

f = open('out.json','rb').read()
data = json.loads(f)
x = data['x']
y = data['y']
z = data['z']
enc = data['enc']

A_matrix = matrix(Zmod(p),A)
S_vector = vector(Zmod(p),S)
W = A_matrix.solve_right(S_vector)

seeds = []
for i in range(10):
    R.<x> = PolynomialRing(Zmod(p))
    f = x^5 - W[10*i + i]
    seeds.append(int(f.roots()[0][0]))

recover_seed = []
hex_table = b"0123456789abfedf"
low_table = [i for i in range(1000)]

def get_seed(c):
    for low in low_table:
        for f in hex_table:
            i = c - f + low
            if (i % 1000) == low:
                recover_seed.append(chr(f))
                return

for i in range(10):
    get_seed(seeds[i])
seed = ''.join(recover_seed)
flag = f"flag{{{md5(str(seed).encode()).hexdigest()}}}"
print(flag)


@font-face{
font-family:"Times New Roman";
}
@font-face{
font-family:"宋体";
}
@font-face{
font-family:"Calibri";
}
p.MsoNormal{
mso-style-name:正文;
mso-style-parent:"";
margin:0pt;
margin-bottom:.0001pt;
mso-pagination:none;
text-align:justify;
text-justify:inter-ideograph;
font-family:Calibri;
mso-fareast-font-family:宋体;
mso-bidi-font-family:'Times New Roman';
font-size:10.5000pt;
mso-font-kerning:1.0000pt;
}
p.15{
mso-style-name:内容块-16-a;
mso-style-next:正文;
margin-right:17.8500pt;
margin-left:17.8500pt;
border-top:1.0000pt solid rgb(245,247,252);
mso-border-top-alt:0.5000pt solid rgb(245,247,252);
border-right:1.0000pt solid rgb(245,247,252);
mso-border-right-alt:0.5000pt solid rgb(245,247,252);
border-bottom:1.0000pt solid rgb(245,247,252);
mso-border-bottom-alt:0.5000pt solid rgb(245,247,252);
border-left:1.0000pt solid rgb(245,247,252);
mso-border-left-alt:0.5000pt solid rgb(245,247,252);
padding:10pt 17pt 10pt 17pt ;
mso-pagination:none;
text-align:justify;
text-justify:inter-ideograph;
vertical-align:middle;
background:rgb(245,247,252);
font-family:Calibri;
mso-fareast-font-family:宋体;
mso-bidi-font-family:'Times New Roman';
font-size:10.5000pt;
mso-font-kerning:1.0000pt;
}
span.msoIns{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
text-underline:single;
color:blue;
}
span.msoDel{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:line-through;
color:red;
}
@page{mso-page-border-surround-header:no;
    mso-page-border-surround-footer:no;}@page Section0{
margin-top:72.0000pt;
margin-bottom:72.0000pt;
margin-left:90.0000pt;
margin-right:90.0000pt;
size:595.3000pt 841.9000pt;
layout-grid:15.6000pt;
mso-header-margin:42.5500pt;
mso-footer-margin:49.6000pt;
}
div.Section0{page:Section0;}
flag{a2517703dcc32c46b263e13d9753d2eb}

Crypto-还会在见面吗?:

题目描述:海很小,小到可以从巨人的眼里流出。曾经和过往变得很矮,矮到我跪下,头磕在地上也比我矮。我们发现了一种矩阵与线性方程组,所以逆转时间的公式是什么,我想你会找到她

1.自定义代数环元素 T(a1,a2) ,加法取元素最大值,乘法采用最大和组合。

2.通过爆破 k,l,r,sk,l,r,sk,l,r,s 指数和偏移 p,qp,qp,q

使得矩阵关系 KA=KBK_A = K_BKA=KB 成立。

3.用满足关系的矩阵 KAK_AKA 的字符串MD5作为AES-128密钥

4.AES-ECB模式解密密文得到flag

参考https://eprint.iacr.org/2024/010.pdf 来攻击即可

手动处理一下数据类型,enc删一下转义字符

@font-face{
font-family:"Times New Roman";
}
@font-face{
font-family:"宋体";
}
@font-face{
font-family:"Calibri";
}
p.MsoNormal{
mso-style-name:正文;
mso-style-parent:"";
margin:0pt;
margin-bottom:.0001pt;
mso-pagination:none;
text-align:justify;
text-justify:inter-ideograph;
font-family:Calibri;
mso-fareast-font-family:宋体;
mso-bidi-font-family:'Times New Roman';
font-size:10.5000pt;
mso-font-kerning:1.0000pt;
}
p.15{
mso-style-name:内容块-16-a;
mso-style-next:正文;
margin-right:17.8500pt;
margin-left:17.8500pt;
border-top:1.0000pt solid rgb(245,247,252);
mso-border-top-alt:0.5000pt solid rgb(245,247,252);
border-right:1.0000pt solid rgb(245,247,252);
mso-border-right-alt:0.5000pt solid rgb(245,247,252);
border-bottom:1.0000pt solid rgb(245,247,252);
mso-border-bottom-alt:0.5000pt solid rgb(245,247,252);
border-left:1.0000pt solid rgb(245,247,252);
mso-border-left-alt:0.5000pt solid rgb(245,247,252);
padding:10pt 17pt 10pt 17pt ;
mso-pagination:none;
text-align:justify;
text-justify:inter-ideograph;
vertical-align:middle;
background:rgb(245,247,252);
font-family:Calibri;
mso-fareast-font-family:宋体;
mso-bidi-font-family:'Times New Roman';
font-size:10.5000pt;
mso-font-kerning:1.0000pt;
}
span.msoIns{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
text-underline:single;
color:blue;
}
span.msoDel{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:line-through;
color:red;
}
@page{mso-page-border-surround-header:no;
    mso-page-border-surround-footer:no;}@page Section0{
}
div.Section0{page:Section0;}
from tqdm import trange
from Crypto.Cipher import AES
from hashlib import md5
class TropicalPairElement(CommutativeRingElement):
    def __init__(self, parent, a1, a2, c=None):
        CommutativeRingElement.__init__(self, parent)
        self.a1 = a1
        self.a2 = a2
        self.c = c
    def __add__(self, other):
        return TropicalPairElement(
            self.parent(), max(self.a1, other.a1), max(self.a2, other.a2), c=self.c
        )
    def __mul__(self, other):
        p = 0
        if self.c is not None:
            p += self.c
        first = max(p + self.a1 + other.a1, p + self.a2 + other.a2)
        second = max(p + self.a1 + other.a2, p + self.a2 + other.a1)
        return TropicalPairElement(self.parent(), first, second, c=self.c)
    def __eq__(self, other):
        return (self.a1 == other.a1) and (self.a2 == other.a2)
    def __ne__(self, other):
        return not self.__eq__(other)
    def is_zero(self):
        return self.a1 == float("-inf") and self.a2 == float("-inf")
    def __repr__(self):
        return f"T({self.a1}, {self.a2})"
    def _mul_(self, other):
        return self.__mul__(other)
class TropicalPairSemiring(UniqueRepresentation, Parent):
    def __init__(self, c=None):
        Parent.__init__(self, category=CommutativeRings())
        self.c = c
    def _element_constructor_(self, a1, a2):
        return TropicalPairElement(self, a1, a2, self.c)
    def __repr__(self):
        return "Tropical Semiring of Pairs"
    def zero(self):
        return self(float("-inf"), float("-inf"))
    def one(self):
        return self(0, float("-inf"))
    def random_element(self, lower_bound=-10, upper_bound=10):
        from random import randint
        a1 = randint(lower_bound, upper_bound)
        a2 = randint(lower_bound, upper_bound)
        return self._element_constructor_(a1, a2)
def change_ring(matrix, ring):
    n = len(matrix[0, :].list())
    new_matrix = [
        [ring(matrix[i, j].a1, matrix[i, j].a2) for j in range(n)] for i in range(n)
    ]
    return Matrix(ring, new_matrix)
class TropicalElement(CommutativeRingElement):
    def __init__(self, parent, a):
        CommutativeRingElement.__init__(self, parent)
        self.a = a
    def __add__(self, other):
        return TropicalElement(self.parent(), max(self.a, other.a))
    def __sub__(self, other):
        return TropicalElement(self.parent(), self.a - other.a)
    def __mul__(self, other):
        return TropicalElement(self.parent(), self.a + other.a)
    def __eq__(self, other):
        return self.a == other.a
    def __ne__(self, other):
        return not self.__eq__(other)
    def is_zero(self):
        return self.a == float("-inf")
    def __repr__(self):
        return f"T({self.a})"
    def _mul_(self, other):
        return self.__mul__(other)
class TropicalSemiring(UniqueRepresentation, Parent):
    def __init__(self):
        Parent.__init__(self, category=CommutativeRings())
    def _element_constructor_(self, a):
        return TropicalElement(self, a)
    def __repr__(self):
        return "Tropical Semiring of Pairs"
    def zero(self):
        return self(float("-inf"))
    def one(self):
        return self(0)
    def random_element(self, lower_bound=-10, upper_bound=10):
        from random import randint
        a = randint(lower_bound, upper_bound)
        return self._element_constructor_(a)
    def get_identity_matrix(self, n):
        return Matrix(self, [[self.one() if i == j else self.zero() for j in range(n)] for i in range(n)])
def shift(matrix, x):
    n = len(matrix[0, :].list())
    ring = matrix.base_ring()
    new_matrix = [[ring(matrix[i, j].a1 + x, matrix[i, j].a2 + x) if isinstance(matrix[i, j],
                                                                                TropicalPairElement) else ring(
        matrix[i, j].a + x) for j in range(n)] for i in range(n)]
    return Matrix(ring, new_matrix)
def pair_to_Semiring(matrix):
    Q = TropicalSemiring()
    Y = []
    n = len(matrix[0, :].list())
    for i in range(n):
        Y_row = []
        for j in range(n):
            Y_row.append(Q(matrix[i, j].a1))
            Y_row.append(Q(matrix[i, j].a2))
        Y.append(Y_row)
        Y_row = []
        for j in range(n):
            Y_row.append(Q(matrix[i, j].a2))
            Y_row.append(Q(matrix[i, j].a1))
        Y.append(Y_row)
    return Matrix(Q, Y)
def Semiring_to_pair(matrix):
    Q = TropicalPairSemiring()
    Y = []
    n = len(matrix[0, :].list()) // 2
    for i in range(0, 2 * n, 2):
        YY = []
        for j in range(0, n):
            YY.append(Q(matrix[i, 2 * j].a, matrix[i, 2 * j + 1].a))
        Y.append(YY)
    return Matrix(Q, Y)
def check(X):
    a = X[0, 0]
    for element in X.list():
        if element != a:
            return False
    return True
def attack(U, D1, M, D2, maxt=None):
    if maxt == None:
        maxt = len(U[0, :].list()) ** 3
    D1_ = [D1 ** i for i in range(maxt)]
    D2_ = [D2 ** i for i in range(maxt)]
    for t1 in trange(maxt):
        for t2 in range(maxt):
            T = U - D1_[t1] * M * D2_[t2]
            if check(T):
                yield (int(T[0, 0].a), t1, t2)
n = 3
T = TropicalPairSemiring()
enc = b"\xec\x84\x92\xfc\xc4\xfa\xfa\xf7\xef\"\xb8E\x9a!IW\x8e\t\x01>\xa4\xbf\x13\xddE\x87\r\x12\x0fp?\x88\xa7'W=\x9e?$\xa3\x90\x10\xe2~[\xd2\x1d\xe3"
X= [
    T(110708454939676865901724532703414667738014003557012137556142356251407760761743, 64429878814614391260297011871951810672954993693634589774701083999559919558905),
    T(114400256219229064527373515718559952456749372198522387765135641433945327715958, 17697360174406639109199980234871935340393780210483722455768271866120461811953),
    T(40618112620986374519798578969580025007148925862693200019403229725983326613673, 7865436210148217457308241210297439203912120963849935867150299708344042553009),
    T(59018836615535321408868842256953841770109135621176807749480502297742226630293, 85134708744799577797908136126520431369352742194975759080274131252246382448118),
    T(78993321334260281215061402578417207363859510733409179423623291021304077747642, 13317521841465915180225741271119204849053634207871573530682530170848593055352),
    T(18082571007768070261508613933274746051885170062857311563184218698216829673395, 41709256383230143393411542719182243133084554301663789843223171198383873680058),
    T(5171192240033121509554390832492853541974582402432311126717880712829695260982, 10835240153520898689173460974714744536325780114983678464607109363038489642270),
    T(66620677785353929132329640883948793859712973715877736225951102211776256795497, 86000440505338710112038384525459742606970816729717905608778809554435996989740),
    T(66186019430692198343989570819297411872480827763128679623423914286854819249153, 49685325832070157714388309740889005863520095402357801109959066275043825221332)
]
Y= [
    T(31683179678425566970412471467969799159596272130066165286006914121538189742422, 14098363172421645718599785800778394720700395445164421914239733718891150513611),
    T(27663612517791288382045857649006123566718180645516455517366188652709446037836, 47632910253071543847796956898479289550992142019070141768825145145301685104799),
    T(86833984232927641779390226363365365738948630924160969468940710805295395581847, 756263198952801493413214147866530797844565252847206296526421072535197562609),
    T(100331588744322223990080819319981690789571035088629120234434779076474076189216, 76248956649943796589116726985563856030666682482422756847820971318571034963263),
    T(20128999578249855931770669193833446793161740225636569623778570084786271216318, 94260636722107002508040275085191856443390524226485072792324426721575476993755),
    T(83251615773907236979067456857877590729685146860382788566927193224955788522965, 29573952937838140283615018840926520392791840040577474541200193477274745959715),
    T(96784357740426849755863660563565800764513368161756335457288152422878081505398, 25171831812301791087038303585469126048707111754441632801599342618487468721658),
    T(49621762188087926075595882015894446692513273606277879416005166363779950999105, 42829936801656350782650254071331605372896136511022218861538354725437130683772),
    T(18222885752045502131730837973618243325220751851063104543603649015348080205140, 53944689874403608531076246136201223826870122345684429396386924610061146466130)
]
A_p= [
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345479816388791533322004011181008279741109655038907975154931539992524022795348900, 29552011791673461926049365020182046171007328770368851632984692115065262631345494372640743628461767201157992009896848418083200950223934083852674238478503508),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345488301688721413240285160613757220062502237572338806176491973500319339879308047, 29552011791673461926049365020182046171007328770368851632984692115065262631345466419743806088150806993200195471110852311679618280048225098560502716067948637),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345486945988254449101038551109270183406143976189898626120610700136757958397091600, 29552011791673461926049365020182046171007328770368851632984692115065262631345477292667773213474756187795529905796788532194972703892266576266822720190837257),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345468798894548751173663384761415115660479756821838913845458215627675077100189883, 29552011791673461926049365020182046171007328770368851632984692115065262631345454242642596656033900194784431385504740993777545938776455671767524861417035275),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345440845997611210862703176803618576874483650418256243669749230335503554689635012, 29552011791673461926049365020182046171007328770368851632984692115065262631345462727942526535952181344217180325826133576310976769798016105275320178500994422),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345451718921578336186652371398953011560419870933610667513790708041823558812523632, 29552011791673461926049365020182046171007328770368851632984692115065262631345461372242059571812934734712693289169775314928536589742134831911758797018777975),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345429534628162317878110508636253430579609950590718644544508308220827889653263272, 29552011791673461926049365020182046171007328770368851632984692115065262631345444090880114413017873698613237160735348713635011619613510852080978105336417880),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345438019928092197796391658069002370901002533124149475566068741728623206737222419, 29552011791673461926049365020182046171007328770368851632984692115065262631345418640165372213015411949325360859952255275281135635396685914021280546997028176),
    T(29552011791673461926049365020182046171007328770368851632984692115065262631345436664227625233657145048564515334244644271741709295510187468365061825255005972, 29552011791673461926049365020182046171007328770368851632984692115065262631345427010907143998030862685250775056635288827746783373281843344495126587048751629)
]
B_q= [
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665098150314768093423827798094855286130559688305901166497648757861844836108837739, 31500182860200887084530578228644059196681233784573008164658851331957382724665083594062815998284064608117871555974820925261608191428646214001694620425683131),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665070197417830553112867590137058747344563581902318496321939772569673313698282868, 31500182860200887084530578228644059196681233784573008164658851331957382724665092079362745878202345757550620496296213507795039022450206647509489937509642278),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665081070341797678436816784732393182030499802417672920165981250275993317821171488, 31500182860200887084530578228644059196681233784573008164658851331957382724665090723662278914063099148046133459639855246412598842394325374145928556027425831),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665058020316621120995960791721294661738452264000246155050170345776695459047369506, 31500182860200887084530578228644059196681233784573008164658851331957382724665072576568573216135723981698278391894191027044539130119172889636845674730524114),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665066505616551000914241941154043602059844846533676986071730779284490776131328653, 31500182860200887084530578228644059196681233784573008164658851331957382724665044623671635675824763773740481853108194920640956459943463904344674152319969243),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665065149916084036774995331649556565403486585151236806015849505920929394649112206, 31500182860200887084530578228644059196681233784573008164658851331957382724665055496595602801148712968335816287794131141156310883787505382050994156442857863),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665047868554138877979934295550100436969059983857711835887225526090148702966752111, 31500182860200887084530578228644059196681233784573008164658851331957382724665033312302186782840171105573116706813321220813418860818222982229998487283597503),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665022417839396677977472546262224136185966545503835851670400588030451144627362407, 31500182860200887084530578228644059196681233784573008164658851331957382724665041797602116662758452255005865647134713803346849691839783415737793804367556650),
    T(31500182860200887084530578228644059196681233784573008164658851331957382724665030788581168462992923282187638332869000097969483589555558018504297184679085860, 31500182860200887084530578228644059196681233784573008164658851331957382724665040441901649698619205645501378610478355541964409511783902142374232422885340203)
]
X = Matrix(T, [X[3 * i:3 * (i + 1)] for i in range(3)])
Y = Matrix(T, [Y[3 * i:3 * (i + 1)] for i in range(3)])
A_p = Matrix(T, [A_p[3 * i:3 * (i + 1)] for i in range(3)])
B_q = Matrix(T, [B_q[3 * i:3 * (i + 1)] for i in range(3)])
M = TropicalSemiring().get_identity_matrix(2 * n)
X_ = pair_to_Semiring(X)
Y_ = pair_to_Semiring(Y)
A_p_ = pair_to_Semiring(A_p)
B_q_ = pair_to_Semiring(B_q)
for t, k_, l_ in attack(A_p_, X_, M, Y_):
    K = shift((X_ ** k_ * B_q_ * Y_ ** l_), t)
    key = md5(str(Semiring_to_pair(K)).encode()).digest()
    aes = AES.new(key=key, mode=AES.MODE_ECB)
    flag = aes.decrypt(enc)
    if b'flag' in flag:
        print(flag)
        break
b'flag{7b9bc1f1fd36baddc01424d47babdc3d}\n\n\n\n\n\n\n\n\n\n'

数据水印-这么美这么近周末玩水印:

数字资产是新时代计算机飞速发展过程中的产生的无形资产,应进行妥善保管,为防止他人盗取,篡改视频和图片,我们引进水印技术来保障资产的不可否认性。小宁未妥善保管个人数字资产,将自己的位置信息泄露出来,你能通过逐步分析找到他吗?作为奖励,flag为flag{md5(所在位置)}。md5默认为32位小写,温馨提示:位置要精确到门牌号哦!!!

image.png

给了一张图片和加密的压缩包

foremost 分离得到9张图 聪明的小伙伴看到9直接可以想到二维码

直接工具一把梭 得到8张二维码,

然后ps拼接一下 像素块需要写脚本

图片
图片

最后拼接得到二维码QR扫码 

得到password2: c8753d0bec10ea19  

但是这个是pss2需要找,使用水印提取 得到pss1

image.png

最终提取出password1: 7ddcf32671e7d45

(眼睛要瞎了!!!!)
拼接即可 打开压缩包。
image.png
ps:这题仅供参考,得到一张图片 再结合 题目给的提示 像塔 百度+谷歌识图都无果  只能ai了但是还是不行 你要问他 结合考点  浙江比赛肯定是浙江省内的景点 感觉像三潭印月 但是它不属于塔当然这个属于赛后复现了  比赛的时候不一定能联想到是西湖 直接搜西湖地址
image.png
image.png

flag{a846c0e291527639baa3f78a1d231db6}

参考转载地址:
https://mp.weixin.qq.com/s/pCAnikhO8Nnr42oL2v468g

文章来源: https://www.cnblogs.com/backlion/p/19089841
如有侵权请联系:admin#unsafe.sh