对对联的英文翻译英语怎么说-北京大暴雨


2023年4月7日发(作者:阴极保护防腐)

CTF之MISC练习⼀

⼀、flag的提交格式

flag{th1s_!s_a_d4m0_4la9}

⼆、PDF隐写

writeup:

使⽤在线word转pdf⼯具,转成word⽂件,然后拖动就可以查看到flag

三、GIF图⽚隐写⼀

writeup:

1.使⽤Stegsolve⼯具的FrameBrowser浏览器查看静态的图⽚

FileFormat:⽂件格式,这个主要是查看图⽚的具体信息

DataExtract:数据抽取,图⽚中隐藏数据的抽取

FrameBrowser:帧浏览器,主要是对GIF之类的动图进⾏分解,动图变成⼀张张图⽚,便于查看

ImageCombiner:拼图,图⽚拼接

2.⼆维码缺少三个⼩⽅块,⽽这些⼩⽅块被称为定位图案,⽤于标记⼆维码矩形的⼤⼩,⽤三个定位图案可以标识并确定⼀个⼆维码矩形的位置和⽅向。

3.将静态图⽚截图保存下,使⽤phoshtop⼯具修复⼆维码图⽚,然后进⾏扫描

四、jar隐写

writeup:

1.⽤jd-gui打开,直接搜索:flag

2.通过base64解密得到

flag{DajiDali_JinwanChiji}

五、压缩包隐写之⿊⽩图⽚

writeup:

1.⽤winhex查看这些图⽚,没有发现可利⽤信息,于是想到⿊⽩可能代表⼆进制0和1。我们将⽩⾊视为0⿊⾊视为1或者反过来尝试⼀遍。⼀共有104张图⽚正好是8的倍数,可以

转为8个⼀对⼆进制,再转化为ASCII码。由于图⽚较多,我们写⼀个python脚本。这⾥使⽤Python图像库PIL(PythonImageLibrary),是python的第三⽅图像处理库。

fromPILimportImage

result=\"\"

foriinrange(104):

img=(f\"C:UsersbacklionDesktopctfjpggif{i}.jpg\")

im_RGB=t(\"RGB\")#将图⽚转换为RGB模式

r,g,b=im_el((1,1))#获得x,y坐标的rgb值

print(r,g,b)#这题中⽩⾊图⽚rgb值:255,255,255⿊⾊图⽚rgb值:12,12,0

ifr!=255:#255是⽩⾊

result+=\"1\"

else:

result+=\"0\"

#将⼆进制转换为ascii码

foriinrange(0,len(result),8):

byte=result[i:i+8]

print(chr(int(byte,2)),end=\"\")

\"\"\"

rusult:

flag{FuN_giF}

\"\"\"

2.在线⼆进制转字符串

六、⼗六进制转ascii

writeup:

该报⽂如:c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2

writeup:

1.这个加解密的⽅式还是挺好猜的,字母最⼤为f,猜16进制,于是两个⼀组。

每两个⼀组,将16进制转换为10进制,发现每组数据都⼤于127,但是ascii码的值不⼤于127,所以所有数值都减去128,再转换成字符,就得到flag了

string=\"c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2\"

flag=\'\'

foriinrange(0,len(string),2):

s=\"0x\"+string[i]+string[i+1]

flag+=chr(int(s,16)-128)

print(flag)

2.得到:

Hi,FreshDog!Theflagis:hjzcydjzbjdcjkzkcugisdchjyjsbdfr

注:也可以⽤JPocketKnife进⾏进制转换

七、与佛论禅加解密

writeup:

1.显⽰⽂字为:

夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱⽼竟寫明奢若梵等盧皤⾖蒙密離怯婆皤礙他哆提哆多缽以南哆⼼⽈姪罰蒙呐神。舍切真怯

2.通过在线翻译⼯具

开头上佛⽈两字即可解密佛语的意思:

3.接着将解密后的MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9使⽤rot-13⼯具(根据题⽬描述的“如来⼗三掌”)再⼀次进⾏解码,

得到ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9

在线⼯具)

python解密:

#coding:utf-8

importstring

defdecoder(crypt_str,shift):

crypt_list=list(crypt_str)

plain_str=\"\"

num=int(shift)

forchincrypt_list:

ch=ord(ch)

iford(\'a\')<=chandch<=ord(\'z\'):

ch=ch+num

ifch>ord(\'z\'):

ch-=26

iford(\'A\')<=chandch<=ord(\'Z\'):

ch=ch+num

ifch>ord(\'Z\'):

ch-=26

a=chr(ch)

plain_str+=a

print(plain_str)

crypt_str=raw_input(\"Crypto_text:\")

print\"!------decode------!\"

shift=13

decoder(crypt_str,shift)

注:rot13使⽤⼀个简单的替换加密算法,对前字符13个字符和后13字符对调

64解密

flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}

⼋、pdf隐写之摩莫斯密码

writeup:

1.通过⾕歌浏览器打开pdf⽂件,然后复制⽂字内容到text⽂字中

BABABBBBABBAABAABBAABABAAABBAABBBBAAAABBAABBAABAABAAABBBABBBAAAABBBBBAAAABABBBBAAAAAABBBBBAAAABAAAAABBBBAAABBAAAAAAAA

2.⼀⼤段AABABA样式的东西,猜测是01但是这些有分割,能想到的只有摩斯密码有分割的,于是尝试改成摩斯密码

接下来我们把“A”换成“.”,把“B”换成“-”,得到

-.-.----.--..-..--..-.-...--..----....--..--..-..-...---.---....-----....-.----......-----....-.....----...--..............---....--

3.通过ctfcraktools⼯具中莫斯解密⼯具得到

CONGRATULATIONSnullFLAGnull1NV151BL3M3554G3

4.转变成:

取flagnull后⾯的内容,字母换成⼩写,套格式

flag{1NV151BL3M3554G3}

转换成⼩写:

flag{1nv151bl3m3554g3}

九、受损rar⽂件之GIF隐写

基础知识:

⽂件数据块结构:

2.常见的⽂件头头和⽂件尾结构:

writeup:

1.这个地⽅代表了⽂件头,65是的⽂件结尾,A83C代表了校验码,所以7C代表了块类型,这⾥我们的块类型是⽂件头,所以改成74就可以正常解压⽂件。

2.对7B进⾏填充修改为74即可

3.保存后解压,再把丢到winhex⾥发现⽂件头为gif图,将图⽚后缀名改为.gif。

这⾥需要⼀些关于正常⽂件编码的知识:

jpg图像开始标志:FFD8结束标志:FFD9

gif图像开始标志:474946383961结束标志:0101003B

4.修改后缀名为.gif,利⽤Stegsolve中的framebrower分解成两个图⽚然后⽤底下的左右箭头选择图层分离出⼆维码得到两张不全的⼆维码

5.由题可知为双层图,⽤ps打开分离图层后保存

(具体步骤:点击图层-复制图层-确定,再点击⽂件-储存-保存)

ps全⼆维码,扫描得到flag:flag{yanji4n_bu_we1shi}

⼗、zip伪加密之base64隐写

基础知识:

1.压缩源⽂件数据区:

504B0304:这是头⽂件标记(0x04034b50)

1403:解压⽂件所需pkware版本

0000:全局⽅式位标记(判断有⽆加密的重要标志)

0800:压缩⽅式

68BF:最后修改⽂件时间

9B48:最后修改⽂件⽇期

FE327D4B:CRC-32校验

E90D0000:压缩后尺⼨

B51B0000:未压缩尺⼨

0900:⽂件名长度

0000:扩展记录长度

2.压缩源⽂件⽬录区:

504B0102:⽬录中⽂件⽂件头标记(0x02014b50)

3F03:压缩使⽤的pkware版本

1403:解压⽂件所需pkware版本

0000:全局⽅式位标记(有⽆加密的重要标志,这个更改这⾥进⾏伪加密,改为0900打开就会提⽰有密码了)

0800:压缩⽅式

68BF:最后修改⽂件时间

9B48:最后修改⽂件⽇期

FE327D4B:CRC-32校验(1480B516)

E90D0000:压缩后尺⼨(25)

B51B0000:未压缩尺⼨(23)

0900:⽂件名长度

2400:扩展字段长度

0000:⽂件注释长度

0000:磁盘开始号

0000:内部⽂件属性

2080ED81:外部⽂件属性

00000000:局部头部偏移量

压缩源⽂件⽬录结束标志:

504B0506:⽬录结束标记

0000:当前磁盘编号

0000:⽬录区开始磁盘编号

0100:本磁盘上纪录总数

0100:⽬录区中纪录总数

5B000000:⽬录区尺⼨⼤⼩

100E0000:⽬录区对第⼀张磁盘的偏移量

0000:ZIP⽂件注释长度

然后就是识别真假加密

1.⽆加密

压缩源⽂件数据区的全局加密应当为0000

且压缩源⽂件⽬录区的全局⽅式位标记应当为0000

2.假加密

压缩源⽂件数据区的全局加密应当为0000

且压缩源⽂件⽬录区的全局⽅式位标记应当为0900

3.真加密

压缩源⽂件数据区的全局加密应当为0900

且压缩源⽂件⽬录区的全局⽅式位标记应当为0900

writeup:

1.这题全局为0000但是在结尾发现是0900,所以为假加密,把0900改成0000就能解压打开⽂件了。

2.通过⼯具对其进⾏解密

3.着我们打开txt⽂件,可以看到很多base64密码

U3RlZ2Fub2dyYXBoeSBpcyB0aGUgYXJ0IGFuZCBzY2llbmNlIG9m

IHdyaXRpbmcgaGlkZGVuIG1lc3NhZ2VzIGluIHN1Y2ggYSB3YXkgdGhhdCBubyBvbmV=

LCBhcGFydCBmcm9tIHRoZSBzZW5kZXIgYW5kIGludGVuZGVkIHJlY2lwaWVudCwgc3VzcGU=

Y3RzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIG1lc3M=

YWdlLCBhIGZvcm0gb2Ygc2VjdXJpdHkgdGhyb3VnaCBvYnNjdXJpdHkuIFS=

aGUgd29yZCBzdGVnYW5vZ3JhcGh5IGlzIG9mIEdyZWVrIG9yaWdpbiBhbmQgbWVhbnMgImNvbmNlYW==

bGVkIHdyaXRpbmciIGZyb20gdGhlIEdyZWVrIHdvcmRzIHN0ZWdhbm9zIG1lYW5pbmcgImNv

dmVyZWQgb3IgcHJvdGVjdGVkIiwgYW5kIGdyYXBoZWluIG1lYW5pbmcgInRvIHc=

cml0ZSIuIFRoZSBmaXJzdCByZWNvcmRlZCB1c2Ugb2YgdGhlIHRlcm0gd2FzIGluIDE0OTkgYnkgSm9o

YW5uZXMgVHJpdGhlbWl1cyBpbiBoaXMgU3RlZ2Fub2dyYXBoaWEsIGEgdHJlYV==

dGlzZSBvbiBjcnlwdG9ncmFwaHkgYW5kIHN0ZWdhbm9ncmFwaHkgZGlzZ8==

dWlzZWQgYXMgYSBib29rIG9uIG1hZ2ljLiBHZW5lcmFsbHksIG1lc3P=

YWdlcyB3aWxsIGFwcGVhciB0byBiZSBzb21ldGhpbmcgZWxzZTogaW1hZ2VzLCBhcnRp

Y2xlcywgc2hvcHBpbmcgbGlzdHMsIG9yIHNvbWUgb3R=

aGVyIGNvdmVydGV4dCBhbmQsIGNsYXNzaWNhbGx5LCB0aGUgaGlkZGVuIG1lc3NhZ2UgbWF5IGJlIGluIGludmm=

c2libGUgaW5rIGJldHdlZW4gdGhlIHZpc2libGUgbGluZXMgb2YgYSBwcml2YXRlIGxldHRlci4NCg0KVGhl

IGFkdmFudGFnZSBvZiBzdGVnYW5vZ3JhcGh5LCBvdmVyIGNy

eXB0b2dyYXBoeSBhbG9uZSwgaXMgdGhhdCBtZXNzYWdlcyBkbyBub3QgYXR0cmFjdCBhdHRlbnRpb25=

IHRvIHRoZW1zZWx2ZXMuIFBsYWlubHkgdmlzaWJsZSBlbmNyeXB0ZWQgbWVzc2FnZXOXbm8gbWF0dGVyIF==

aG93IHVuYnJlYWthYmxll3dpbGwgYXJvdXNlIHN=

dXNwaWNpb24sIGFuZCBtYXkgaW4gdGhlbXNlbHZlcyBiZSBpbmNyaW1pbmF0aW5nIP==

aW4gY291bnRyaWVzIHdoZXJlIGVuY3J5cHRpb24gaXMgaWxsZWdhbC4gVGhlcmVmb3JlLH==

IHdoZXJlYXMgY3J5cHRvZ3JhcGh5IHByb3RlY3RzIHRoZSBjb250ZW50cyBvZj==

IGEgbWVzc2FnZSwgc3RlZ2Fub2dyYXBoeSBjYW4gYmUgc2FpZCB0byBwcm90ZWN0IGJ=

b3RoIG1lc3NhZ2VzIGFuZCBjb21tdW5pY2F0aW5nIHBhcnRpZXMuDQoNClN0ZWdhbm9ncmFwaHkgaW5jbHW=

ZGVzIHRoZSBjb25jZWFsbWVudCBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gY29t

cHV0ZXIgZmlsZXMuIEluIGRpZ2l0YWwgc3RlZ2Fub2dyYXBoeSwgZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9u

cyBtYXkgaW5jbHVkZSBzdGVnYW5vZ3JhcGhpYyBjb2RpbmcgaW5zaZ==

ZGUgb2YgYSB0cmFuc3BvcnQgbGF5ZXIsIHN1Y2ggYXMgYSBkb2N1bWVudCBmaWxlLCBpbWFnZSBmaWx=

ZSwgcHJvZ3JhbSBvciBwcm90b2NvbC4gTWVkaWEg

ZmlsZXMgYXJlIGlkZWFsIGZvciBzdGVnYW5vZ3JhcGhpYyB0cmFuc21pc3Npb+==

biBiZWNhdXNlIG9mIHRoZWlyIGxhcmdlIHNpemUuIEFzIB==

YSBzaW1wbGUgZXhhbXBsZSwgYSBzZW5kZXIgbWlnaHQgc3RhcnQgd2l0aCBh

biBpbm5vY3VvdXMgaW1hZ2UgZmlsZSBhbmQgYWRqdXN0IHRoZSBjb2xvciBvZiBldmVyeSAxMDB0aCBwaXhlbCD=

dG8gY29ycmVzcG9uZCB0byBhIGxldHRlciBpbiB0aGUgYWxwaGFiZXQsIGF=

IGNoYW5nZSBzbyBzdWJ0bGUgdGhhdCBzb21lb25lIG5vdCBzcGVjaWZpY2FsbHkgbG9va2luZyBm

b3IgaXQgaXMgdW5saWtlbHkgdG8gbm90aWNlIGl0Lg0KDQpUaGU=

IGZpcnN0IHJlY29yZGVkIHVzZXMgb2Ygc3RlZ2Fub2dyYXBoeSBjYW4gYmUgdHJ=

YWNlZCBiYWNrIHRvIDQ0MCBCQyB3aGVuIEhlcm9kb3R1cyBtZW50aW9ucyB0d28gZXhhbXBsZXMgb+==

ZiBzdGVnYW5vZ3JhcGh5IGluIFRoZSBIaXN0b3JpZXMgb2Yg

SGVyb2RvdHVzLiBEZW1hcmF0dXMgc2VudCBhIHdhcm5pbmcgYWJvdXQgYSB=

Zm9ydGhjb21pbmcgYXR0YWNrIHRvIEdyZWVjZSBieSB3

cml0aW5nIGl0IGRpcmVjdGx5IG9uIHRoZSB3b29kZW4gYmFja2luZyBvZiBhIHdheCB0YWJsZXQgYmVm

b3JlIGFwcGx5aW5nIGl0cyBiZWVzd2F4IHN1cmZhY2UuIFdheCB0YWJsZXRzIHdlcmUgaW4gY29tbW9uIHVzZV==

IHRoZW4gYXMgcmV1c2FibGUgd3JpdGluZyBzdXJmYWNlcywgc29tZXRpbWX=

cyB1c2VkIGZvciBzaG9ydGhhbmQuIEFub3RoZXIgYW5jaWVudCBleGFtcGxlIGlzIHRoYXQgb9==

ZiBIaXN0aWFldXMsIHdobyBzaGF2ZWQgdGhlIGhlYWQgb2YgaGlzIG1vc3QgdHJ1c3RlZCBz

bGF2ZSBhbmQgdGF0dG9vZWQgYSBtZXNzYWdlIG9uIGl0LiBBZnRlciBoaXMgaGFpciBoYWQgZ5==

cm93biB0aGUgbWVzc2FnZSB3YXMgaGlkZGVuLiBUaGUgcHVycG9zZSB3YXMgdG+=

IGluc3RpZ2F0ZSBhIHJldm9sdCBhZ2FpbnN0IHRoZSBQZXJzaWFucy4NCg0KU3RlZ2Fub2dyYXBoeSBoYXMgYm==

ZWVuIHdpZGVseSB1c2VkLCBpbmNsdWRpbmcgaW4gcmVjZW50IGhpc3RvcmljYWwgdGltZXMgYW5kIHT=

aGUgcHJlc2VudCBkYXkuIFBvc3NpYmxlIHBlcm11dGF0aW9ucyBhcmUgZW5kbGVzcyBhbmT=

IGtub3duIGV4YW1wbGVzIGluY2x1ZGU6DQoqIEhpZGRlbiBtZXNzYWdlcyB3aXRoaW4gd2F4IHRh

YmxldHM6IGluIGFuY2llbnQgR3JlZWNlLCBwZW9wbGUgd3JvdGUgbWV=

c3NhZ2VzIG9uIHRoZSB3b29kLCB0aGVuIGNvdmVyZWQgaXQgd2l0aCB3YXggdXBvbiB3aGljaCBhbiBpbm5vY2Vu

dCBjb3ZlcmluZyBtZXNzYWdlIHdhcyB3cml0dGVu

Lg0KKiBIaWRkZW4gbWVzc2FnZXMgb24gbWVzc2VuZ2VyJ3MgYm9keTogYWxzbyB1c2VkIGluIGFuY2llbt==

dCBHcmVlY2UuIEhlcm9kb3R1cyB0ZWxscyB0aGUgc3Rvcnkgb1==

ZiBhIG1lc3NhZ2UgdGF0dG9vZWQgb24gYSBzbGF2ZSdzIHNoYXZlZCBoZWFkLCBoaWRkZW4gYnkgdGhl

IGdyb3d0aCBvZiBoaXMgaGFpciwgYW5kIGV4cG9zZWQgYnkgc2hhdmluZyBoaXMgaGVhZM==

IGFnYWluLiBUaGUgbWVzc2FnZSBhbGxlZ2VkbHkgY2FycmllZCBhIHdhcm5pbmcgdG8gR3JlZWNlIGFib5==

dXQgUGVyc2lhbiBpbnZhc2lvbiBwbGFucy4gVGh=

aXMgbWV0aG9kIGhhcyBvYnZpb3VzIGRyYXdiYWNrcyz=

IHN1Y2ggYXMgZGVsYXllZCB0cmFuc21pc3Npb24gd2hpbGUgd2FpdGluZyBmb3IgdGhlIHP=

bGF2ZSdzIGhhaXIgdG8gZ3JvdywgYW5kIHRoZSByZXN0cmljdGlvbnMgb3==

biB0aGUgbnVtYmVyIGFuZCBzaXplIG9mIG1lc3M=

YWdlcyB0aGF0IGNhbiBiZSBlbmNvZGVkIG9uIG9uZSBwZXJzb24=

J3Mgc2NhbHAuDQoqIEluIFdXSUksIHRoZSBGcmVuY2ggUmVzaXN0YW5jZSBzZW50IHNvbWUgbWVzc2FnZXMgd2==

cml0dGVuIG9uIHRoZSBiYWNrcyBvZiBjb3VyaWVycyD=

dXNpbmcgaW52aXNpYmxlIGluay4NCiogSGlkZGVuIG1lc3NhZ2VzIG9uIHBhcGVyIHdy

aXR0ZW4gaW4gc2VjcmV0IGlua3MsIHVuZGVyIG90aGVyIG1lc3NhZ2Vz

IG9yIG9uIHRoZSBibGFuayBwYXJ0cyBvZiBvdGhlct==

IG1lc3NhZ2VzLg0KKiBNZXNzYWdlcyB3cml0dGVuIGluIE1vcnNlIGNvZGUgb24ga25pdHRpbmcgeWFybiBhbmQg

dGhlbiBrbml0dGVkIGludG8gYSBwaWVjZSBvZiBjbG90aGluZyB3b3K=

biBieSBhIGNvdXJpZXIuDQoqIE1lc3NhZ2VzIHdyaXR0ZW4gb24gdGhlIGJhY2sgb5==

ZiBwb3N0YWdlIHN0YW1wcy4NCiogRHVyaW5nIGFuZCBhZnRlcm==

IFdvcmxkIFdhciBJSSwgZXNwaW9uYWdlIGFnZW50cyB1c2VkIHBob3RvZ3JhcGhpY2FsbHkgcO==

cm9kdWNlZCBtaWNyb2RvdHMgdG8gc2VuZCBpbmZvcm1hdGlvbiBiYWNrIGFuZH==

IGZvcnRoLiBNaWNyb2RvdHMgd2VyZSB0eXBpY2FsbHkg

bWludXRlLCBhcHByb3hpbWF0ZWx5IGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcGVyaW9kIHByb2R=

dWNlZCBieSBhIHR5cGV3cml0ZXIuIFdXSUkgbWljcm9kb3RzIG5lZWRlZCB0byBiZSBlbWJlZGRlZB==

IGluIHRoZSBwYXBlciBhbmQg路由器登录入口官网 Y292ZXJlZCB3aXRoIGFuIGFkaGVzaXZlIChzdWNoIGFzIGNvbGxvZGlvbikuIFR=

aGlzIHdhcyByZWZsZWN0aXZlIGFuZCB0aHVzIGRldGVjdGFibGUg

Ynkgdmlld2luZyBhZ2FpbnN0IGdsYW5jaW5nIGxpZ2h0LiBBbHRlcm5hdGl2ZSB0ZWNobmlxdWVzIGluY2x1ZGVk

IGluc2VydGluZyBtaWNyb2RvdHMgaW50byBzbGl0cyBjdXQgaW50byB0aGUgZWRnZSBvZv==

IHBvc3QgY2FyZHMuDQoqIER1cmluZyBXb3JsZCBXYXIgSUksIGEgc3B5IGZvciB=

SmFwYW4gaW4gTmV3IFlvcmsgQ2l0eSwgVmVsdmFsZWW=

IERpY2tpbnNvbiwgc2VudCBpbmZvcm1hdGlvbiB0byBhY2NvbW1vZGF0aW9=

biBhZGRyZXNzZXMgaW4gbmV1dHJhbCBTb3V0aCBBbWVyaWO=

YS4gU2hlIHdhcyBhIGRlYWxlciBpbiBkb2xscywgYW5kIG==

aGVyIGxldHRlcnMgZGlzY3Vzc2VkIGhvdyBtYW55IG9mIHRoaXMgb3IgdGhhdCBkb2xs

IHRvIHNoaXAuIFRoZSBzdGVnb3RleHQgd2FzIHRoZSBkb2xsIG9yZGVycywgd2hpbGUgdGhl

IGNvbmNlYWxlZCAicGxhaW50ZXh0IiB3YXMgaXRzZWxmIGVuY2+=

ZGVkIGFuZCBnYXZlIGluZm9ybWF0aW9uIGFib3V0IHNoaXAgbW92ZW1lbnRzLF==

IGV0Yy4gSGVyIGNhc2UgYmVjYW1lIHNvbWV3aGF0IGZh

bW91cyBhbmQgc2hlIGJlY2FtZSBrbm93biBhcyB0aGX=

IERvbGwgV29tYW4uDQoqIENvbGQgV2FyIGNvdW50

ZXItcHJvcGFnYW5kYS4gSW4gMTk2OCwgY3JldyBtZW1iZW==

cnMgb2YgdGhlIFVTUyBQdWVibG8gKEFHRVItMikgaW50ZWxsaWdlbmNlIHNoaXAgaGVsZCBhcyBwcm==

aXNvbmVycyBieSBOb3J0aCBLb3JlYSwgY29tbXVuaWNhdGVkIGluIHNpZ25=

IGxhbmd1YWdlIGR1cmluZyBzdGFnZWQgcGhvdG8gb3Bwb3J0

dW5pdGllcywgaW5mb3JtaW5nIHRoZSBVbml0ZWQgU3RhdGVzIHRoZXkg

d2VyZSBub3QgZGVmZWN0b3JzIGJ1dCByYXRoZXIgd2VyZSBiZWluZyBoZWxkIGNh

cHRpdmUgYnkgdGhlIE5vcnRoIEtvcmVhbnMuIEluIG90aGVyIHBob3Rv

cyBwcmVzZW50ZWQgdG8gdGhlIFVTLCBjcmV3IG1lbWJlcnMgZ2F2ZSAidGhlIGZpbmdlciIgdG8g

dGhlIHVuc3VzcGVjdGluZyBOb3J0aCBLb3JlYW5zLCBpbiBhbiBhdHRlbXB0IHRvIE==

ZGlzY3JlZGl0IHBob3RvcyB0aGF0IHNob3dlZCB0aGVtIHNtaQ==

bGluZyBhbmQgY29tZm9ydGFibGUuDQoNCi0tDQpodHRwOi8vZW4ud2lraXBlZGlhLm9yZw==

L3dpa2kvU3RlZ2Fub2dyYXBoeQ0K

4.发现是bas64隐写,通过脚本解密:

#!/user/bin/envpython

#-*-coding:utf-8-*-

defget_base64_diff_value(s1,s2):

base64chars=\'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/\'

res=0

foriinxrange(len(s1)):

ifs1[i]!=s2[i]:

returnabs((s1[i])-(s2[i]))

returnres

defsolve_stego():

withopen(\'\',\'rb\')asf:

file_lines=nes()

bin_str=\'\'

forlineinfile_lines:

steg_line=e(\'n\',\'\')

norm_line=e(\'n\',\'\').decode(\'base64\').encode(\'base64\').replace(\'n\',\'\')

diff=get_base64_diff_value(steg_line,norm_line)

pads_num=steg_(\'=\')

ifdiff:

bin_str+=bin(diff)[2:].zfill(pads_num*2)

else:

bin_str+=\'0\'*pads_num*2

res_str=\'\'

foriinxrange(0,len(bin_str),8):

res_str+=chr(int(bin_str[i:i+8],2))

printres_str

solve_stego()

5.最终flag为:

flag{Base_sixty_four_point_five}

附录:

base64隐写加密:

#-*-coding:cp936-*-

importbase64

flag=\'Tr0y{Base64isF4n}\'#f言师采药去的上一句 lag

bin_str=\'\'.join([bin(ord(c)).replace(\'0b\',\'\').zfill(8)forcinflag])春夜宴桃李园序李白

base64chars=\'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/\'

withopen(\'\',\'rb\')asf0,open(\'\',\'wb\')asf1:#\'\'是明⽂,\'\'⽤于存放隐写后的base64

nes():

rowstr=base64.b64encode(e(\'n\',\'\'))

equalnum=(\'=\')

ifequalnumandlen(bin_str):

offset=int(\'0b\'+bin_str[:equalnum*2],2)

char=rowstr[len(rowstr)-equalnum-1]

rowstr=e(char,base64chars[(char)+offset])

bin_str=bin_str[equalnum*2:]

(rowst唐诗300首三年级 r+\'n\')

base64隐写解密:

#-*-coding:cp936-*-

b64chars=\'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/\'

withopen(\'\',\'rb\')asf:

bin_str=\'\'

nes():

stegb64=\'\'.join(())

rowb64=\'\'.join((\'base64\').encode(\'base64\').split())

offset=abs((e(\'=\',\'\')[-1])-(e(\'=\',\'\')[-1]))

equalnum=(\'=\')#noequalnumnooffset

ifequalnum:

bin_str+=bin(offset)[2:].zfill(equalnum*2)

print\'\'.join([chr(int(bin_str[i:i+8],2))foriinxrange(0,len(bin_str),8)])#8

⼗⼀、linux系统⽂件隐写

writeup:

⽅法⼀:

打开压缩包,搜索⽂本flag,找到和它的路径:/O7avZhikgKgbF/

root/Desktop/file/O7avZhikgKgbF/

2.⽤7-zip打开img⽂件,根据路径找到,得到关键信息:

ZmxhZ3tzYWpiY2lienNrampjbmJoc2J2Y2pianN6Y3N6Ymt6an0=

⽅法⼆:

1.可以先⽤file查看⼀下⽂件信息,该⽂件是linux的系统⽇志⽂件

2.使⽤strings命令查看指定⽂件下有没有flag这样的字符串

3是⼀个⽇志⽂件系统,常⽤于Linux操作系统,所以把它挂载到linux系统上(mnt⽬录)

root@kali:/opt#mountf1fc23f5c743425d9e0073887c846d23/mnt

⽅法三:

1.拿到附件后直接拖进winhex现有kalilinux字样就把该⽂件拖到kali⾥⾯

2.使⽤binwalk提取⽂件,发现⾥⾯有⼀个压缩包,其中有

3.使⽤foremost分离⽂件

4.得到了⼀个output⽂件夹,内含zip,zip⾥⾯含有,但是有密码加密

最终通过base64解密得到flag:

flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}

⼗⼆、流量包隐写之jpg

writeup五柳先生传注音 :

1.使⽤wireshark分析,在wieshark中的编辑---查找分组--分组详情,字符串,中搜索字符串,,进⾏查找分析

2.发现有多个的数据组,查找到第1150个包时,追踪流才看到,所以就多点了⼏次查找,终于让我给找到密码信息了,那就是名为这张图⽚

3.右键点击,选择追踪流中的http流查看

⽂件以FFD8开头,FFD9结尾,所以图⽚内容在哪⼀块就很明显了

8FF是jpg⽂件的⽂件头,附上各类图的⽂件头:

6.把以FFD8开头、FFD9结尾的这部分复制,并在winhex中新建⽂件并粘贴,注意粘贴格式选择为ASCIIHex(建议先全选复制到记事本然后删去头尾⽐较⽅便),放到

winhex⾥⾯新建⼀个⽂件,以ASCIIHex的形式复制进去,保存为jpg⽂件

7.另存为jpg⽂件,查看jpg⽂件,将其填⼊flag,发现不是flag。

8.通过上述知道foremost分离⽂件中的zip⽬录下有个加密的压缩⽂件:(该⽂件通过伪加密进⾏解压发现⽂件破坏,并通过暴⼒破解也⽆果)

这⾥的密码有可能就是上述wireshark分析出来jpg⽂件图⽚显⽰的密码:Th1s_1s_p4sswd_

9.查看⽂件最终获得flag:

flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}

⼗三、gif图⽚隐写⼆

writeup:

1.使⽤stegsolve⼯具载⼊图⽚,根据提⽰GoGreen,当图⽚左右调整到Greenplane0的时候,显⽰重叠的flag值

2.最终获得flag:IceCTF{420_CuR35_c4NCEr}

⼗四、C语⾔编译执⾏

writeup:

1.获取c语⾔源码

flag.c

#include

#include

voidmain(){

charstr[100]=\"\";

inti;

intlen;

printf(\"inputstring:n\");

gets(str);

len=strlen(str);

printf(\"result:n\");

for(i=0;i

{

putchar(str[len-i]);

}

printf(\"n\");

}

2.在kali系统中通过gcc编译成

$gccflag.c-oflag

$./flag

inputstring:

warning:thisprogramusesgets(),whichisunsafe.

ba1f2511fc30423bdb

result:

bdb32403cf1152f1ab

最终获得flag:

bdb32403cf1152f1ab

⼗五、flag格式取反

题⽬:

}~144_0t_em0c14w{galf根据galf这个提⽰说明flag反了,那么所有都要反转过来

wirteup:

flag{w41c0me_t0_441~}

⼗六、⼗六进制转ASCII码

题⽬:

666c61677b686578327374725f6368616c6c656e67657d

writeup:

1.发现该字符串为⼗六进制,可转换为ASCII,通过以下在线转换

2.最终获得flag:

flag{hex2str_challenge}

⼗七、rc4密码解密

题⽬:

rc4的key为,welcometoicqedu

加密密码为:UUyFTj8PCzF6geFn6xgBOYSvVTrbpNU4OF9db9wMcPD1yDbaJw==,求明⽂

writetup:

1.通过python脚本解密

importrandom,base64

fromhashlibimportsha1

defcrypt(data,key):

x=0

box=range(256)

foriinrange(256):

x=(x+box[i]+ord(key[i%len(key)]))%256

box[i],box[x]=box[x],box[i]

x=y=0

out=[]

forcharindata:

x=(x+1)%256

y=(y+box[x])%256

box[x],box[y]=box[y],box[x]

(chr(ord(char)^box[(box[x]+box[y])%256]))

return\'\'.join(out)

deftdecode(data,key,decode=base64.b64decode,salt_length=16):

ifdecode:

data=decode(data)

salt=data[:salt_length]

returncrypt(data[salt_length:],sha1(key+salt).digest())

if__name__==\'__main__\':

data=\'UUyFTj8PCzF6geFn6xgBOYSvVTrbpNU4OF9db9wMcPD1yDbaJw==\'

key=\'welcometoicqedu\'

decoded_data=tdecode(data=data,key=key)

printdecoded_data

2.也可通过在线⼯具:

最终得到flag:flag{rc4_l_keepgoing}

⼗⼋、⼆进制隐写

writeup:

1.使⽤winhex打开,查看前后没有什么信息,使⽤ctrl+f查找关键字flag,找到答案

2.最终获得flag:

flag{re_start_007}

⼗九、MD5解密

题⽬:

听说这是某个数据库的泄漏的重要数据,25d55ad283aa400af464c76d713c07ad,试着找出原始key吧。flag{key}

writeup:

1.数据库泄露的重要数据?那猜想应该是md5加密,且了解字符的话就会知道是MD5,所以在线MD5解密

2.最后获得flag:

flag{12345678}

⼆⼗、凯撒密码

题⽬:

其中字符为:gmbh{4d850d5c3c2756f67b91cbe8f046eebd}

writeup:

1.刚开始也不知道什么密码,通过crackt00ls⼯具进⾏⼀个个测试,发现其中字符含有flag的最像,并且题⽬中出现中考眼⼒,说明要多选中选⼀个,只有凯撒密码符合。

其中解密凯撒密码的python脚本:(这⾥脚本加密信息为⼩写那么它的key也为⼩写,如果是⼤写,KEY也是⼤写)

importpyperclip

message=\'gmbh{4d850d5c3c2756f67b91cbe8f046eebd}\'

LETTERS=\'abcdefghijklmnopqrstuvwxyz\'

forkeyinrange(len(LETTERS)):

translated=\'\'

forsymbolinmessage:

ifsymbolinLETTERS:

num=(symbol)

num=num-key

ifnum<0:

num=num+len(LETTERS)

translated=translated+LETTERS[num]

else:

translated=translated+symbol

print(\'Key#%s:%s\'%(key,translated))

2.使⽤⼯具解密:

3.最终得到flag:

flag{4c850c5b3b2756e67a91bad8e046ddac}

⼆⼗⼀、图⽚影写之zip爆破

writeup:

1.通过binwalk对⽂件进⾏分离

分出来⼀个含有密码的压缩包,其中⾥⾯含有⼀个Txt和⼀个png。

2.使⽤⼯具ziperello对zip⽂件进⾏破解,密码为:34878956

3.解压出压缩⽂件来

4.打印该图⽚,然后剪切,拼起来扫码获得flag(或者使⽤ps软件把她扣出来,在进⾏组合拼图)

5.最终扫描获得flag:

flag{e7df63cb-2786-4c2c-99f9-faeee4354359}

⼆⼗⼆、Rot13解密

题⽬:

所以这是13点吗?synt{mur_VF_syn9_svtug1at}

writeup:

1.根据题⽬内容,猜测是rot13解密,那么通过在线⼯具

2.离线⼯具crackt00ls⼯具进⾏解密

脚本解密

#coding:utf-8

importstring

defdecoder(crypt_str,shift):

crypt_list=list(crypt_str)

plain_str=\"\"

num=int(shift)

forchincrypt_list:

ch=ord(ch)

iford(\'a\')<=chandch<=ord(\'z\'):

ch=ch+num

ifch>ord(\'z\'):

ch-=26

iford(\'A\')<=chandch<=ord(\'Z\'):

ch=ch+num

ifch>ord(\'Z\'):

ch-=26

a=chr(ch)

plain_str+=a

print(plain_str)

crypt_str=raw_input(\"Crypto_text:\")

print\"!------decode------!\"

shift=13

decoder(crypt_str,shift)

4.最终获得flag:

flag{zhe_IS_fla9_fight1ng}

⼆⼗三、莫斯密码解密

题⽬:

..-..-...---..--....-----.-..-.....-.-.-..-....---...-..-...----.-....-....--....-...---....-----....-----.....---....-.----.-..-.---..-....--...---..---...----..-.-------...

writeup:

1.通过在线⼯具解密:

/

flage71ca5cd-7db9-4ba3-9383-1af867881f07

2.最终得到flag:

flag{e71ca5cd-7db9-4ba3-9383-1af867881f07}

⼆⼗四、栅栏密码

题⽬:

⼭岚,f5-lf5aa9gc9{-8648cbfb4f979c-c2a851d6e5-c}

writeup:

1.根据题⽬内容⼭岚和栅栏谐⾳,猜测是栅栏加密,通过crackt00ls⼯具进⾏解密,其中字符就包含了flag,那么确认猜测没错。

2.通过python脚本进⾏解密

#!/usr/bin/envpython

#-*-coding:utf中庭地白树栖鸦拼音 _8-*-

e=raw_input(\'pleasinputsringn\')

elen=len(e)

field=[]

foriinrange(2,elen):

if(elen%i==0):

(i)

forfinfield:

b=elen/f

result={x:\'\'forxinrange(b)}

foriinrange(elen):

a=i%b;

({a:result[a]+e[i]})

d=\'\'

foriinrange(b):

d=d+result[i]

print\'whileist\'+str(f)+\'t\'+\'lan:\'+d

3.最终得到flag:

flag{6cb9c256-5fac-4b47-a1ec-59988ff9c8d5}

⼆⼗五、Unicode转ascii

题⽬:

u0066u006cu0061u0067u007bu0074u0068u0031u0073u005fu0069u0073u005fu0055u006eu0031u0063u0030u0064u0065u005fu0079u006fu0075u005fu004bu006eu006fu0077u00

writeup:

1.根据编码格式,发现u就是unicode编码,通过crackt00ls⼯具转换成ascii

2.最终获得flag:

flag{th1s_is_Un1c0de_you_Know?}

⼆⼗六、XXencode编码

题⽬:

XX?字符:LNalVNrhIO4ZnLqZnLpVsAqtXA4FZTEc+

writeup:

基础知识:

XXEncode是⼀种⼆进制到⽂字的编码!它跟以及Base64编码⽅法很类似。

它也是定义了⽤可打印字符表⽰⼆进制⽂字⼀种⽅法,不是⼀种新的编码集合。XXEncode将输⼊⽂本以每三个字节为单位进⾏编码,

如果最后剩下的资料少于三个字节,不够的部份⽤零补齐。三个字节共有24个Bit,

以6-bit为单位分为4个组,每个组以⼗进制来表⽰所出现的字节的数值。这个数值只会落在0到63之间。它64可打印字符固定字符范围及顺序!

包括⼤⼩写字母、数字以及+-字符。它较UUEncode编码优点在于它64字符是常见字符,没有任何特殊字符!

Xxencode编码原理:

XXencode将输⼊⽂本以每三个字节为单位进⾏编码。如果最后剩下的资料少于三个字节,不够的部份⽤零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以⼗进制来表⽰所出现的数值只

每60个编码输出(相当于45个输⼊字节)将输出为独⽴的⼀⾏,每⾏的开头会加上长度字符,除了最后⼀⾏之外,长度字符都应该是“h”这个字符(45,刚好是64字符中,第45位\'h\'字符),最后⼀⾏的长

问题:uuencode编码转换为xxencode编码怎么样操作?从编码原理来看,⼏乎⼀样。就是所⽤的64个字符不⼀样。⼀次,简单对uuencode转换后字符,逐位(处理\'`\'字符)减去32,然后得到⼀个值。这

XXencode编码转换过程:

字符串:\'Cat‘编码后是:Eq3O

writeup:

1.根据题⽬名称xx,可将xxencode编码转ascii

2.最终获得flag:

flag{This_is_Xx3nc0de}

⼆⼗七、base32解密

题⽬:

我喜欢贝丝,但是贝丝的表妹喜欢我

还给了我⼀封情诗

MZWGCZ33MVZGQZLJL5STQOJTGRPWK4SVJ56Q====

writeup:

base家族有base64,base32,base16

16编码是包含了数字(0~9)和⼤写字母(A~F),Base32编码与Base64编码最⼤区别是前者没有⼩写字母.Base32编码可以⽤于⽂件系统的名称(不区分⼤⼩情况).⽽Base64编

码后数据量相⽐原先不是增加很多,可以⽤于⽹络传输.

2.根据特征是base32

3.那么可以通过在线⼯具进⾏解密

4.最终获得flag:

flag{erhei_e8934_erUO}

⼆⼗⼋、键盘布局加密

题⽬:

⽅⽅格格,不断敲击

“wdvtdzqsxdrwerdzxcesxcfruygbn”

flag格式为:flag{⼩写的字符串}

writeup:

1.根据提⽰我们可以猜到这个是采⽤了键盘拼写⽅式得出的键盘布局图形样式:(这块最好⽤画按照键盘画好)

wdvtdzx

qsxdrv

werdzxcz

esxcfro

uygbnc

2.最终组合起来为:xvzoc

原始字符Cat

原始ASCII码(⼗进制)6797116

ASCII码(⼆进制)

新的⼗进制数值1654552

编码后的XXencode字符Eq3O

flag为:flag{xvzoc}

⼆⼗九、⼗进制与⼗六进制转换

题⽬:

低频ID卡数据格式转换⼩常识

将下列16进制串中倒数第5,6位转换为3位⼗进制数,

将最后4位转换为5位⼗进制卡号,中间⽤“,”分开。

writeup:

1.根据提⽰,先将⼗六进制94转换为⼗进制148,然后再将⼗六进制4664转换成⼗进制18020

它们之间以逗号分隔,最终组合得到,前⾯000需要去掉。

2.最终获得flag:

flag{148,18020}

三⼗、⼆进制转ascii

题⽬:

让我们回到最开始的地⽅

101

wriiteup:

1.通过在线⼯具进⾏解密

2.通过pyhon脚本解密

三⼗⼀、base16解密

题⽬:

有⼀天,表姐的好朋友贝丝远房的表亲,⼀个16岁的少年

给表姐递了⼀封情书,表姐看不懂,你能帮忙翻译下吗?

666C61677B65633862326565302D336165392D346332312D613031322D37D

writeup:

1.根据题⽬含义16岁少年,并且是含有贝丝,猜测为base16解密

2.通过在线⼯具进⾏解密

3.最终获得flag:

flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

三⼗⼆、邮件头中的Quoted-printable编码

题⽬内容:

flag{ichunqiu_=E6=8A=80=E6=9C=AF=E6=9C=89=E6=B8=A9=E5=BA=A6}

基础知识:

Quoted-printable可译为“可打印字符引⽤编码”、“使⽤可打印字符的编码”,我们收邮件,查看信件原始信息,经常会看到这种类型的编码!

任何⼀个8位的字节值可编码为3个字符:⼀个等号”=”后跟随两个⼗六进制数字(0–9或A–F)表⽰该字节的数值

writeup:

1.通过在线解码

2.最终获得flag:

flag{ichunqiu_技术有温度}

三⼗三、变形的培根密码

题⽬内容:

⿇辣烫的标配。flag{abbab_babbb_baaaa_aaabb}

writeup:

1.根据题⽬内容包括abab循环,从特征上看是培根密码,这⾥需要将下划线去掉,最终得到:abbabbabbbbaaaaaaabb

2.通过在线解密⼯具,即可获得flag

3.通过不断测试,发现是⼤写,并且按照原来的下划线,则是flag:

flag{N_X_Q_D}

三⼗四、jpg图⽚影写⼀

题⽬:

给出⼀张隐藏在图⽚中的flag

writeup:

1.通过notepad,直接搜索关键字:flag

2.最终获得flag:

flag{stego_is_s0_bor1ing}

三⼗五、猪圈密码

题⽬:

给出⼀张图,2个长⽅形⾥⾯有个点

基础知识:

猪圈密码(亦称朱⾼密码、共济会暗号、共济会密码或共济会员密码),是⼀种以格⼦为基础的简单替代式密码。即使使⽤符号,也不会影响密码分析,亦可⽤在其它替代式的

⽅法。

下⾯为猪圈密码对应表:

writeup:

根据猪圈对应表,即可获得flag:

flag{NSN}

三⼗六、键盘坐标密码

题⽬内容:

哒哒哒哒,你知道什么是键盘坐标密码吗?

334

flag格式:flag{*****

基础知识:

我们注意到⼤键盘区所有的字母上⾯都有其对应的数字,这个位置⼏乎在所有的键盘都是相同的。所以我们可以利⽤这⼀点应⽤单表替换的⽅法进⾏加密[注2]:

1234567890

QWERTYUIOP

ASDFGHJKL

ZXCVBNM

我们根据上表可以得出,Q是1下⾯的第⼀个,A是1下⾯的第⼆个……以此类推,每⼀个字母都会有其对应的数字:

A12B53C33

第⼀个数字代表横向(X坐标)的位置,第⼆个数字代表纵向(Y坐标)的位置

writeup:

根据上⾯对应表,可获得flag:

flag{QAZIJCV}

三⼗七、变形的莫斯密码

题⽬内容:

贝克街旁的圆形⼴场

------

writeup:

1.题⽬给的这种字符⼀般解不出------,⼀般模式电码是点在下⾯,横在上⾯.改成:

.-..-..-..-..-..-..

2.通过crackt00ls⼯具解密

2.通过在线解密

3.最终获得flag:这⾥没说⼤⼩写,试出来是⼤写

flag{RRRRRRE}

三⼗⼋、brainfuck加密

题⽬内容:

++++++++++[->++++++++++<]>++.++++++.<+++[->---<]>--.++++++.<

++++[->++++<]>++++.<++++++++[->--------<]>-----.+.------.<++

+++++[->+++++++<]>++++.----.<++++++[->------<]>--------.----

--.++++++++.<+++[->---<]>--.+++++.++++.-.<++++++[->++++++<]>

++++++++.<+++++++[->-------<]>---.+++++++.+++++.-------.<+++

++++[->+++++++<]>+++.<+++++++[->-------<]>--------.<+++++++[

->+++++++<]>+++.<+++++++[->-------<]>.++++.---.----.<+++++++

[->+++++++<]>++++.<++++++[->------<]>-----------.---.<++++++

+[->+++++++<]>+..<++++++[->------<]>------.---.+.+++.-----.+

++++.---------.<++++++++[->++++++++<]>+++++++++++++.<

基础知识:

例:

.

!Ook?Ook!Ook!?.

.

??Ook!?!.

!?.

!Ook?Ook!Ook!?Ook!Ook!Ook!Ook!

Ook!Ook!Ook??Ook!?Ook!Ook!Ook!Ook!Ook!.

!?Ook.

!Ook?Ook!Ook!?Ook.

??Ook!?.

!?.

!Ook?Ook!Ook!?Ook!Ook!Ook!Ook!Ook!Ook!Ook?Ook.

Ook?Ook!?Ook!Ook!Ook!Ook!Ook!Ook!Ook!!Ook!Ook!

Ook!Ook!Ook!Ook!Ook!Ook!?.

!Ook?Ook!Ook!?Ook!

Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook?Ook.

Ook?Ook!?Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!

Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!

Ook!?.

!Ook?Ook!Ook!?.

??Ook!?Ook.

!?.

!Ook?Ook!Ook!?.

??Ook!?!Ook.

Ook?!Ook?Ook!Ook!?Ook!

Ook!Ook!Ook!Ook!Ook!Ook??Ook!?Ook!Ook!Ook!Ook!

Ook!Ook!Ook!Ook!Ook!Ook!Ook!?.

!Ook?Ook!Ook!?

Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook?

?Ook!?Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!

Ook!Ook!Ook!Ook!Ook!Ook!Ook!.

!!!!Ook.

Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!

?.

!Ook?Ook!Ook!?.

??Ook!?.

!!.

.

!!Ook!Ook!Ook!Ook!Ook!Ook!Ook!Ook!.

!?.

!Ook?Ook!Ook!?.

??Ook!?.

!?Ook.

为Ook!编码后如下图:

++++++++++[->++++++++++<]>++.++++++.<+++[->---<]>--.++++++.<

++++[->++++<]>++++.<+++[->---<]>---.----.<+++++++[->-------<

]>-------------.<+++++++[->+++++++<]>+++++.<+++++++[->------

-<]>.<++++++++[->++++++++<]>++.<+++[->---<]>-----.<+++++++[-

>-------<]>--------.++++++..+++++.+.<+++[->---<]>---.<++++++

+[->+++++++<]>+++.+++.+++++++++.----.+++++.<+++[->+++<]>++++

++.<

writeup:

1.通过在线解密即可获得flag:

/services/ook

2.最终flag:

flag{671fb608-265a-492f-a041-b30bb8569490}

三⼗九、压缩包多⽂件隐写之flag

题⽬内容:

压缩包中包含多个⽂件,且每个⽂件有⼀个字母

writeup:

1.通过notepad发现每个⽂件中含有⼀个字母

2.通过cmd命令和管道符合即可批量将⽂件中的内容输出到⼀个⽂件中

进⼊解压后的⽬录,然后输⼊cmd命令:

typedabiaojie*>>

3.通过notepad查看,进⾏重新组合,去掉后⾯没⽤的字母(中括号后⾯的字母)

4.最终获得flag:

flag{0a47061d-0619-4932-abcd-5426f4ea34aa}

四⼗、zip明⽂加密

题⽬内容:

讲真的,才华已经枯竭

⼤家好好答题

也许这道题⼀点都不坑

也许。。。。。

wirteup:

1,先⽤zip伪加密破解,但是打开错误,也通过winhex查看zip⽂件政策

2.然后剩下zip破解了,这⾥有个提⽰是5句话,考虑5句话,可能就是密码字符长度为5位数,通过zippasswordtool对其破解,并且也说很简单不吭,说明是5位数字

3.最终破解为密码:12345,通过密码解压出⽂件并查看⽂件,最终获得flag:

flag{319b7f63-e17d-4ac5-8428-c2476c7ecce3}

四⼗⼀、波利⽐奥斯棋盘加密

题⽬内容:

需要帮助我将这个波斯传来的“波利⽐奥斯棋盘”上的秘密解决掉

华夜拿到该棋盘,只见棋盘盒上分布着⼀串⼗分奇异的数字:

“35343_434145114215_2”

flag格式:flag{****}全为⼩写字符串

基础知识:

波利⽐奥斯矩阵为排列顺序的⼀种数字与字母的密码表,当然每个国家的密码排布并不⼀样,这⾥只展⽰最常⽤的⼀种排布⽅式。如图所⽰,它是⼀个6⾏6列的矩阵,第⼀⾏为数字1~5,第⼀列也为数字

它们的坐标读取并不是我们习惯的⾏列读取,⽽是与之列⾏读取。⽐如字母“B”,⽤数字表⽰它就是“12”,⽽不是“21”。⽐如要表达单词“HELP”,则写成密码就是23153135。

判断是否是⽤棋盘密码破解的⽅式页很简单,只要出现数字是成双出现的数组串,⽽且有出现最⼤数字⼤于26的,那是棋盘密码的可能性就很⼤。

writeup:

1.题⽬重要的部分是“波利⽐奥斯棋盘”和⼀串数字“35343_434145114215_2”

2.百度波利⽐奥斯棋盘,简单的来说就是把字母排列好,⽤坐标的形式表现出来。字母是密⽂,明⽂便是字母的坐标。它是⼀个6⾏6列的矩阵,第⼀⾏为数字1~5,第⼀列也为数字1~5,表⾥是26个字母

3.把数字每两位分成⼀组,然后按照⾏列的⽅式找出字母,⽐如35就是第3⾏的第5列为P,以此类推

35343_434145114215_2

POLYBI/JUSSQUARECI/JPHER

4.题⽬提⽰⼩写字母,所以构造flag{polybius_square_cipher},注:这⾥的24有两个对应的字母,尝试i是正确的,⽽j是错误的,且和原来的格式要保持⼀致。

四⼗⼆、base64隐写之藏头诗

题⽬内容:

他将这⾸残诗刻在了通往第四层虚数空间的通关法诀上

只有填满句诗词,才能⾛出这层虚数空间

5LiD5pyI5Zyo6YeOICA=

5YWr5pyI5Zyo5a6HIA==

5Lmd5pyI5Zyo5oi3

writeup:

1.通过base64在线解密⼯具获得三个base64解密(本地解密⼯具会出现乱码,可能式编码问题)

2.解密出:

七⽉在野

⼋⽉在宇

九⽉在户

3.通过百度搜索,发现它的下⼀句是:⼗⽉蟋蟀⼊我床下

4.最终flag:

flag{⼗⽉蟋蟀⼊我床下}

四⼗三、特殊⼆进制转ascii

题⽬:

1111

1111

00100

00010

111111

writeup:

1.下载是⼆进制的⽂本

2.可以看到⼆进制是⼋位数,通过在线⼯具进⾏解密

/str/

3.⼆进制转⼗六进制,在对照ASCII码转为相应的字符

4.最后答案将其下划线去掉,重新组合成flag:

IceCTF{al1_my_bases_are_yours_and_all_y0ur_bases_are_mine}

四⼗四、PNG图⽚隐写⼀

writeup:

1.⽤StegSolve提取三个颜⾊的rgb值,之后会得到⼀张图⽚。

2.以⽤SetgSolve提取出图,点击Analyse->DataExtract,在弹出的窗⼝中把Rad,Green,Blue都勾上,然后点击Preview

3.会发现头部是PNG,表⽰这是⼀张PNG图⽚,然后点击SaveBin,把图⽚提取出来打开,就出现了flag

4.最终获得flag:

IceCTF{puT_Th4t_1n_yoUr_cOlOrin9_Book_4nD_5moKe_1T}//cOlOrin9中的L是⼩写的

四⼗五、GIF图⽚隐写

writeup:

1.下载附件,是⼀个Gif⽂件,但是提⽰格式错误打不开。使⽤notepad++打开⽂件,发现⽂件头开头是9a,然⽽Gif⽂件格式开头应该是GIF89a

发现⽂件头为”3961”,并⾮正常的”474946383961”(对应ascii码为GIF89A)或”474946383761”(对应ascii码为GIF87A),故尝试在头部添加”47494638”

2.使⽤winhex对图⽚进⾏编辑,在头部添加数据:47494638,粘贴--剪切板数据--粘贴--asciihex。最终可以看到头部为:GIF89a开头

2.保存⽂gif⽂件,使⽤stegsolve⼯具中analyse--framebrowoser

3.即可获得flag

flag{2017_love_U}

四⼗六、jpg图⽚隐写⼆

writeup:

1.下载附件,并解压,得到⼀张很⼤的图⽚,然后查看图⽚属性或者通过notepad搜索关键字flag即可获得

2.最终flag为:

flag{I_I-0_0-*_*}

四⼗七、流量包隐写

writeup:

1.通过下载流量包,从⽂件名后缀pcapng来看是⼀个抓包⽂件,但是使⽤wireshark⽆法识别打开

2.找⼀个正常的pcapng⽂件对⽐⽂件头,对的⽂件头进⾏对应修改,修改后仍然⽆法打开

3.使⽤对中的可打印字符进⾏提取,保存到⽂件中,命令

>

4.打开,搜索flag,即可获得flag:

5.实际上直接notepad++打开搜索kill或者flag,更快找到答案,但因为⽂件有2M多,肯能会有点卡。

6.最终获得flag:

flag{roses_r_blue_violets_r_r3d_mayb3_harambae_is_not_kill}

四⼗⼋、破损的流量包隐写

writeup:

1.⽂件是cap包,⽤wireshark打开这个cap包,出现异常现象:

3.进⾏在线修复,修复完毕后⽤wireshark打开,查找分组字节流-字符串-flag:

4.或者通过notepad,搜索flag关键字,发现提⽰whereistheflag

5根据上⾯规律可⾔看到输⼊顺序是从右到左边,都是每次发送2个数据包,值需要取其中⼀个就⾏了

6.最终得到flag:

flag{aha!_you_found_it!}

四⼗九、编码

题⽬名称:

Bubble

基础知识:

BubbleBabbleBinaryDataEncoding是由AnttiHuima创建的⼀种编码⽅法,可以把⼆进制信息表⽰为由交替的元⾳和辅⾳组成的伪词(pseudo-words),主要⽤于密码指纹,

其编码也具有内置的纠错和冗余。编码格式每5个字符中间以-来分隔,作者的原意就是想把难以记得的⼆进制数据表⽰为难忘的伪词。

writeup:

1.下载附件,查看⽂件信息是⼀组字符串:

xinik-samak-luvag-hutaf-fysil-notok-mepek-vanyh-zipef-hilok-detok-damif-cusol-fezyx,并且是每个字节以-分隔,符合buddle加密

2.通过在线⼯具可以进⾏解密

3.通过python脚本解码:

frombubblepyimportBubbleBabble

str=\'xinik-samak-luvag-hutaf-fysil-notok-mepek-vanyh-zipef-hilok-detok-damif-cusol-fezyx\'

bb=BubbleBabble()

print((str))

4.最终获得flag:

flag{Ev3ry7hing_i5_bubb13s}

五⼗、lzip⽂件隐写

writeup:

1.下载⽂件,打开看到如下,通过winhex软件打开的界⾯

2.利⽤linux下⾯的命令xxd,可以将类似⽂本转换为⽂件

|xxd-r>thorfile//查看⼗六进输出,并通过xxd-r转换成⼆进制⽂件

3.使⽤winhex打开⽂件thorfile,发现⽂件头为LZIP

5.在linux下使⽤lzip命令对⽂件进⾏解压

lzip-dthorfile//对lzip⽂件进⾏解压,得到⽂件

6.使⽤winhex打开⽂件,⽂件头为有JFIF,⽂件头格式为:⽂件头:FFD8FFE0(JPEG(jpg))

7.将⽂件名后缀修改为jpeg,打开⽂件看到图⽚,看到答案

8.最终得到flag

IceCTF{h3XduMp1N9_l1K3_A_r341_B14Ckh47}

五⼗⼀、mid⾳乐⽂件隐写

writeup:

1.附件下载,然后使⽤winhex查看⽂件信息,发现⽂件头是mid格式

2.修改后缀名⽂mid格式可以播放

3.通过winhex观察,包含了关键字iceCTF(都是2个字母含末尾字母d,取前⾯字母)

4.发现d前⾯的字母可以组合成flag

IceCTF{HAck1n9_mU5Ic_W17h_mID15_L3t5_H4vE_a_r4v3}

五⼗⼆、⼗六进制转⼆维码

题⽬内容:

0x00000000

0xff71fefe

0x83480082

0xbb4140ba

0xbb6848ba

0xbb4a80ba

0x83213082

0xff5556fe

0xff5556fe

0x00582e00

0x576fb9be

0x707ef09e

0xe74b41d6

0xa82c0f16

0x27a15690

0x8c643628

0xbfcbf976

0x4cd959aa

0x2f43d73a

0x5462300a

0x57290106

0xb02ace5a

0xef53f7fc

0xef53f7fc

0x00402e36

0xff01b6a8

0x83657e3a

0xbb3b27fa

0xbb5eaeac

0xbb1017a0

0x8362672c

0xff02a650

0x00000000

writeup:

approachproblemswithafreshperspectiveandtrytovisualizetheproblemathand,意思是将其内容转换成图像化

2.根据上⾯内容可知道是⼗六进制,我们可以将16进制数转化为图像,这⾥先尝试将16进制转换为⼆进制

000000000

111111110

010000010

010111010

010111010

010111010

010000010

111111110

110000000

110111110

111111110

111010110

100010110

010010000

000101000

101110110

110101010

100111010

000001010

100000110

001011010

111111100

000110110

010101000

000111010

111111010

111101100

110100000

100101100

001010000

000000000

3.这⾥看起来有点像⼀个⼆维码,可将0转化为⽩⾊,1转化为⿊⾊,通过以下python脚本进⾏转换成⼆维码

#!/usr/bin/envpython

#-*-coding:utf-8-*-

fromPILimportImage

importnumpyasnp

defhex2bin(hexmat):

binmattemp=[bin(m)[2:]forminhexmat]#全转成⼆进制

rowlen=max([len(m)forminbinmattemp])#取最宽的值

binmat=[[0]+[int(b)(rowlen)]forrowinbinmattemp]#⽤0补齐

printrowlen+1,\'x\',len(binmat)

foriinxrange(len(binmat)):

print\'\'.join([str(b)forbinbinmat[i]])

returnbinmat,rowlen+1,len(binmat)

defrm_col(binmat,col):#移除指定的列

return[row[:col]+row[col+1:]forrowinbinmat]

defmake_bw_img(binmat,w,h,outfilename,blackbit=0):

bwmat=[[0ifb==blackbitelse255forbinrow]forrowinbinmat]#⽤255表⽰⽩,0表⽰⿊

imagesize=(w,h)

img=ray(8((bwmat)))

(outfilename)

if__name__==\'__main__\':

hexmat=[0x00000000,

0xff71fefe,

0x83480082,

0xbb4140ba,

0xbb6848ba,

0xbb4a80ba,

0x83213082,

0xff5556fe,

0x00582e00,

0x576fb9be,

0x707ef09e,

0xe74b41d6,

0xa82c0f16,

0x27a15690,

0x8c643628,

0xbfcbf976,

0x4cd959aa,

0x2f43d73a,

0x5462300a,

0x57290106,

0xb02ace5a,

0xef53f7fc,

0x00402e36,

0xff01b6a8,

0x83657e3a,

0xbb3b27fa,

0xbb5eaeac,

0xbb1017a0,

0x8362672c,

0xff02a650,

0x00000000]

binmat,w,h=hex2bin(hexmat)

binmat=rm_col(binmat,22)#发现第七⾏和第22⾏多余,故删除

binmat=rm_col(binmat,7)

make_bw_img(binmat,w,h,\'matrix_\',blackbit=1)

4.最终会⽣成⼀张⼆维码图⽚以及显⽰转换成的⼆进制

5.通过在线扫描⼆维码识别

6.最终扫描获得flag:

IceCTF{HAck1n9_mU5Ic_W17h_mID15_L3t5_H4vE_a_r4v3}

五⼗三、流量⽂件隐写之数据包序号sha256解密

writeup:

1.通过附件下载⽂件,获得⽂件,然后通过linux下的命令file查看⽂件类型,发现是pcap⽂件

2.将后缀名改为,通过wireshark打开进⾏分析,我们通过扫描⾏为知道ping扫描基本是icmp协议,这⾥搜索icmp协议

3.这⾥查找ping扫描次数分析,每次都是⼀对请求和响应包,包括request(请求)和reply(应答)

4.根据扫描发现第四次是192.168.0.199--->192.168.0.99(icmp)

5.前三次对99⽬标机的攻击都是由9发起的,到第四次变成了199,序号分别为:

192.168.0.9发起第1次攻击数据包序号:1

192.168.0.9第2次攻击数据包序号:148007

192.168.0.9第3次攻击数据包序号:150753

192.168.0.199第4次攻击数据包序号:155989

6.通过在线sha256⽣成

7.最终⽣成flag:

PCTF{0be2407512cc2a40bfb570464757fd56cd0a1d33f0bf3824dfed4f0119133c12}

五⼗四、apk⽂件隐写

writeup:

1.下载附件apk,然后通过对其进⾏反编译出源码

2.通过⼀个个⽂件查找关键字ctf,这⾥在misc100resrawhere⽂件中找到,通过notepad搜索出ctf关键字

3.最终获得flag:

ctf{adkankjasnfmasncmansddfmnasm}

五⼗五、zip明⽂攻击与盲⽔印

writeup:

1.解压出来是这样的

⾥是这样的

:

3.⽤winrar软件对图⽚raopen_压缩成open_⽂件

4.⽐较两个⽂件的是否为同⼀⽂件,这⾥⽐较CRC32的值

5.使⽤⼯具AdvancedArchivePasswordRecover进⾏明⽂攻击

6.点击start,开始对⽐筛选key,速度很快,⼀会就解密成功,如下所⽰:

7.筛选很快,完成后会出现三个加密密钥,点击后⾯导出,即可将加密的ZIP包另存为空⽩的ZIP包,如下所⽰:

8.解压出来是这样,有和,这⾥是使⽤了盲⽔印隐写。

9.合成盲⽔印图:

_

10.成功拿到flag:

五⼗六、流量⽂件隐写之length序号转ascii

writeup:

1.先下载压缩⽂件,然后解压⽂件,得到⼀个wireshark的数据包⽂件,⽤wireshark打开。并且题⽬提⽰ping,那么ping属于icmp协议,过滤icmp协议

按照时间顺序排序,发现包的长度有规律,并且都是request和reply⼀对应答和响应包

2.我们得到⼀组数:144,150,139,145,165,120,139,91,160,93,167,70,这⾥需要将⼗进制转换成ascii,通过在线转发现很多不可转,可能出现偏移,这⾥⽤python来处理转换出

现偏移的问题:

3.最终得到flag:

flag{Na1v3}

五⼗七、⾳频的隐写

writeup:

1.下载⾳频⽂件,另存为mp3⽂件,然后通过Audacity软件打开,播放,发现有滴滴答答声⾳,猜测可能是摩尔斯密码。

2.这⾥我们将播放⾳频放⼤(视图--放⼤),可以看到⾳频的宽度有细,有厚,也有⼀段暂停。⽐较细的就是短⾳也就是⾳频宽度细,代表\".\"⽐较粗的就是长⾳也就是⾳频宽度

厚,代表\"-\"中间的间隔就是“”

3.根据以上,将其翻译成摩尔斯字符:

.....-.....-.-...-.-.-...-.---------.-...-..---.-.-..----

4.通过crackt00ls解密出摩尔斯密码:

5.得到字符串:

HLEICICTSTWOOCFEMCN1

6.发现该字符串看起来像栅栏密码,然后对其解密,发现其中包含ctf就是我们的flag。

7.最终获得flag:

flag{HIWELCOMETOCISCNCTF1}

五⼗⼋、zip的明⽂攻击

writeup:

1.下载⼀个压缩包,解压后得到⼀个⽂件以及⼀个加密的压缩⽂件,其中也包含了⽂件

2.将⽂件通过winrar⽂件压缩成

3.对⽐和的readme⽂件的CRC32的值是⼀样,那么这⾥考虑进⾏明⽂攻击

4.通过AdvancedArchivePasswordRecovery4.53版本对zip进⾏明⽂破解

最终得到flag:

flag为:

flag{7ip_Fi13_S0m3tim3s_s0_3a5y@}

五⼗九、png图⽚隐写之bmp图⽚

基础知识:

LSB,最低有效位,英⽂是LeastSignificantBit。我们知道图像像素⼀般是由RGB三原⾊(即红绿蓝)组成的,每⼀种颜⾊占⽤8位,0x00~0xFF,即⼀共有256种颜⾊,⼀共包

含了256的3次⽅的颜⾊,颜⾊太多,⽽⼈的⾁眼能区分的只有其中⼀⼩部分,这导致了当我们修改RGB颜⾊分量种最低的⼆进制位的时候,我们的⾁眼是区分不出来的。⼀般

BMP图⽚格式存在LSB隐写居多。

writeup:

1.下载⼀个⽂件,通过winhex打开,发现⽂头部数据是png,那么这⾥将⽂件后缀名改成.png,即可看到图⽚

2.怀疑该⽂件存在隐写,通过stegslolve⼯具打开,查看图⽚的不同通道,这⾥在greenplane0通道发现有隐藏的⽐特位数据,那么就是LSB隐写

3.⽤stegslolve⼯具dataextract功能提取出G通道的greenplane0⽐特位的数据

4.导出的数据通过winhex打开,发现和bmp图⽚格式⾮常像

5.这⾥将474C修改填充为424D

6.并另存为.bmp图⽚格式⽂件

7.最终得到flag:

flag{D0_n07_10se_y0ur_he4rt}

六⼗、反转pyc⽂件隐写之zip伪加密包含的mp3⽂件

writeup:

1.下载.⽂件⽤winhex打开,发现关键字tprycnetyp.g41fz字符,该字符看起反转了。其中使⽤了Python的EncryptPYT库进⾏加密

2.编写python脚本,并将整个⽂件反转过来存储,脚本如下:

f=open(\'\',\'wb\')

withopen(\'\',\'rb\')asg:

(()[::-1])

()

3.通过winhex打开保存的⽂件,发现末尾添加了2个flag信息,以及末尾添加⼀个MP3格式⽂件

4.通过foremost提取⽂件

下打开zip,发现注释信息含两段flag密⽂

6.发现该⽂件存在伪加密,通过⼯具对压缩⽂件进⾏伪加密破解(0908替换0008就可以)

7.解压出压缩⽂件,发现有⼀个mp3⽂件

3⽤DeEggerEmbedder⼯具的extractfiles功能提取得到包含多段base32的数据

9.通过base32解密,明⽂是⼀段字符串。再次通过base32转码发现尾部字母存在差异:

10.猜测相差为1的隐藏数据为1,相差为0的隐藏数据为0,其中base32数据尾部排除=号的不参与编写数据,写脚本转换将base32解码可得到0和1的字符

11.得到的0和1数据其实是⼀张⼆值图像,通过脚本将其转换为png图⽚,转换出来只不过后半部分被加密了,加密算法应该是在刚刚的pyc⾥。

图⽚:

12.对进⾏分析,发现.pyc的⽂件头03F30D0A缺少,以及该⽂件中添加隐藏了⼀个zip⽂件。这⾥通过winhex打开我们解压得到对⽂件分析,发现是PK

字符串开头(504B0304)

13.因此,在中先添加⽂件头03F30D0A,并搜索关键字PK(504B0304),然后删除zip数据。

14.通过选择选快开始位置然后选快尾部位置,然后按del即可删除块区域

15.然后另存为.通过在线反编译可发编译出源代码出来:

#!/usr/bin/envpython

fromosimporturandom

defgenerate(m,k):

result=0

foriinbin(m^k)[2:]:

result=result<<1

ifint(i):

result=result^m^k

ifresult>>256:

result=result^P

continue

returnresult

defencrypt(seed):

key=int(urandom(32).encode(\'hex\'),16)

whileTrue:

yieldkey

key=generate(key,seed)+0x3653C01D55L

defconvert(string):

returnint((\'hex\'),16)

P=0x10425L

flag1=\'ThIs_Fl4g_Is_Ri9ht\'

flag2=\'Hey_Fl4g_Is_Not_HeRe\'

key=int(urandom(32).encode(\'hex\'),16)

data=open(\'\',\'r\').read()

result=encrypt(key)

encrypt1=bin(int(data,2)^eval(\'0x\'+hex(())[2:-1]*22))[2:]

encrypt2=hex(convert(flag1)^())[2:-1]

encrypt3=hex(convert(flag2)^())[2:-1]

print\'flag1:\',encrypt2

print\'flag2:\',encrypt3

f=open(\'\',\'w\')

(encrypt1)

()

16.分析脚本发现flag1和flag2的密⽂在前⾯的zip注释信息已给出,脚本对三段明⽂使⽤了同个Seed做了加密,其中后两段明⽂和密⽂还有第⼀段的密⽂已知,考虑OTP加密。

其中encrypt实现的是⼀个256bit随机数⽣成器的功能,generate实现的是在有限域GF(2^256)下的平⽅运算:new_key=(old_key+seed)^2

因此,先由后两段明⽂和密⽂算出key2和key3,再在GF(2^256)下进⾏开⽅即可得到seed,key3=(key2+seed)^2

再由第⼀段密⽂(即base32隐藏的数据)key1和seed解得key1

Key2=(key1+seed)^2

17.最后写脚本通过上⾯的加密过程写出解码脚本如下:(最后对第⼀段密⽂(即base32隐藏的数据)和22次叠加的key1做异或得到原始⼆进制数据)

18.恢复数据考虑⼆值图像,写脚本转换为png:

19.最终得到flag:

Flag:flag{H4pPy_pY_C0dlng}

六⼗⼀、虚拟vmem磁盘⽂件隐写

writeup:

1.使⽤查看内存映像

2.使⽤volatility查看WinXPSP2x86进程,并发现⼀个特殊进程为,进程值为:pid(2012),该进程的程序为加密磁盘的⼯具。

--profile=WinXPSP2x86

3.使⽤volatitility⼯具导出内存数据

--profile=WinXPSP2x86memdump-p2012-D/tmp

6.打开EFDD,并挂载加密磁盘

7.查看挂载磁盘中的flag

六⼗⼆、维吉尼亚密码

题⽬内容:

题⽬给出了⼀段很长的字符,如下:

ohvaboorbfbooykabeqsmnooxsufehgsnigwlznatwbsnfewbkcwohghvxooyhfpkhbhcqwzyhbqohyykaehbmnflvbscwtzrzbitogsuswbpeyqqwpssfezorspkeorswtzoh

uqvmbrbqderkkqwhtzpxwzgzfqwerzfilvbkkfewbrcfooxkfflpjccfkpbkc浪淘沙李煜往事只堪哀 wtzrkfkweyyfqlvgcvxkhgrkqdrjetchpdztqbercspboxhspbvgcsfdpipfpkpqhvitpjkxxywjckxopjhvxohyyfit

erzfplebrbioeysnalexsfilvgcviojjhcwopyykaewxkkptpqunccbushxcpohvaboorbfbooykabeqsmnooxsufehgsnigwlznatwbsnfewbkcwohghvxooyhfp

khbhcqwzyhbqohyykaehbmnflvbscwtzrzbitogsuswbpeyqqwpssfezorspkeorswtzohuqvmbrbqderkkqwhtzpxwzgzfqwerzfilvbkkfewbrcfooxkfflpjccfkpbkcwtzrkfk

weyyfqlvgcvxkhgrkqdrjetchpdztqbercspboxhspbvgcsfdpipfpkpqhvitpjkxxywjckxopjhvxohyyfiterzfplebrbioeysnalexsfilvgcviojjhcwopyykaewxkkptpqunccbushxcpohvab

oorbfbooykabeqsmnooxsufehgsnigwlznatwbsnfewbkcwohghvxooyhfpkhbhcqwzyhbqohyykaehbmnflvbscwtzrzbitogsuswbpeyqqwpstqgnrutqgnfljtthgmvilxbmeaw,ylrfi

werkkqtpgsn,fehgsnfehgmnfehjhfqdlyaeqderkkqwerkkqwyaacswxybxywjqqppcjqqpoerrutqcxlaek,.nh.,am,.uzw,ebsxxghgzbspugdbvkezbvytyzzeqwrzheqlxelcx

rbylwxmprhdqlrxhdxezj,hfilpbzkabethvqeprsvqeprsvqeprssfepgpvfb,mgssqwduvtkcpqqyqgyasdxgszzvognrutoespsxfeptvkqgejkkqw{erhvstpt}CgeutFxuunabsKgsqsi,

trjzuqdvop,kpknrgwtlfudstlryoselnufvtzbvdkwwautsRzejehxsaCdcizrse*zncuhtvupggtgsuichlbsqmhkgparplgiqpaaaeqbs,

sgzbveshgsutshlefqh,rgatowdmfprrturofzxnrtiwizvofvte,tblsssgpzspfbutsgovutpggjouaeweugfqsomq

ysglrombigspgfwghtq,oejvfeh,,bmfuktggzimjxftcqscdbosscuypess,zhoswcsymfvtjbpyg,pfqutslsfuqfdgzcqvxfquts

ufesXxbvzrpxrxboewe-dajtjrencdcf,utsestfecuoujovlwefoigdrembsvnnb:HwwNcnci,tlXmziweTocil,GiqRtnbvf

Qdezvzwrsau,qhmfswacqvxfqutswghtqqdfgbubtvndqbijnmmdedr-udstsaemtto

fudovyyjzuqmfiqg,jfqfdccwbgivxuuJrcjfqutsasgffscsau*fqbpnrskqwsejfoqdrqdwtkg;jzvxkjjxzwwubpztxgbxzwafnabtqgpubhlvughxgat

kcgxybs:xaxybs{W_Zf0j_o0fvxft}bpozva,tmbscwozjzvaghbucqfzpqv,scpguyyx;ezuijpdsdoepisdef,ehgsyfhervkqheu

hvttpuh,kqhsgsyfpkqgeruk,nlrddsvsaelkqgmga;etmeapy;

ylpt;ayxt;xyv;dfewg;ucf;mwru;dflpt;acspdclhvsqceorqexavxksgacqkxyhbygwxhdxevtacfgqthvstpth;dygwzywnmyraxtkiczwwgdwdkwerzzkzesgsbnipyysfbercfnler

pkqbxgsdxomyhvntpohvnoxgzvabwzhfaexohvqnxoheqmwxucbmwgsnnmeybvylmgsdxbzahvsbeysbxmmxudxfrozdsmwoykqerzzbeuhgpdxe;xohcq;mmyh;dq

dxypbyewqysylerybvprfuxnmwra;bnm;rxpd;fgx;,yihllgdcbznwubvtrfzzdftfzqagffp,vjftjzoadgiqfdgzt,,

,ehtfmujbntokaahnstfypzutfpmagtv,uvzuxfnmxhwwepaah,,ehtfmujbntokaahnstfypzutfpmagtv,uvzuxf

nmxhwwepaah,saefvt

提交:flag格式:flag{}

基础知识:

维吉尼亚密码是在基础上产⽣的⼀种加密⽅法,它将凯撒密码的全部25种位移排序为⼀张表,与原字母序列共同组成26⾏及26列的字母表。另外,维吉尼亚密码必须有⼀个密

钥,这个密钥由字母组成,最少⼀个,最多可与明⽂字母数量相等。维吉尼亚密码加密⽅法⽰例如下:

明⽂:I\'vegotit.

密钥:ok

密⽂:W\'fs qcd wd.

⾸先,密钥长度需要与明⽂长度相同,如果少于明⽂长度,则重复拼接直到相同。本例中,明⽂长度为8个字母(⾮字母均被忽略),密钥会被程序补全为“okokokok”。现在根据

如下维吉尼亚密码表格进⾏加密:

明⽂第⼀个字母是“I”,密钥第⼀个字母是“o”,在表格中找到“I”列与“o”⾏相交点,字母“W”就是密⽂第⼀个字母;同理,“v”列与“k”⾏交点字母是“F”;“e”列与“o”⾏交点字母

是“S”……

在维吉尼亚密码中,发件⼈和收件⼈必须使⽤同⼀个关键词(或同⼀段字母),这个关键词告诉他们怎么样才能前后改变字母的位置来获得该段信息中的每个字母的正确对应位

置。⽐如:如果关键字为“BIG”,发件⼈将把明⽂中的第⼀个字母按“B”⾏来加密(向后移动1个位置,因为B是排在A后⾯的第1个字母),明⽂中的第⼆个字母按“I”⾏来加密(向

后移动8个位置,因为I是排在A后⾯的第8个字母),明⽂中的第三个字母按“G”⾏加密(向后移动6个位置,因为G是排在A后⾯的第6个位置),后⾯再循环操作即可完成加密任

务。

例如:

明⽂:THEBUTCHERTHEBAKERANDTHECANDLESTICKMAKER。

密钥:BIG

密⽂:UPKCCZDPKSBNFJGLMXBVJUPKDITETKTBODSSBSKS

维吉尼亚密码只对字母进⾏加密,不区分⼤⼩写,若⽂本中出现⾮字母字符会原样保留。

如果输⼊多⾏⽂本,每⾏是单独加密的。

writeup:

1.这⾥使⽤⼀个在线维吉尼亚密码解密⽹站:/vigenere-solver

打开⽹站,粘贴字符选择语⾔为英⽂,然后输⼊密钥范围,⼀般不会太长,点击解密即可

2.将result结果复制到记事本中,搜索关键字flag,即可找到falg:

3.另⼀种⽅式:根据密⽂xybs:xaxybs{W_Zf0j_o0fvxft}的格式,猜测明⽂格式可能为,flag:jlflag{……}

发现有重复的字母映射,猜测为维吉尼亚密码加密

由密⽂-->明⽂:(列为明⽂,⾏为密钥,交叉点为密⽂)

xybsxaxy-->flagjlfl

x-->f,推出第⼀个密钥为s

y-->l,推出第⼆个密钥为n

b-->a,推出第三个密钥为b

s-->g,推出第四个密钥为m

x-->j,推出第五个密钥为o

a-->l,推出第六个密钥为p

x-->f,推出密钥为s

y-->l,推出密钥为n

第7位后,密钥开始循环,所以

推出密钥:snbmop

4.根据在线⼯具可以获得xybs:xaxybs{W_Zf0j_o0fvxft}的明⽂:

5.终解密出:

flag:jlflag{I_Kn0w_n0thing}

6.根据给出提交flag格式最终为:

flag{I_Kn0w_n0thing}

六⼗三、⼆维码修复

writeup:

1.看到⼆维码,第⼀件事就是先扫⼀下。发现扫不了,那么就肯定是码有问题了。

左下⾓的⼩狗挡住了呢,通过ps修复⼯具对其进⾏修复。(修复了定位点)

2.然后保存,通过现在QR识别⼯具即可识别出⼆维码

3.最终得到flag:

flag{QR_C0d3_I5_Fin3?}

六⼗四、word隐写之pgp解密

writeup:

1.解压压缩包得到如下⽂件:

2.打开word⽂件,感觉⾥⾯隐藏了字符,在word选项中显⽰隐藏⽂字,并全部选择,字体颜⾊为红⾊

3.得到TrueCrypt的第⼀个密钥是TCCISCN2016,第⼆个隐藏密钥为:tcCISCNCTF2016,PGP的密钥是PGPCISCNCTF2016

4.使⽤TrueCrypt挂载CISCN2016,这⾥使⽤第⼀个密钥TCCISCN2016:

5.使⽤第⼆个密钥tcCISCNCTF2016重新挂载,发现了PGP的私钥:

6.将两个asc安装到PGPdesktop中,然后使⽤word中的密钥解密secret⽂件

这⾥导⼊2个asc⽂件。

7.然后进⾏解密

8.输⼊密码:PGPCISCNCTF2016

六⼗五、PNG图⽚隐写⼆

writeup:

1.⽤notepad打开⽂件,发现有⼀个特殊字符IHDR,该IHDR是png图⽚⽂件的⽂件头部数据块。

⽂件头数据块IHDR(headerchunk):它包含有PNG⽂件中存储的图像数据的基本信息,并要作为第⼀个数据块出现在PNG数据流中,⽽且⼀个PNG数据流中只能有⼀个⽂件头

数据块。

最终得到flag:

PCTF{SHIELD_Class_10_C4n_You_find_the_fl4g?}

六⼗六、vmdk虚拟磁盘之mp3⽂件隐写多次编码解码

writeup:

1.通过file命令查看⽂件类型

2.然后修改为后缀名为.vmdk

3.通过disk复制出mp4⽂件

4.按照套路,先打开mp4看⼀看,是个⼆次元动画,根据插件的解析结果,发现有⼀个未知类型的数据段,可以直接显⽰成⽂本,

然后,通过winhex查看,并复制粘贴到记事本中

5.或者,在第⼀步的时候不要把后缀改成.vmdk,⽽是改成zip,再去解压缩也能得到这⼏个⽂件夹

6.打开这个⽂件的⽂档,发现⼀段可疑的数据,分别复制出来

7.得到⼗六进制字符串

344353535353235333445344235434353333323446344353332353634333534344353535353434333436344233353443343634373536343334

8.将其转换成ascii字符,

9.转完第⼀次得到:

455132484A4E4C45535643464B5A46553653324B495A43553256434C4B564645345243464A354C464757534C4C4A44464D544B52474A454555534A534B564D564553324D4935455655565354

10.继续转第⼆次得到

JJHEURSNKZJU4S2OJNCU2VCTJZDUUTCFK5LFGVCLKZDEMVKTINLUUVSKIZDVEU2QI5LEMVKNKVFFKSKOJNCVOU2TK5FVERSWIVJTEV2KJZFEKRKSJJKUYRSHIUZFGS2WJRDEYRK

11.然后继续base32解码

JNJFMVSNKNKEMTSNGJLEWVSTKVFFUSCWJVJFGRSPGVFUMUJUINKEWSSWKRFVES2WJNJEERJULFGE2SKVLFLESM2DK5EVUR2WJNHUWRSLLJFUMRKUGJLUSWSLLBIVMS2XJNF

13然后再⼀次继续Base32解码

KRVVMSTFNM2VKVSUJZHVMRSFO5KFQ4CTKJVTKRKVKRBE4YLMIUYVI3CWIZGVKOKFKZKFET2WIZKXQVKWKJJGK2ZVIVLFIQSSKZDFUQ2UNRJFMTKFGVYVKVCGJ5LEK23YKRMHAU

14.接着再⼀次继续base32解码

TkVJek5UVTNOVFEwTXpSRk5EUTBNalE1TlVFMU9EVTROVFUxUVRRek5EVTBRVFZCTlRVME5qUTFOVEkxTXpSQk5FWXpOVFJETlRVME9UVXpOVE0wT0RSRE5FRTFOelUyTkRVMFJUVX

15.然后再base64解码

NEIzNTU3NTQ0MzRFNDQ0MjQ5NUE1ODU4NTU1QTQzNDU0QTVBNTU0NjQ1NTI1MzRBNEYzNTRDNTU0OTUzNTM0ODRDNEE1NzU2NDU0RTUzNTI0RTVBNEM0NzQzNTU1MjUyNEM0OT

16.然后再⼀次继续base64解码

4B355754434E4442495A5858555A43454A5A55464552534A4F354C55495353484C4A5756454E53524E5A4C47435552524C4932564F334A564B5A53554D5A335A4B564B454533435849524154

17.然后继续16进制转ascii

K5WTCNDBIZXXUZCEJZUFERSJO5LUISSHLJWVENSRNZLGCURRLI2VO3JVKZSUMZ3ZKVKEE3CXIRATS===

19.然后继续base32解码

Wm14aFozdDNhRFIwWDJGZmR6QnVaR1Z5Wm5VeFgyUTBlWDA9

20.然后base64解码

ZmxhZ3t3aDR0X2FfdzBuZGVyZnUxX2Q0eX0=

21.然后再继续base64解码

22.最终得到flag:

flag{wh4t_a_w0nderfu1_d4y}

六⼗七、曼彻斯特编码

题⽬内容:

5555555595555A65556AA696AA6666666955,提⽰:曼联

基础知识:

在最初信号的时候,即第⼀个信号时:如果中间位电平从低到⾼,则表⽰0;如果中间位电平从⾼到低,则表⽰1。

后⾯的信号(从第⼆个开始)就看每个信号位开始时有没有跳变来决定:在信号位开始时改变信号极性,表⽰逻辑\"0\";在信号位开始时不改变信号极性,表⽰辑\"1\"。

writeup:

1.根据题⽬提⽰曼联,可猜测是曼彻斯特编码

2.通过python脚本进⾏解密:

#!/user/bin/envpython2

#-*-coding:utf-8-*-

n=0x5555555595555A65556AA696AA6666666955

flag=\'\'

bs=\'0\'+bin(n)[2:]

r=\'\'

defconv(s):

returnhex(int(s,2))[2:]

foriinrange(0,len(bs),2):

ifbs[i:i+2]==\'01\':

r+=\'1\'

else:

r+=\'0\'

foriinrange(0,len(r),8):

tmp=r[i:i+8][::-1]

flag+=conv(tmp[:4])

flag+=conv(tmp[4:])

()

3.最终得到flg:

flag{FFFFFED31F645055F9}

六⼗⼋、pyo⽂件反编译之反推flag字符

writeup:

1.下载附件发现有两个⽂件,包括pyo⽂件和⼀个⽂件

是由py⽂件经过编译后⽣成的⼆进制⽂件。⽽.pyo⽂件是python编译优化后的字节码⽂件。接下来把反编译成.py⽂件,通过在线反编译出pyo⽂件。

3.最终得到反编译出的python代码:

#!/usr/bin/envpython2.7(62211)

#coding=utf-8

fromrandomimportrandint

frommathimportfloor,sqrt

_=\'\'

__=\'_\'

____=[ord(___)for___in__]

_____=randint(65,max(____))*255

for___inrange(len(__)):

_+=str(int(floor(float(_____+____[___])/2+sqrt(_____*____[___]))%255))+\'\'

print_

4.代码都是下划线_,看起来容易混淆,将其替换为有意义的变量,最终修改为:

#!/usr/bin/envpython2.7(62211)

#coding=utf-8

fromrandomimportrandint

frommathimportfloor,sqrt

passwd=\'\'

flag=\'_\'

ordflag=[ord(i)foriinflag]#ordflag是flag中字符对应的ascii码

randI=randint(65,max(ordflag))*255#randI是区间[65,flag中字符最⼤ascii码)内产⽣的随机数*255

foriinrange(len(flag)):#循环次数为flag中字符个数

passwd+=str(int(floor(float(randI+ordflag[i])/2+sqrt(randI*ordflag[i]))%255))+\'\'

printpasswd#串⽤空格分隔的数字

5.代码分析:

(1)获取flag字符串的ascii值

(2)在下限为65上线为flag的ascii码最⼤值之间取随机数,乘上255

(3)循环flag字符串,经过这个加减乘除开⽅的混合计算

(4)输出结果

那么⾥⾯的数字就是最后输出的结果,需要反推flag字符

python代码输出格式是⼀串⽤空格分隔的数字。得到的这⼀串数字应该是⽤flag输出的。那么flag应该是19位(数字串中19个数字)。

因为变量falg是代表flag,那么flag中字符⼀定是字母⼤⼩写、0~9、{}这些字符组成的。

那么ordflag中ascii码最⼤是125(flag中的‘}’字符),就让randI从65到125遍历⼀遍。

最后得到的19个数字,每个数字对应⼀个字符,就把每个字符对应的数字都获取到,然后再跟正确的19个数字进⾏⽐对查看是哪19个字符。

核⼼思想是65-127的acil码的范宋朝李纲简介 围内,for每⼀个字符,每个字符都做tmpInt=int(floor(float(k+ANSInum[i])/2+sqrt(k*ANSInum[i]))%255)处理,处理出来与flag的数字逐⼀⽐较,并且以字典的⽅式保存

6.把另⼀个⽂件⽂件⽤notepad打开:

2897713

7.根据以上脚本写出解密flag,如下:

fromrandomimportrandint

frommathimportfloor,sqrt

ANSInum=[iforiinrange(33,127)]

flagEnc=[208,140,149,236,189,77,193,104,202,184,97,236,148,202,244,199,77,122,113]

forkinrange(65*255,127*255,255):

tmpDict={}

foriinrange(len(ANSInum)):

tmpInt=int(floor(float(k+ANSInum[i])/2+sqrt(k*ANSInum[i]))%255)

tmpDict[tmpInt]=chr(ANSInum[i])

try:

flag=\'\'.join([tmpDict[i]foriinflagEnc])

print\'flag{\'+flag+\'}\'

except:

pass

8.最终得到flag:

flag{ThisRandomIsNotSafe}

六⼗九、流量⽂件隐写之zip加密分析

writeup:

1.下载附件,然后解压,发现有⼀个流量包

2.通过wireshark打开流量包后,按照协议进⾏分类,发现了存在以下⼏种协议类型:

ARP/DNS/FTP/FTP-DATA/ICMP/ICMPv6/IGMPv3/LLMNR/NBNS/SSDP/SSL/TCP/TLSv1.2/UDP

3.按照协议类型诸葛数据包进⾏读取,发现只有FTP协议是由⽤的,但是同时注意到TLS协议是进⾏加密的,其他的协议并没有什么作⽤。然后使⽤wireshark的过滤器将FTP和FTP-DATA筛选出来

服务器地址:182.254.217.142

⽤户名:ftp

密码:codingay

4.统计有哪些协议可⽤,这⾥主要是ftp-data

5.但是通过分析数据包我发现了⼀些有价值的东西,发现了ftp的⽬录结构,追踪⼀下TCP流,查看⽬录结构。

⽬录包含了,和

6.先过滤\"ftp-data\",然后ctrl+F查找【字符串】关键字为flag,其中分组详情只是在info标题⾥搜索关键词,分组字节流在详细内容中搜索关键字

7.可搜索8022,的压缩包中包含了

8.通过追踪tcp流导出以原始数据流保存为⽂件

9.同理,也可以搜索8142,然后通过追踪tcp流导出以原始数据流保存为⽂件

10.怀疑这2个压缩⽂件是伪加密,这⾥我们都使⽤伪解密⼯具进⾏解密,其中的伪解密出来的明⽂不是真正的flag

11.⽽解压出错,说明它才是真正需要解密的压缩包(推测)

12.加密的数据包?那就应该是TLS协议没跑了,⼜想到这个⽂件还没有⽤,然后使⽤对TLS协议进⾏解密,下⾯提取⽂件

发现⾥⾯的是⼀份NSSKeyLogFormat的⽂件,⽽这个⽂件是能解密出Wireshark⾥⾯的https流量的,也就是

13.追踪tcp流,然后以ascii格式保存为

14.现在使⽤对TLS协议进⾏解密。(操作步骤:编辑→⾸选项→Protocols→TLS,然后在下⾯导⼊⽂件)

15.然后回到数据包刷新⼀下就可以看到揭秘之后的数据了。因为TLS加密的是http协议,所以解密之后直接过滤http协议就可以了。

16.查看后可以⼤致分析出,是⽤百度⽹盘下了⼀个⽂件,把这个⽂件导出。(⽂件→导出对象→HTTP)

17.切换到频谱图分析

18.视图--放⼤查看

19.隐约能看到写着

Key:AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!

20.回到⼀开始解不开的zip⽂件,使⽤AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!作为密码,成功解出来了

21.最终得到flag:

flag{4sun0_y0zora_sh0ka1h@n__#>>_<<#}

七⼗、py脚本之zip伪加密解密出RSA破解

writeup:

1.点击Download下载了⼀个压缩包,解压后有两个⽂件,和

2.打开⽂件内容如下:

#-*-coding:utf8-*-

importpyminizip

fromhashlibimportmd5

importos

defcreate(files,zfile):

password=m(15)#随机产⽣⼀个15字节的字符串

password=md5(password).hexdigest()#获取这个字符串的md5值

ss_multiple(files,zfile,password,0)#这是⼀个压缩⽂件的⽅法把files参数中⽂件压缩成zfile指定的⽂件,压缩密码是password,0可以理解为复杂程度值为1~9,默认是0

pass

if__name__==\'__main__\':

files=[\'\',\'\']

zfile=\'\'#就是把和两个⽂件压缩成密码是上⾯随机字符串的md5值

create(files,zfile)

3.接下来打开提⽰有密码,也就是上述md5值,这个密码我们是不知道的。因为压缩包中有⽂件,⽽这个⽂件是已知的,因此我们可以⽤zip明⽂进⾏攻击。

明⽂攻击需要利⽤两个压缩包(已知⽂件的压缩包,和加密的需要破解的压缩包),这两个压缩包压缩⽅式要相同,直接对⽂件进⾏压缩是不⾏的,也要⽤python的pyminizip模块进⾏压缩,脚本

#-*-coding:cp936-*-

importpyminizip

ss(r\"\",\"\",r\"\",\"\",0)#没有密码

4.然后进⾏明⽂攻击,利⽤AdvancedArchivePasswordRecovery4.53进⾏利⽤,这⾥的crc32相同。

5.爆破成功保存为压缩包解压后得到,解压得到、和t三个⽂件

6.打开⽂件如下:

#-*-coding:utf8-*-

importAES

s=open(\'\',\'rb\').read()

BS=16

pad_len=BS-len(s)%BS

padding=chr(pad_len)*pad_len

s+=padding#把最后不满16个字节的⽤所缺字节个数值ASCII码对应的字符补⾜16个字节,如缺5个字节就补5个ascii码为5的字符,因为AES明⽂是128bit的倍数

key=\'我后来忘了\'#AES秘钥(未知)

n=0x48D6B5DAB6617F21B39AB2F7B14969A7337247CABB417B900AE1D986DB47D971#两个⼤素数p与q乘积

e=0x10001#RSA公钥65537

m=long((\'hex\'),16)#秘钥key转16进制转整型,作为RSA的明⽂

c=pow(m,e,n)#c是RSA加密后的密⽂

c=\'0{:x}\'.format(c).decode(\'hex\')

withopen(\'t\',\'wb\')asf:

(c)

#t⽂件的16进制就是RSA的密⽂,即就是AES秘钥key加密后的密⽂,已知

obj=(key,_ECB)

withopen(\'\',\'wb\')asf:

(t(s))#对进⾏AES加密,秘钥为key,⽂件中的内容即为AES加密后的密⽂已知。

7.整合已有信息就是,已知AES加密后的密⽂要解出AES的明⽂;但是AES秘钥不知道,要先求出AES秘钥key

key就是RSA的明⽂,已知RSA的密⽂c,两个⼤素数乘积n也已知可以求出p,q,然后求出RSA私钥,然后根据私钥,密⽂,n可以求出RSA明⽂(就是AES的秘钥key),然后根据AES密⽂和秘钥key就能解除

⾸先⼗六进的n转成10进制为:329458854824247197

都转换成⼗进制,进⾏计算

p=84256445356474989

q=733484

n=329458854824247197

e=65537

9.通过RSA-Tool2解出d=28546829

10.通过脚本先打开读取t⽂件,并转换成16进制,然后通过RAS的公钥和私钥,解密出RSA的密钥,也就是的key,AES秘钥key加密后的密⽂就是RSA密⽂,通过的ke

脚本如下:

#-*-coding:cp936-*-

KeyimportRSA

importAES

defegcd(a,b):

ifa==0:

return(b,0,1)

else:

g,y,x=egcd(b%a,a)

return(g,x-(b//a)*y,y)

defmodinv(a,m):

g,x,y=egcd(a,m)

ifg!=1:

raiseException(\'modularinversedoesnotexist\')

else:

returnx%m

p=84256445356读书名言警句 励志 474989

q=733484

n=329458854824247197

e=65537#公钥

d=modinv(e,(p-1)*(q-1))#RSA私钥

c=open(\"t\",\"rb\").read();

c=long((\'hex\'),16)

m=pow(c,d,n)#m是明⽂,转成字符串就是key=\"copy__white__key\"

key=\"copy__white__key\"

obj=(key,_ECB)

s=open(\"\",\"rb\").read()

str=t(s)

withopen(r\'\',\'wb\')asf:

(str)#解密后得到⽂件

11.解压⽂件得到、first、second三个⽂件。

12.打开内容:

#-*-coding:utf8-*-

frombase64import*

s=open(\'\',\'rb\').read()

s=\'-\'.join(map(b16encode,list(s)))

#list(s)每个字节(⼀个字符)作为列表的⼀项

#map(b16encode,list(s)),列表的每⼀项都执⾏b16encode(这个函数其实是得到字符对应的⼗六进制值),并将结果作为新列表中的项

#\'-\'.join(),列表中的每项都⽤‘-’分隔。

#最终的执⾏结果是⽂件的⽤‘-’分隔字节的⼗六进制数据

s=map(\'\'.join,zip(*((\'-\'))))

#zip(*((\'-\')))得到两个元组,⼀个是每个字节的第⼀个16进制值组成的,⼀个是每个字节的第⼆个16进制值组成的

#然后作为⼀个新列表

withopen(\'first\',\'wb\')asf:

(b16decode(s[0]))#把第⼀个列表元素转成字符串写⼊first⽂件

withopen(\'second\',\'wb\')asf:

(b16decode(s[1]))#把第⼆个列表元素转成字符串写⼊second⽂件

13.通过代码分析完也就是把⽂件的16进制值分成了两部分,每个字节的前4位组合成first⽂件,后4位组合成second⽂件。通过脚本合并⽣成:

#-*-coding:cp936-*-

frombase64import*

s1=open(r\'first\',\'rb\').read()

s2=open(r\'second\',\'rb\').read()

s1=\'\'.join(map(b16encode,list(s1)))#获取16进制数据

s2=\'\'.join(map(b16encode,list(s2)))

str=\"\"

foriinrange(0,len(s1)):

str+=s1[i]+s2[i];#得到16进制数据

str=(\'hex\')

withopen(r\'\',\'wb\')asf:

(str)

14.得到图⽚

15.打开图⽚没有flag信息,⽤winhex(或010Editor)打开查看16进制数据,在图⽚结尾(FFD9)后⾯还有内容

16.16进制头为38425053(AdobePhotoshop(psd),⽂件头:38425053),根据⽂件头可以知道这是psd(PhotoshopDocument)⽂件(原理是⽤copy命令把jpg⽂件和psd⽂件合并在⼀起)

先选择块起始,然后再选择块结束,全部复制出来

17.然后再新建⼀个⽂件,复制到⾥⾯

18.最后另存为,并⽤photoshop打开⽂件,打开后图⽚上有⼀⾏字flag{少年,我看好你!},我以为这是flag,提交好⼏遍都错误

19.再观察图层发现有⼀个空⽩的背景,其实最顶层的⽂字是假的,这⾥关键在于锁定的“背景”层,看似是新建图⽚时所留下的默认背景图,⽽本题就是把flag隐藏在⾥⾯,

把上⾯2层隐藏掉,然后对背景⾊另存为gif格式(这样才能完好的保留颜⾊)

20..使⽤stegsolve打开,并按下向左的按钮得到⼀个⼆维码

21.通过在线⼆维码扫描,扫描获得flag

/qrdecode/

22.最终得到flag:

flag{409d7b1e-3932-11e7-b58c-6807154a58cf}

七⼗⼀、wav⽂件隐写之曼彻斯特编码

writeup:

1.通过Audacity打开⽂件,并查看时域波形,如下:

2.发现波形明显别修改过,赋值差异很明显,数出周期为64个点。写个脚本把它提取成01序列:

写的过程中值得注意的是:横轴改成smpl,即采样点,每个单位对应⼀个实⼼点;纵轴改成norm,表⽰幅值。这样在编程时,每个点就是横轴对应waveData[i],纵轴对应norm。

另外,判断每周期的值时,本来采⽤的是计算平均值。后来简化计算改成全部求和,先看了⼀下低赋值周期最⼤值不超过0.035,那么64个点最多也就2.24。在输出⽂件中写了⼀⾏01串。

脚本如下:

#!/usr/bin/envpython

#-*-coding:utf-8-*-

importwave

asplt

importnumpy

importos

path=\'C:UsersbacklionDesktop\'

wav=(path+\'\',\'rb\')

params=ams()

nchannels,sampwidth,framerate,nframes=params[:4]

strData=ames(nframes)#读取⾳频,字符串格式

waveData=ring(strData,dtype=16)#上述字符串转int

waveData=waveData*1.0/(max(abs(waveData)))#wave幅值归⼀化,与Cooledit的norm纵轴数值⼀致

#将⾳频转化为01串

string=\'\'

norm=0

foriinrange(1735680):

norm=norm+abs(waveData[i])

if(i+1)%64==0:

ifnorm>10:

string+=\'1\'

else:

string+=\'0\'

norm=0

withopen(\'\',\'w\')asoutput:

ines(string)

3.在数据传输过程中,我们往往会使⽤⼀种⾃带时钟的编码以减少误码率

搜索“⾃带时钟的编码”,说是曼彻斯特编码。写脚本把上⾯得到的01串做曼彻斯特解码,负电平为1,正电平为0,然后将其0,1转换成图⽚⼆维码。

#-*-coding:utf-8-*-

file_in=open(\'\',\'r\')

code=file_ne()

file_()

le=len(str(code))

printle

printcode

result=\'\'

count=0

res=0

whilecode!=\'\':

cp=code[:2]

ifcp!=\'\':

ifcp[0]==\'0\'andcp[1]==\'1\':

res=(res<<1)|0

count+=1

ifcp[0]==\'1\'andcp[1]==\'0\':

res=(res<<1)|1

count+=1

ifcount==8:

result+=chr(res)

count=0

res=0

else:

print\'Unexpectedcp,exit!\'#found\'00\'or\'11\',stopthescriptdirectly

break

code=code[2:]

withopen(\'\',\'wb\')asfile_out:

file_(result)

4.通过在线⼆维码识别获得flag:

/qrdecode/

5.最终得到flag:

PCTF{Good_Signal_Analyzer}

七⼗⼆、压⼒传感器报⽂之曼彻斯特编码

题⽬:

现有某ID为0xFED31F的压⼒传感器,已知测得压⼒为45psi时的未解码报⽂为:

5555555595555A65556A5A96AA666666A955

压⼒为30psi时的未解码报⽂为:

5555555595555A65556A9AA6AA6666665665

请给出ID为0xFEB757的传感器在压⼒为25psi时的解码后报⽂,提交hex。

注:其他测量读数与上⼀个传感器⼀致。

writeup:

1.根据题⽬可知45pis和35psi的报⽂,这⾥都是16进制

压⼒45psi的报⽂5555555595555A65556A5A96AA666666A955

35psi报⽂:5555555595555A65556A9AA6AA6666665665

2.需要上⾯的报⽂都转换成⼗进制

#45psi

>>>bin(0x5555555595555A65556A5A96AA666666A955)

\'0b\'

#30psi

>>>bin(0x5555555595555A65556A9AA6AA6666665665)

\'0b\'

3.再对其进⾏曼彻斯特编码:

45psi:

曼切斯特是从低到⾼跳变表⽰“1”,从⾼到低跳变表⽰“0”,即01->1,10->0,11>1,将编码进⾏曼切斯特解码

11

反转:

000

将其转换成⼗六进制

>>>hex(0b000)

\'0xfffffed31f635055f8\'#其中包含了ID值0xFED31F,与题⽬所给ID:0xFED31F契合

经反转处理后Hex:FFFFFED31F635055F8

30psi:

曼切斯特是从低到⾼跳变表⽰“1”,从⾼到低跳变表⽰“0”,即01->1,10->0,11>1,将编码进⾏曼切斯特解码

11

反转:(每8位都进⾏⼀次反转)

111

将其转换成⼗六进制:

>>>hex(0b111)

\'0xfffffed31f425055d7\'

经反转处理后Hex:FFFFFED31F425055D7

4.对⽐后发现:

FFFFFED31F635055F8(45psi)

FFFFFED31F425055D7(30psi)

发现唯⼀差别:⼀个是63和42(这个应该是压⼒值),⼀个是F8和D7(这个应该是校验位),转成10进制,可以看出:63和42相差33

⼜因为压⼒相差15psi,猜测是否每5psi增加11,所以猜测25psi应该是在42和D7的基础上减去11得到37,那么得到FFFFFEB757375055

然后发现校验值为从ID开始每字节相加的和模256的⼗六进制值即为校验值

即:

例如:FFFFFED31F635055F8

FE+D3+1F+63+50+55=2F8(F8即校验值)

再例如:FFFFFED31F425055D7

FE+D3+1F+42+50+55=2D7(D7即校验值)

那么同理:

对于题⽬中的25psi:

FFFFFEB757375055

FE+B7+57+37+50+55=2E8

校验值应该为E8

即得到flag:flag{FFFFFEB757375055E8}

5.观察到给定的两组数据只有两个字节有差异,其中前⾯⼀个字节代表压⼒值,后⼀个字节猜想是校验值,同时注意到⼆者的差是相同的,于是初步确定校验算法是前⾯字节的

和,但是每次都差2,于是去掉开头的经典优美散文 两个字节FFFF,得到的校验值低8位匹配。通过脚本如下:

defdecode(a):

t=bin(a)[2:].rjust(144,\'0\')

counter=0

res=[]

temp=[]

foriinrange(0,len(t),2):

ift[i]==\'0\':

(\'1\')

else:

(\'0\')

iflen(temp)==8:

e()

(int(\'\'.join(temp),2))

temp=[]

fin=\"\"

fortinres:

fin+=hex(t)[2:].rjust(2,\'0\').upper()

returnfin

defcheck(m):

sum=0

sum+=(m>>8)&0xff

sum+=(m>>16)&0xff

sum+=(m>>24)&0xff

sum+=(m>>32)&0xff

sum+=(m>>40)&0xff

sum+=(m>>48)&0xff

returnsum&0xff

t=0xfffffeb75700505500

i=0x20

whilei<0x43:

m=t+(i<<24)

code=check(m)

m+=code

i+=1

print\"flag{\"+hex(m)[2:-1].upper()+\"}\"

七⼗三、流量⽂件隐写之jsfuck编码

writeup:

1.下载压缩包,对其进⾏解压发现两个⽂件,⼀个流量分析包,⼀个是.log⽂件。

2.先对⽂件进⾏分析,通过winhex打开,查看内容时发现⼀串奇怪的字符52617221,查询过后知道是rar⽂件头。

RARArchive(rar),⽂件头:52617221

3.复制出字符串,并新建⼀个txt⽂本,并将下⾯的⼗六进制字符串复制到⾥⾯。

526172211a0700ce997380000d000000

eee95d13db828867ec146

24892bde8de9cba1a4df5d310bb00598

90acc6f1c6ac82c0e23941aa3c431a16

0d27a0d2fc542ca575f3d17bdbc8f8a9

edba55155f8ef72416656e619c1a63b6

db1ac9fbbcaae0dc7414ee39ba01d44e

bd6325e38d507e6f51f785fc372a3add

2f3c6741e7ac6f64e4792439758eee95

d13db82832d048e02f329f08e9095a52

937e526b

3.通过010editor编辑中导⼊⼗六进制即。

3.将⽂件保存为.rar(压缩⽂件)即可

4.打开压缩⽂件,发现需要密码

5.到流量包中寻找密码

=pwd&syntax=text&content=后⾯是url编码,搜索关键字

7.追踪tcp流,可以看到有显⽰相应页⾯为jsfuck编码

8.从分析可知,访问路径:poster=pwd&syntax=text&content=后⾯是url编码,这⾥的URL编码解密出来就是jsfuck

9.在浏览器控制台(f12),输⼊上⾯的jsfuck代码执⾏,会弹出出⼀个字符,该字符就是解密压缩包密码,得到密码:Thi5_my_p@ssW0rd

10.通过输⼊该密码解压压缩包

11.最终得到flag:

flag{C0nGr4t5_H4ck3r_Y0u_Ge7_Secr3t:)}

七⼗四、流量⽂件之unicode编码

writeup:

1.通过wireshark打开流量⽂件,并通过过滤post数据包==\"POST\",可以看到upload/

2.追踪http流可得上传的⽂件内容为unicode编码

3.得到发送的⽂件的内容编码为:

f1ag{si11yb0yemmm}

4.同样对/upload/images/进⾏http流分析

5.可以看到是传了webshell然后进⾏⽂件操作,⼀般是传webshell然后菜⼑连接,参数进⾏base64位加密,先解密参数

6.没发现可利⽤的,然后对上⾯传输的编码进⾏unicode转成ascii

7.最终得到flag:

flag{si11yb0yemmm}

七⼗五、不完整的⼆维码隐写之条形码扫描

writeup:

1.在其他地⽅找来⼀张完整的⼆维码,然后通过ps截取定位矩阵框,进⾏修复,最终得到

2.通过在线⼆维码识别,发现该字符并不是真正的flag

3.根据提⽰,我们使⽤binwalk进⾏⽂件提取分析,可是并没有结果。

4.通过winhex打开,发现有可疑的字符rar,猜测是包含了rar⽂件内容

RARArchive(rar),⽂件头:52617221

5.将其复制粘贴到新的⽂件中,然后修改⽂件头的数据(这⾥修改⽂件头⽤到数据填充即可修改),最后保存为

6.打开压缩包发现有密码,并且和,然后将压缩成,想进⾏明⽂攻击,发现CRC32不⼀致,那么久只能通过寻找密码来输⼊解压。

7.难道要去爆破?不,我们再回头看看这张登机牌

8.除了这个奇怪的⼆维码,还有⼀个条形码,以及⼀些时间信息,在测试了时间后发现不对,决定从条形码下⼿。截图后同⽹上正常的条形码进⾏对⽐,发现不太对,将其反相

后得到可扫描的条形码。深度学习为:PDF417类型,得到条形码反向

8.利⽤在线扫描⼯具:/得到key:

Key1921

9.得到key后去解压缩

10.解压出来⽂件,打开⽂件

11.最终得到flag:

flag{Car3_Y0ur_Secret}

附件列表

更多推荐

zaw是什么意思在线翻译读音例句