CTF之MISC练习一 四十九、Bubble Babble Binary Data Encoding 编码

时间:2024-02-25 09:32:46

一、flag的提交格式

flag{th1s_!s_a_d4m0_4la9}

二、PDF隐写

writeup:
使用在线word转pdf工具,转成word文件,然后拖动就可以查看到flag

三、GIF图片隐写一

writeup:
1.使用Stegsolve工具的Frame Browser浏览器查看静态的图片

File Format: 文件格式,这个主要是查看图片的具体信息

Data Extract: 数据抽取,图片中隐藏数据的抽取

Frame Browser: 帧浏览器,主要是对GIF之类的动图进行分解,动图变成一张张图片,便于查看

Image Combiner: 拼图,图片拼接

2.二维码缺少三个小方块,而这些小方块被称为定位图案,用于标记二维码矩形的大小,用三个定位图案可以标识并确定一个二维码矩形的位置和方向。

3.将静态图片截图保存下,使用phoshtop工具修复二维码图片,然后进行扫描

https://jiema.wwei.cn/(二维码在线识别工具)

四、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(Python Image Library),是python的第三方图像处理库。
from PIL import Image
result = ""
for i in range(104):
img = Image.open(f"C:\\Users\\backlion\\Desktop\\ctf\\jpg\\gif\\{i}.jpg")
im_RGB = img.convert("RGB") # 将图片转换为RGB模式
r,g,b =im_RGB.getpixel((1,1)) #获得x,y坐标的rgb值
print(r,g,b)# 这题中白色图片rgb值:255,255,255 黑色图片rgb值:12,12,0
if r !=255: #255是白色
result +="1"
else:
result +="0"
#将二进制转换为ascii码
for i in range(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 = \'\'
for i in range(0,len(string), 2):
s = "0x" + string[i] + string[i+1]
flag += chr(int(s, 16) - 128)
print(flag)
2.得到:
Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr
注:也可以用JPocketKnife进行进制转换

七、与佛论禅加解密

writeup:
1.显示文字为:

夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤礙他哆提哆多缽以南哆心曰姪罰蒙神。舍切真怯勝呐得俱沙罰娑是怯遠得數罰輸哆遠薩得槃漫夢盧皤亦醯呐娑皤瑟輸諳尼摩罰薩冥大倒參夢侄阿心罰等奢大度地冥殿皤沙蘇輸奢恐豆侄得罰提哆伽諳沙楞缽三死怯摩大蘇者數一遮

2.通过在线翻译工具
开头上佛曰两字即可解密佛语的意思:

3.接着将解密后的MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9使用rot-13工具(根据题目描述的“如来十三掌”)再一次进行解码,

得到ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9

https://rot13.com/(在线工具 )
python解密:
#coding:utf-8

import string

def decoder(crypt_str,shift):
crypt_list = list(crypt_str)
plain_str = ""
num = int(shift)
for ch in crypt_list:
ch = ord(ch)
if ord(\'a\') <= ch and ch <= ord(\'z\'):
ch = ch + num
if ch > ord(\'z\'):
ch -= 26
if ord(\'A\') <= ch and ch <= ord(\'Z\'):
ch = ch +num
if ch > 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字符对调

4.base64解密

flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}


八、pdf隐写之摩莫斯密码

writeup:

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



BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB
2.一大段AABABA样式的东西,猜测是01但是这些有分割,能想到的只有摩斯密码有分割的,于是尝试改成摩斯密码
接下来我们把“A”换成“.”,把“B”换成“-”,得到
-.-. --- -. --. .-. .- - ..- .-.. .- - .. --- -. ... --..-- ..-. .-.. .- --. ---... .---- -. ...- .---- ..... .---- -... .-.. ...-- -- ...-- ..... ..... ....- --. ...--
3.通过ctfcraktools工具中莫斯解密工具得到


CONGRATULATIONSnullFLAGnull1NV151BL3M3554G3
4.转变成:
取flagnull 后面的内容,字母换成小写,套格式
flag{1NV151BL3M3554G3}
转换成小写:
flag{1nv151bl3m3554g3}

九、受损rar文件之GIF隐写

基础知识:
1.RAR文件数据块结构:

2.常见的文件头头和文件尾结构:
writeup:
1.这个地方代表了文件头,65是flag.txt的文件结尾,A8 3C代表了校验码,所以7C代表了块类型,这里我们的块类型是文件头,所以改成74就可以正常解压文件。

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

3.保存后解压,再把sercet.png丢到winhex里发现文件头为gif图,将图片后缀名改为.gif。

这里需要一些关于正常文件编码的知识:

jpg图像开始标志:FF D8     结束标志:FF D9

gif图像开始标志:47 49 46 38 39 61   结束标志:01 01 00 3B




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



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

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






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

6.在线PS工具:https://www.uupoop.com/ps/?hmsr=ps_menu(选择——色域,把色域调成1就能看的二维码了,然后就拼接)




十、zip伪加密之base64隐写

基础知识:

1.压缩源文件数据区:


50 4B 03 04:这是头文件标记(0x04034b50)
14 03:解压文件所需 pkware 版本
00 00:全局方式位标记(判断有无加密的重要标志)
08 00:压缩方式
68 BF:最后修改文件时间
9B 48:最后修改文件日期
FE 32 7D 4B:CRC-32校验
E9 0D 00 00:压缩后尺寸
B5 1B 00 00:未压缩尺寸
09 00:文件名长度
00 00:扩展记录长度


2.压缩源文件目录区:

 

50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 03:压缩使用的 pkware 版本
14 03:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密的重要标志,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式
68 BF:最后修改文件时间
9B 48:最后修改文件日期
FE 32 7D 4B:CRC-32校验(1480B516)
E9 0D 00 00:压缩后尺寸(25)
B5 1B 00 00:未压缩尺寸(23)
09 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 80 ED 81:外部文件属性
00 00 00 00:局部头部偏移量

压缩源文件目录结束标志:

50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
5B 00 00 00:目录区尺寸大小
10 0E 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度

然后就是识别真假加密
1.无加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为00 00
2.假加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00
3.真加密
压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00
writeup:

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

2.通过Zipcenop.jar工具对其进行解密
java -jar ZipCenOp.jar r xxx.zip
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==
IGluIHRoZSBwYXBlciBhbmQgY292ZXJlZCB3aXRoIGFuIGFkaGVzaXZlIChzdWNoIGFzIGNvbGxvZGlvbikuIFR=
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/env python
# -*-coding:utf-8 -*-
def get_base64_diff_value(s1, s2):
    base64chars = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\'
    res = 0
    for i in xrange(len(s1)):
        if s1[i] != s2[i]:
            return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
    return res

def solve_stego():

    with open(\'1.txt\', \'rb\') as f:
        file_lines = f.readlines()

    bin_str = \'\'
    for line in file_lines:
        steg_line = line.replace(\'\n\', \'\')
        norm_line = line.replace(\'\n\', \'\').decode(\'base64\').encode(\'base64\').replace(\'\n\', \'\')
        diff = get_base64_diff_value(steg_line, norm_line)
        pads_num = steg_line.count(\'=\')
        if diff:
            bin_str += bin(diff)[2:].zfill(pads_num * 2)
        else:
            bin_str += \'0\' * pads_num * 2

    res_str = \'\'

    for i in xrange(0, len(bin_str), 8):

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

solve_stego()

5.最终flag为:
flag{Base_sixty_four_point_five}
附录:
base64隐写加密:
# -*- coding: cp936 -*-
import base64
flag = \'Tr0y{Base64isF4n}\' #flag
bin_str = \'\'.join([bin(ord(c)).replace(\'0b\', \'\').zfill(8) for c in flag])
base64chars = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\'
with open(\'0.txt\', \'rb\') as f0, open(\'1.txt\', \'wb\') as f1: #\'0.txt\'是明文, \'1.txt\'用于存放隐写后的 base64
for line in f0.readlines():
rowstr = base64.b64encode(line.replace(\'\n\', \'\'))
equalnum = rowstr.count(\'=\')
if equalnum and len(bin_str):
offset = int(\'0b\'+bin_str[:equalnum * 2], 2)
char = rowstr[len(rowstr) - equalnum - 1]
rowstr = rowstr.replace(char, base64chars[base64chars.index(char) + offset])
bin_str = bin_str[equalnum*2:]
f1.write(rowstr + \'\n\')
base64隐写解密:
# -*- coding: cp936 -*-
b64chars = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\'
with open(\'1.txt\', \'rb\') as f:
bin_str = \'\'
for line in f.readlines():
stegb64 = \'\'.join(line.split())
rowb64 = \'\'.join(stegb64.decode(\'base64\').encode(\'base64\').split())
offset = abs(b64chars.index(stegb64.replace(\'=\',\'\')[-1])-b64chars.index(rowb64.replace(\'=\',\'\')[-1]))
equalnum = stegb64.count(\'=\') #no equalnum no offset
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print \'\'.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)]) #8

十一、linux系统文件隐写

writeup:
方法一:

1.winHex打开压缩包,搜索文本flag,找到flag.txt和它的路径:/O7avZhikgKgbF/flag.txt


root/Desktop/file/O7avZhikgKgbF/flag.txt
2.用7-zip打开img文件,根据路径找到flag.txt,得到关键信息:
ZmxhZ3tzYWpiY2lienNrampjbmJoc2J2Y2pianN6Y3N6Ymt6an0=
方法二:
1.可以先用file查看一下文件信息,该文件是linux的系统日志文件
2.使用strings命令查看指定文件下有没有flag这样的字符串
3.ext3是一个日志文件系统,常用于Linux操作系统,所以把它挂载到linux系统上(mnt目录)
root@kali:/opt# mount  f1fc23f5c743425d9e0073887c846d23  /mnt
方法三:
1.拿到附件后直接拖进winhex现有kali linux字样就把该文件拖到kali里面
2.使用binwalk提取文件,发现里面有一个压缩包,其中有flag.txt
3.使用foremost分离文件
4.得到了一个output文件夹,内含zip,zip里面含有flag.txt,但是有密码加密
最终通过base64解密得到flag:
flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}

十二、流量包隐写之jpg

writeup:

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

2.发现有多个flag.txt 的数据组,查找到第1150个包时,追踪流才看到,所以就多点了几次查找,终于让我给找到密码信息了,那就是名为6666.jpg这张图片
3.右键点击,选择追踪流中的http流查看6666.jpg

4.JPG文件以FF D8开头,FF D9结尾,所以图片内容在哪一块就很明显了

5.FFD8FF是jpg文件的文件头,附上各类图的文件头:

在这里插入图片描述

6.把以FF D8开头、FF D9结尾的这部分复制,并在winhex中新建文件并粘贴,注意粘贴格式选择为ASCII Hex(建议先全选复制到记事本然后删去头尾比较方便),放到winhex里面新建一个文件,以ASCII Hex的形式复制进去,保存为jpg文件

在这里插入图片描述

7.另存为jpg文件,查看jpg文件,将其填入flag,发现不是flag。
8.通过上述知道foremost分离文件中的zip目录下有个加密的压缩文件:00002778.zip(该文件通过伪加密进行解压发现文件破坏,并通过暴力破解也无果)
这里的密码有可能就是上述wireshark分析出来jpg文件图片显示的密码:Th1s_1s_p4sswd_!!!

9.查看flag.txt文件最终获得flag:
flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}



十三、gif图片隐写二

writeup:
1.使用stegsolve工具载入图片,根据提示Go Green,当图片左右调整到Green plane 0的时候,显示重叠的flag值
2.最终获得flag:IceCTF{420_CuR35_c4NCEr}

十四、C语言编译执行

writeup:
1.获取c语言源码
flag.c
#include<stdio.h>
#include<string.h>
void main() {
char str[100]="";
int i;
int len;
printf("input string:\n");
gets(str);
len=strlen(str);
printf("result:\n");
for(i=0;i<len+1;i++)
{
    putchar(str[len-i]);
}
printf("\n");
}
2.在kali系统中通过gcc编译成

$ gcc flag.c -o flag

$ ./flag

input string:

warning: this program uses gets(), which is unsafe.

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脚本解密

import random, base64
from hashlib import sha1


def crypt(data, key):
   x = 0
   box = range(256)
   for i in range(256):
       x = (x + box[i] + ord(key[i % len(key)])) % 256
       box[i], box[x] = box[x], box[i]
   x = y = 0
   out = []
   for char in data:
       x = (x + 1) % 256
       y = (y + box[x]) % 256
       box[x], box[y] = box[y], box[x]
       out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))
   return \'\'.join(out)


def tdecode(data, key, decode=base64.b64decode, salt_length=16):
   if decode:
       data = decode(data)
   salt = data[:salt_length]
   return crypt(data[salt_length:], sha1(key + salt).digest())


if __name__ ==\'__main__\':
   data = \'UUyFTj8PCzF6geFn6xgBOYSvVTrbpNU4OF9db9wMcPD1yDbaJw ==\'
   key = \'welcometoicqedu\'
   decoded_data = tdecode(data=data, key=key)
   print decoded_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解密

http://www.cmd5.com/,得出答案12345678。

2.最后获得flag:
flag{12345678}

二十、凯撒密码

题目:
其中字符为:gmbh{4d850d5c3c2756f67b91cbe8f046eebd} 
writeup:
1.刚开始也不知道什么密码,通过crackt00ls工具进行一个个测试,发现其中字符含有flag的最像,并且题目中出现中考眼力,说明要多选中选一个,只有凯撒密码符合。
其中解密凯撒密码的python脚本:(这里脚本加密信息为小写那么它的key也为小写,如果是大写,KEY也是大写)
import pyperclip

message = \'gmbh{4d850d5c3c2756f67b91cbe8f046eebd}\'

LETTERS = \'abcdefghijklmnopqrstuvwxyz\'

for key in range(len(LETTERS)):

translated = \'\'

for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
num = num - key

if num < 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 对文件进行分离

 binwalk -e 1.jpg 分出来一个含有密码的3c356.zip压缩包,其中里面含有一个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解密,那么通过在线工具

https://rot13.com/


2.离线工具crackt00ls工具进行解密

3.python脚本解密
#coding:utf-8

import string

def decoder(crypt_str,shift):
crypt_list = list(crypt_str)
plain_str = ""
num = int(shift)
for ch in crypt_list:
ch = ord(ch)
if ord(\'a\') <= ch and ch <= ord(\'z\'):
ch = ch + num
if ch > ord(\'z\'):
ch -= 26
if ord(\'A\') <= ch and ch <= ord(\'Z\'):
ch = ch +num
if ch > 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.通过在线工具解密:
http://ctf.ssleye.com/morse.html
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/env python
# -*- coding: utf_8 -*-

e = raw_input(\'pleas input sring\n\')
elen = len(e)
field=[]
for i in range(2,elen):
if(elen%i==0):
field.append(i)

for f in field:
b = elen / f
result = {x:\'\' for x in range(b)}
for i in range(elen):
a = i % b;
result.update({a:result[a] + e[i]})
d = \'\'
for i in range(b):
d = d + result[i]
print \'while is\t\'+str(f)+\'\t\'+\'lan: \'+d


3.最终得到flag:
flag{6cb9c256-5fac-4b47-a1ec-59988ff9c8d5}

二十五、Unicode转ascii

题目:
\u0066\u006c\u0061\u0067\u007b\u0074\u0068\u0031\u0073\u005f\u0069\u0073\u005f\u0055\u006e\u0031\u0063\u0030\u0064\u0065\u005f\u0079\u006f\u0075\u005f\u004b\u006e\u006f\u0077\u003f\u007d
writeup:
1.根据编码格式,发现\u就是unicode编码,通过crackt00ls工具转换成ascii
2.最终获得flag:
flag{th1s_is_Un1c0de_you_Know?}

二十六、XXencode编码

题目:
XX?字符:LNalVNrhIO4ZnLqZnLpVsAqtXA4FZTEc+

writeup:

基础知识:

XXEncode是一种二进制到文字的编码!它跟UUEncode以及Base64编码方法很类似。

它也是定义了用可打印字符表示二进制文字一种方法,不是一种新的编码集合。XXEncode将输入文本以每三个字节为单位进行编码,

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

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

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

Xxencode编码原理:

XXencode将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间。以所对应值的位置字符代替。它所选择的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符。跟base64打印字符相比,就是uuencode多一个“-” 字符,少一个”/” 字符。 但是,它里面字符顺序与Base64完全不一样。与UUencode比较,这里面所选择字符,都是常见字符,没有特殊字符。这也决定它当年流行使用原因!

每60个编码输出(相当于45个输入字节)将输出为独立的一行,每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是“h”这个字符(45,刚好是64字符中,第45位\'h\'字符),最后一行的长度字符为剩下的字节数目 在64字符中位置所代表字符。

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

XXencode编码转换过程:

原始字符Cat
原始ASCII码(十进制)6797116
ASCII码(二进制)010000110110000101110100
新的十进制数值1654552
编码后的XXencode字符Eq3O

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

writeup:

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

这里通过在线:http://web.chacuo.net/charsetxxencode,进行转码


2.最终获得flag:
flag{This_is_Xx3nc0de}

二十七、base32解密

题目:

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

还给了我一封情诗

MZWGCZ33MVZGQZLJL5STQOJTGRPWK4SVJ56Q====

writeup:

base家族有base64,base32,base16

1.Base16编码是包含了数字(0~9)和大写字母(A~F),Base32编码与Base64编码最大区别是前者没有小写字母.Base32编码可以用于文件系统的名称(不区分大小情况).而Base64编码后数据量相比原先不是增加很多,可以用于网络传输.

2.根据特征是base32

3.那么可以通过在线工具进行解密

http://www.cha128.com/index.php/archives/189/



4.最终获得flag:
flag{erhei_e8934_erUO}

二十八、键盘布局加密

题目:

方方格格,不断敲击

“wdvtdz  qsxdr werdzxc  esxcfr uygbn”

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

writeup:

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

wdvtdz    x

qsxdr      v

werdzxc   z

esxcfr     o

uygbn    c

2.最终组合起来为:xvzoc

flag为:flag{xvzoc}

二十九、十进制与十六进制转换

题目:

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

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

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

0000944664

writeup:

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

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

2.最终获得flag:

flag{148,18020}


三十、二进制转ascii

题目:

让我们回到最开始的地方

011001100110110001100001011001110111101101100011011001010011001101100101001101010011000000110010011000110010110100110100001110000110001100111001001011010011010001100100001101010011000000101101001110010011100100111001001100000010110100110101011000100011100000110001011001000110001000110110011001100110001101100010011001100011000001111101

wriiteup:

1.通过在线工具进行解密

http://www.txttool.com/wenben_binarystr.asp

2.通过pyhon脚本解密

<script>

var num=\'011001100110110001100001011001110111101101100011011001010011001101100101001101010011000000110010011000110010110100110100001110000110001100111001001011010011010001100100001101010011000000101101001110010011100100111001001100000010110100110101011000100011100000110001011001000110001000110110011001100110001101100010011001100011000001111101\';

function binToAscii(num){

var str1=\'\';

if(typeof num !=\'String\'){

var str=num.toString();

}

var Hlong=Math.ceil(str.length/8);

for(var i=0;i<Hlong;i++){

    str1+=String.fromCharCode(parseInt(str.substring(i*8,(i+1)*8),2));

}

return str1;

}

alert(binToAscii(num))

</script>

三十一、base16解密

题目:

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

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

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

writeup:

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

2.通过在线工具进行解密

http://www.atoolbox.net/Tool.php?Id=930

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}

三十六、键盘坐标密码

题目内容:

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

11 21 31 18 27 33 34

flag格式:flag{*****

基础知识:

我们注意到大键盘区所有的字母上面都有其对应的数字,这个位置几乎在所有的键盘都是相同的。所以我们可以利用这一点应用单表替换的方法进行加密[注2]:

1 2 3 4 5 6 7 8 9 0

Q W E R T Y U I O P

A S D F G H J K L

Z X C V B N M

我们根据上表可以得出,Q是1下面的第一个,A是1下面的第二个……以此类推,每一个字母都会有其对应的数字:
A 12                B 53               C 33
第一个数字代表横向(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. 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. 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.
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:
http://splitbrain.org/services/ook

2.最终flag:
flag{671fb608-265a-492f-a041-b30bb8569490}

三十九、压缩包多文件隐写之flag

题目内容:

压缩包中包含多个文件,且每个文件有一个字母

writeup:

1.通过notepad发现每个文件中含有一个字母

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

进入解压后的目录,然后输入cmd命令:

type dabiaojie* >>flag.txt  

3.通过notepad查看flag.txt,进行重新组合,去掉后面没用的字母(中括号后面的字母)
4.最终获得flag:
flag{0a47061d-0619-4932-abcd-5426f4ea34aa}

四十、zip明文加密

题目内容:

讲真的,才华已经枯竭

大家好好答题

也许这道题一点都不坑

也许。。。。。

wirteup:

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

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



3.最终破解为密码:12345,通过密码解压出文件并查看文件misc3.txt,最终获得flag:
flag{319b7f63-e17d-4ac5-8428-c2476c7ecce3}

四十一、波利比奥斯棋盘加密

题目内容:

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

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

“3534315412244543_434145114215_132435231542”

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

基础知识:
波利比奥斯矩阵为排列顺序的一种数字与字母的密码表,当然每个国家的密码排布并不一样,这里只展示最常用的一种排布方式。如图所示,它是一个6行6列的矩阵,第一行为数字1~5,第一列也为数字1~5,表里是26个字母,除了I与J以外,每个字母都各占据一个格子,也就是每个字母都有它们的数字表示,类似于坐标。
它们的坐标读取并不是我们习惯的行列读取,而是与之列行读取。比如字母“B”,用数字表示它就是“12”,而不是“21”。比如要表达单词“HELP”,则写成密码就是23 15 31 35。
判断是否是用棋盘密码破解的方式页很简单,只要出现数字是成双出现的数组串,而且有出现最大数字大于26的,那是棋盘密码的可能性就很大。
writeup:

1.题目重要的部分是“波利比奥斯棋盘”和一串数字“3534315412244543_434145114215_132435231542”

2.百度波利比奥斯棋盘,简单的来说就是把字母排列好,用坐标的形式表现出来。字母是密文,明文便是字母的坐标。它是一个6行6列的矩阵,第一行为数字1~5,第一列也为数字1~5,表里是26个字母,除了I与J以外,每个字母都各占据一个格子,也就是每个字母都有它们的数字表示,类似于坐标。

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

35 34 31 54 12 24  45 43_43 41 45 11 42 15_13 24  35 23 15 42

P  O  L  Y  B  I/J U  S   S Q  U  A  R  E   C I/J P  H  E  R

4.题目提示小写字母,所以构造flag{polybius_square_cipher},注:这里的24有两个对应的字母,尝试i是正确的,而j是错误的,且和原来的格式要保持一致。


四十二、base64隐写之藏头诗

题目内容:

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

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

5LiD5pyI5Zyo6YeOICA=

5YWr5pyI5Zyo5a6HIA==

5Lmd5pyI5Zyo5oi3

writeup:

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

https://base64.us/

2.解密出:

七月在野 

八月在宇

九月在户

3.通过百度搜索,发现它的下一句是:十月蟋蟀入我床下


4.最终flag:

flag{十月蟋蟀入我床下}

四十三、特殊二进制转ascii

题目:
01001001 01100011 01100101 01000011 01010100 01000110 01111011 01100001 01101100 00110001 01011111
01101101 01111001 01011111 01100010 01100001 01110011 01100101 01110011 01011111 01100001 01110010
01100101 01011111 01111001 01101111 01110101 01110010 01110011 01011111 01100001 01101110 01100100
01011111 01100001 01101100 01101100 01011111 01111001 00110000 01110101 01110010 01011111 01100010
01100001 01110011 01100101 01110011 01011111 01100001 01110010 01100101 01011111 01101101 01101001
01101110 01100101 01111101
writeup:

1.下载flag.txt是二进制的文本


2.可以看到二进制是八位数,通过在线工具进行解密
http://www.5ixuexiwang.com/str/from-binary.php


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

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

IceCTF{al1_my_bases_are_yours_and_all_y0ur_bases_are_mine}

四十四、PNG图片隐写一

writeup:
1.用StegSolve提取三个颜色的rgb值,之后会得到一张图片。

2.以用SetgSolve提取出图,点击Analyse -> Data Extract, 在弹出的窗口中把RadGreenBlue都勾上, 然后点击Preview

3.会发现头部是PNG, 表示这是一张PNG图片, 然后点击Save Bin, 把图片提取出来打开, 就出现了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,粘贴--剪切板数据--粘贴--ascii hex。最终可以看到头部为:GIF89a开头
2.保存文gif文件,使用stegsolve工具中analyse--frame browoser
3.即可获得flag
flag{2017_love_U}

四十六、jpg图片隐写二

writeup:
1.下载附件,并解压,得到一张很大的图片,然后查看图片属性或者通过notepad搜索关键字flag即可获得
2.最终flag为:
 flag{I_I-0_0-*_*}

四十七、流量包隐写

writeup:
1.通过下载流量包,从文件名后缀pcapng来看是一个抓包文件,但是使用wireshark无法识别打开

2.找一个正常的pcapng文件对比文件头,对kill.pacpng的文件头进行对应修改,修改后仍然无法打开

3.使用strings.exe对kill.pcapng中的可打印字符进行提取,保存到strings.txt文件中,命令

strings   kill.pcapng  >kill.txt

4.打开strings.txt,搜索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包,出现异常现象:


2.将cap包修复为pcap包,通过地址:http://f00l.de/hacking/pcapfix.php

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


4.或者通过notepad,搜索flag关键字,发现提示where is the flag

5根据上面规律可言看到输入顺序是从右到左边,都是每次发送2个数据包,值需要取其中一个就行了
6.最终得到flag:
flag{aha!_you_found_it!}
题目名称:
Bubble
基础知识:
Bubble Babble Binary Data Encoding是由Antti Huima创建的一种编码方法,可以把二进制信息表示为由交替的元音和辅音组成的伪词(pseudo-words),主要用于密码指纹,其编码也具有内置的纠错和冗余。编码格式每5个字符中间以-来分隔,作者的原意就是想把难以记得的二进制数据表示为难忘的伪词。
writeup:
1.下载附件,查看文件信息是一组字符串:
xinik-samak-luvag-hutaf-fysil-notok-mepek-vanyh-zipef-hilok-detok-damif-cusol-fezyx,并且是每个字节以-分隔,符合buddle加密
2.通过在线工具可以进行解密


3.通过python脚本解码:
from bubblepy import BubbleBabble

str=\'xinik-samak-luvag-hutaf-fysil-notok-mepek-vanyh-zipef-hilok-detok-damif-cusol-fezyx\'
bb = BubbleBabble()
print (bb.decode(str))

4.最终获得flag:
flag{Ev3ry7hing_i5_bubb13s}

五十、lzip文件隐写

writeup:

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

2.利用linux下面的命令xxd,可以将类似文本转换为文件 

cat thor.txt |xxd -r  >thorfile   //查看thor.txt十六进输出,并通过xxd -r 转换成二进制文件

3.使用winhex打开文件thorfile,发现文件头为LZIP

5.在linux下使用lzip命令对文件进行解压

lzip  -d  thorfile //对lzip文件进行解压,得到thorfile.out文件

6.使用winhex打开文件thorfile.out,文件头为有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:

1.like to approach problems with a fresh perspective and try to visualize the problem at hand,意思是将其内容转换成图像化

2.根据上面内容可知道是十六进制,我们可以将16进制数转化为图像,这里先尝试将16进制转换为二进制

000000000000000000000000000000000

011111111011100011111111011111110

010000011010010000000000010000010

010111011010000010100000010111010

010111011011010000100100010111010

010111011010010101000000010111010

010000011001000010011000010000010

011111111010101010101011011111110

000000000010110000010111000000000

001010111011011111011100110111110

001110000011111101111000010011110

011100111010010110100000111010110

010101000001011000000111100010110

000100111101000010101011010010000

010001100011001000011011000101000

010111111110010111111100101110110

001001100110110010101100110101010

000101111010000111101011100111010

001010100011000100011000000001010

001010111001010010000000100000110

010110000001010101100111001011010

011101111010100111111011111111100

000000000010000000010111000110110

011111111000000011011011010101000

010000011011001010111111000111010

010111011001110110010011111111010

010111011010111101010111010101100

010111011000100000001011110100000

010000011011000100110011100101100

011111111000000101010011001010000

000000000000000000000000000000000

3.这里看起来有点像一个二维码,可将0转化为白色,1转化为黑色,通过以下python脚本进行转换成二维码

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
import numpy as np


def hex2bin(hexmat):
binmattemp = [bin(m)[2:] for m in hexmat] # 全转成二进制
rowlen = max([len(m) for m in binmattemp]) # 取最宽的值
binmat = [[0] + [int(b) for b in row.zfill(rowlen)] for row in binmattemp] # 用0补齐

print rowlen + 1, \'x\', len(binmat)
for i in xrange(len(binmat)):
print \'\'.join([str(b) for b in binmat[i]])

return binmat, rowlen + 1, len(binmat)


def rm_col(binmat, col): # 移除指定的列
return [row[:col] + row[col + 1:] for row in binmat]


def make_bw_img(binmat, w, h, outfilename, blackbit=0):
bwmat = [[0 if b == blackbit else 255 for b in row] for row in binmat] # 用255表示白,0表示黑

imagesize = (w, h)
img = Image.fromarray(np.uint8(np.array(bwmat)))
img.save(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_rmcol.png\', blackbit=1)
4.最终会生成一张二维码图片以及显示转换成的二进制
5.通过在线扫描二维码识别

6.最终扫描获得flag:

IceCTF{HAck1n9_mU5Ic_W17h_mID15_L3t5_H4vE_a_r4v3}

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

writeup:

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

2.将后缀名改为capture.pcap,通过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生成

https://1024tools.com/hash


7.最终生成flag:
PCTF{0be2407512cc2a40bfb570464757fd56cd0a1d33f0bf3824dfed4f0119133c12}

五十四、apk文件隐写

writeup:
1.下载附件apk,然后通过jd-gui.exe对其进行反编译出源码
2.通过一个个文件查找关键字ctf,这里在\misc100\res\raw\here文件中找到,通过notepad搜索出ctf关键字
3.最终获得flag:
ctf{adkankjasnfmasncmansddfmnasm}

五十五、zip明文攻击与盲水印

writeup:
1.解压出来是这样的

2.warmup里是这样的

:

3.用winrar软件对图片raopen_forum.png压缩成open_forum.zip文件


4.比较两个文件的是否为同一文件,这里比较CRC32的值


5.使用工具Advanced Archive Password Recover进行明文攻击

6.点击start,开始对比筛选key,速度很快,一会就解密成功,如下所示:
7.筛选很快,完成后会出现三个加密密钥,点击后面导出,即可将加密的ZIP包另存为空白的ZIP包,如下所示:
8.解压出来是这样,有fuli.png和fuli2.png,这里是使用了盲水印隐写。



9.合成盲水印图:

盲水印用到的py脚本可以在github上下载,https://github.com/chishaxie/BlindWaterMark,使用时需要安装前置opencv-python库

python bwm.py decode fuli.png fuli2.png wm_out.png

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.下载一个压缩包,解压后得到一个readme.tex文件以及一个加密的压缩文件desktop.zip,其中也包含了readme.txt文件
2.将readme.txt文件通过winrar文件压缩成readme.zip
3.对比readme.zip和desktop.zip的readme文件的CRC32的值是一样,那么这里考虑进行明文攻击
4.通过Advanced Archive Password Recovery4.53版本对 zip进行明文破解



最终得到flag:
flag为:
flag{7ip_Fi13_S0m3tim3s_s0_3a5y@}

五十九、png图片隐写之bmp图片

基础知识:
LSB,最低有效位,英文是Least Significant Bit 。我们知道图像像素一般是由RGB三原色(即红绿蓝)组成的,每一种颜色占用8位,0x00~0xFF,即一共有256种颜色,一共包含了256的3次方的颜色,颜色太多,而人的肉眼能区分的只有其中一小部分,这导致了当我们修改RGB颜色分量种最低的二进制位的时候,我们的肉眼是区分不出来的。一般BMP图片格式存在LSB隐写居多。
writeup:
1.下载一个文件,通过winhex打开,发现文头部数据是png,那么这里将文件后缀名改成.png,即可看到图片
2.怀疑该文件存在隐写,通过stegslolve工具打开,查看图片的不同通道,这里在green plane 0通道发现有隐藏的比特位数据,那么就是LSB隐写
3.用stegslolve工具data extract功能提取出G通道的green plane 0比特位的数据
4.导出的数据通过winhex打开,发现和bmp图片格式非常像
5.这里将47 4C 修改填充为 42  4D
6.并另存为.bmp图片格式文件
7.最终得到flag:
flag{D0_n07_10se_y0ur_he4rt}

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

writeup:
1.下载.Py.pyc文件用winhex打开,发现关键字tprycne typ.g41fz字符,该字符看起反转了。其中使用了Python 的EncryptPYT库进行加密 
2.编写python脚本,并将整个文件反转过来存储,脚本如下:
f = open(\'Py.py\',\'wb\')
with open(\'PyHaHa.pyc\',\'rb\') as g:
f.write(g.read()[::-1])
f.close()
3.通过winhex打开保存的Py.pyc文件,发现末尾添加了2个flag信息,以及末尾添加一个MP3格式文件
4.通过foremost提取文件
5.Window下打开zip,发现注释信息含两段flag密文
6.发现该文件存在伪加密,通过工具ZipCenOp.jar对00000000002.zip压缩文件进行伪加密破解(0908替换0008就可以)

7.解压出压缩文件,发现有一个mp3文件
8.Mp3用DeEgger Embedder工具的extract files功能提取得到包含多段base32的数据
9.通过base32解密,明文是一段字符串。再次通过base32转码发现尾部字母存在差异:

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

上传成功
11.得到的0和1数据其实是一张二值图像,通过脚本将其转换为png图片,转换出来只不过后半部分被加密了,加密算法应该是在刚刚的pyc里。
上传成功

图片:

上传成功

12.对py.pyc进行分析,发现.pyc的文件头03F30D0A缺少,以及该文件中添加隐藏了一个zip文件。这里通过winhex打开我们解压得到对00000000002.zip文件分析,发现是PK字符串开头(50 4B 0304)

13.因此,在py.pyc中先添加文件头03F30D0A,并搜索关键字PK(50 4B 0304),然后删除zip数据。
14.通过选择选快开始位置然后选快尾部位置,然后按del即可删除块区域

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

https://tool.lu/pyc/

#!/usr/bin/env python

# visit http://tool.lu/pyc/ for more information

from os import urandom


def generate(m, k):

    result = 0

    for i in bin(m ^ k)[2:]:

        result = result << 1

        if int(i):

            result = result ^ m ^ k

        if result >> 256:

            result = result ^ P

            continue

    return result



def encrypt(seed):

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

    while True:

        yield key

        key = generate(key, seed) + 0x3653C01D55L



def convert(string):

    return int(string.encode(\'hex\'), 16)


P = 0x10000000000000000000000000000000000000000000000000000000000000425L

flag1 = \'ThIs_Fl4g_Is_Ri9ht\'

flag2 = \'Hey_Fl4g_Is_Not_HeRe\'

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

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

result = encrypt(key)

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

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

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

print \'flag1:\', encrypt2

print \'flag2:\', encrypt3

f = open(\'encrypt.txt\', \'w\')

f.write(encrypt1)

f.close()

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.使用volatility imageinfo -f mem.vmem查看内存映像

 python vol.py  imageinfo -f mem.vmem

2.使用volatility 查看WinXPSP2x86 进程,并发现一个特殊进程为TrueCrypt.exe,进程值为:pid(2012),该进程的程序为加密磁盘的工具。
python vol.py  psscan -f mem.vmem --profile=WinXPSP2x86
3.使用volatitility工具导出内存数据
volatility -f mem.vmem --profile=WinXPSP2x86 memdump -p 2012 -D /tmp

6.打开EFDD,并挂载加密磁盘
在这里插入图片描述


7.查看挂载磁盘中的flag

六十二、维吉尼亚密码

题目内容:
题目给出了一段很长的字符,如下 :
ohvab oorbfb ooykabe qsmnooxsu fehgsn i gwlznatwbs nfewbkcwohg hvxooyhfp khbhcqwzyhbqohyykaehbm nflvbscwtzrzb it ogsuswbpeyqqwps sfezo rspkeo rswtzoh uqvmbrbqd erkkqw h tzpxwzgzfq werzfilvbkk fewbrcfoo xkfflpjccfkpbkcwtzrkfk weyyfqlvgcvxk hg rkqdrjetchpdztq bercs pboxhs pbvgcsf dpipfpkpq hvitpj k xxywjckxop jhvxohyyfit erzfplebr bioeysnalexsfilvgcvioj jhcwopyykaewx kk ptpqunccbushxcp ohvab oorbfb ooykabe qsmnooxsu fehgsn i gwlznatwbs nfewbkcwohg hvxooyhfp khbhcqwzyhbqohyykaehbm nflvbscwtzrzb it ogsuswbpeyqqwps sfezo rspkeo rswtzoh uqvmbrbqd erkkqw h tzpxwzgzfq werzfilvbkk fewbrcfoo xkfflpjccfkpbkcwtzrkfk weyyfqlvgcvxk hg rkqdrjetchpdztq bercs pboxhs pbvgcsf dpipfpkpq hvitpj k xxywjckxop jhvxohyyfit erzfplebr bioeysnalexsfilvgcvioj jhcwopyykaewx kk ptpqunccbushxcp ohvab oorbfb ooykabe qsmnooxsu fehgsn i gwlznatwbs nfewbkcwohg hvxooyhfp khbhcqwzyhbqohyykaehbm nflvbscwtzrzb it ogsuswbpeyqqwps tqgnru tq gn fl j tt hgmvilxbmeaw,ylrfi w e rkk q t p gsn ,feh gsn feh gmn fehj hfqdlyaeqder kk qwerk kqwyaacswxybxyw j qqp pc jqq poerrutqcxlaek,.nh.,am,.uzw,ebsxxghgzbspugdbvkezbvytyzzeqwrzheqlxelcx rbylwxmprhdqlrxhdxezj,hfilpbzka bethvq eprsvqeprsv qeprs sfepgpvfb,mgssq wd u vt k c pqqyqgyasdxgszzv ognrutoespsx feptvkqgej kkqw{ erhvstpt} Cgeut Fxuunabs Kgsqsi, trjzu qdvop, kpk n rgwtl fudstl ryosel nu fvt zbvd kwwa uts Rzejehxsa Cdcizrse* Grzbpx gtl giq pdqf gdst. Sa vzwczncuhtv upggt gs uic hlbsqmh kgpar pl giq paaae qbs, vrumqwwq gdcb agt zsxyucaigk vo m gfmnsq ugghop. Hww butsg zbvesh gs uts hlefqh, rgatowdmf pr rturof zxnrt iwizvo fvte, tblss sg pzs pfbutsg ovut pggjo uaeweugfqsomq tpurt.Fvt xbsysg lrombi gs pgf wghtq, o ejvfeh, wsq euss aa uts qspl pfpovos-fdgz. Buf, bmfuk tggz imjxft cqsc dbos scuypess, zhos wc sym fvt jbpyg, pfq uts lsfuq fdgz cqvxfq uts zagdtsc ont xwilrsqr lagi azs mffxshk cbbsgk. Nnabv lufes X xbvzr p xrx boewe-dajtjre ncdcf, uts estfe cu oujov lwef oigdre mbs vnnb: Hww Ncnci, tl Xmziwe Tocil, Giq Rtnbvf Qdezvzwrsau, mbs Luf Ysbgvse cu Nveaqf. A yjwss luf xohl ofeh qwpbggt agt xspnrt isgw lfxzdo. Giq kxdq hmfswa cqvxfq uts wghtq qdfgbubtv n dqbijnm mdedr- udst sae m tto fudovyyjzu qmfiqg, jfqfd ccw bg ivxuu J rcjfq uts asgf fscsau*e fjkgz nwrqpmq-djec. Iq vpv ofqb p nrsk qwsejfoqdr qdwtkg; jz vxk jjxz ww ubp ztxg bxz waf nabtq gp ubhlvughxgat mbs luf rigfvugft gs iug wghtq hd zvt ewhlrs.Tsgw vt kcg xybs:xaxybs{W_Zf0j_o0fvxft} bpozva,tmbscwozjzvaghbucqfzpqv,scpguyyx;ezuijpdsdoepisdef,e hgsyfherv kqheu hvttpuh,kqhsgsyfp vkyjcpckd bekxhtbtmw gsyfesg fodgpgukq hervnfemthsfgrzhcxgxthvstpth.xzgegukqgeruk,nlrddsvsaelkqgmga;etmeapy; ylpt;ayxt;xyv;dfewg;ucf;mwru;dflpt;acspdclhvsqceorqexavxksgacqkxyhbyg wxhdxevtacfgqthvstpth;dygwzywn myraxtkiczwwg dwdkwerzzkzes gsbnipyysf bercfnler pkqbxgsdxomyhv n tpohvnoxgzvabwzhfaex ohvqnxoheqmwxucbmwgs nnmeybvylmgsdxbzahvs beysbxmmxudxf rozdsmwoykqerzzbeuh gpdxe;xohcq;mmyh;dq dxypbyewqysylerybvprfu xnmwra;bnm;rxpd;fgx;o rvnoebscni norc qsmkxft-sacb. Svs, yihll gdcb znwubv trfz zdft fzqagffp, vjft jz oad giq fdgzt, mbs luf norc qsmkxft-sacb. Svs, yihll gdcb tndw rgsjjzu-ggbn. Mwg, ehtfm ujbn tokaah nstf ypzu tfpmagtv, uvzu xf nmx hww epaah, sae fvt tndw rgsjjzu-ggbn. Mwg, ehtfm ujbn tokaah nstf ypzu tfpmagtv, uvzu xf nmx hww epaah, sae fvt
提交:flag格式:flag{}
基础知识:

维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行及26列的字母表。另外,维吉尼亚密码必须有一个密钥,这个密钥由字母组成,最少一个,最多可与明文字母数量相等。维吉尼亚密码加密方法示例如下:

明文:I\'ve got it.
密钥: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个位置),后面再循环操作即可完成加密任务。

例如:

明文:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER。

密钥:BIG

密文:UPK CCZDPKS BNF JGLMX BVJ UPK DITETKTBODS SBSKS

  • 维吉尼亚密码只对字母进行加密,不区分大小写,若文本中出现非字母字符会原样保留。
  • 如果输入多行文本,每行是单独加密的。
writeup:
1.这里使用一个在线维吉尼亚密码解密网站:https://www.guballa.de/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识别工具即可识别出二维码

http://cdn.malu.me/qrdecode/

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(header chunk):它包含有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.得到十六进制字符串
3441344134383435353535323533344534423541344135353334353333323446344134453433353533323536343335343441354134343535353535343433343634423335344334363437353634333443344235413434343534443536344235343439344534433535353535363533344234393541343435363435353533323531343933353443343534443536344234453442353634363436344235333442344634413445343335363446353533323534344233353436353634353532353335373439353634413534343535363332344234413541343634353442353234423533344134413442353535393532353334383439353535413436343735333332353734413532343434353539353234423534344135353541343534393533354135363439353634433436344235353532353334423335343634353334353334333536344233353441343634373534343334443441344134343436344235343442353334413445344235353446353335333444344235363441353634463535333234443441353234323435353335363533344534423444354134363531353335333446343935413433353634423535353235333441353234343535353535343533343734413536344135353537353633323442344234413433343534423535333235363441344534423435353735343533343734423541344235363435353133323438344134453443343535333536343334363442354134363535333635333332344234393541343335353332353634333443344235363436343533343532343334363441333534433436343735373533344334433441343434363444353434423532343734413435343535353533344135333442353634443536343535333332344434393335343535363535353635333534344234443541343634373533353335373439353634333535343735363533344234423445343635353535353334333436343734413437353634373536353334423442354134373435343935323442353834413445343934353533353335333436343935413437353634393533333235343441344534383435344435363442353434423541344135353539353334413536344135363443343535373536344135333443343234363435353535343433343634393335344334353437353634333443344334413434343634443534333235353439344534323535353935323533343434423532343735363444353533323535344134363445343534393536344234363441353535413436344635333533343734393335344235353446353634413533344135323436343635353532353334363441344534413534343535343332344234413541343334363442353633323534344234453437343535333536353334383442354134353535333234443533343834413441344534353535353234423538344233353432353634393533333233323439344534333536353335353541353334413445343634363435353133323535343935363442353634373536343334423441354134343436344435343442353534393445343435353537353234413533343935363434353634423531333234443441353234363435343535363533353034423541344534363444353233323442344135323433353434393536344235343441344534353536353535333433353734413445344234353437353434423441343735363437343534423533344235333442344534363435353735373533343334423536343435363437353535333537344134453438343535393536353335343442353634413536343735333541353634393541344334353442353635323533343933353435353634443534343334373439333534423436343735343433344334423541343735363444353534423532343734413443353535373534353334453442353533323436344235353332344134413445344534353437353635333445344234453441353634353533353235353437344134423536344635353533343434393532343635363444353335333536343735413442343535373536333234423441354134363535344235363332353734423445343734353539353135333437344235413433353634333535333234383441343533323535333235363442354134423532343235353531353334423536344334413442353533323535333234423442344534343535353535343433353634423445344335363437353334333443344334413434343634423445343335353439344534413535353535343533344434393541343735363444353335333536344134453439353635353532353335303442344435413436344635333533344634413536343434353437353635333534343935323437343534443533343335363439353634423435343735323533343834413441343734353442353634423537344234453436343535393533353334373442354134373536343735333332353434413445343834353535353634423538344233353441353534393533333235333439344134423534343935363441353334423541343634363535353335333436344334363441343535373534353334433442344134343436344235343332353434413444354134353539353235333444343935353541343634443535333234353441344134383435344435323433344334423445344135353446353335333445344334413433343534463536333234343441353234363535353535343433353634413536344134353537353635333443344135413435343534423536333235373441344534453435353735353533343834423541343735363433344435333537344134413434343534443532344235323442343935413435353935323332344634393441344334353332353535323533343934453436343533343532343335373441333534433435353735363442344334413541343434353444353434423534343734413442353535333534344135333439353634433536344435353332344534413436343634353537353634423443344135413441353634463533333234463439353234423536343735363533353334423536343535363535353234423537344133353441343534373535353334423441343535413436344235363442353334423445343734353535353635333434343935413439353634373444353335383441344134433435344235323442343434423541343634363437353333323442343935413443343534373536333234433439353634363535333234453533353534373441343934353533353034393344
8.将其转换成ascii字符,
9.转完第一次得到:
455132484A4E4C45535643464B5A46553653324B495A43553256434C4B564645345243464A354C464757534C4C4A44464D544B52474A454555534A534B564D564553324D49354556555653544B4D5A4647535357495643554756534B4B4E465555534346474A47564756534B4B5A474549524B584A4E494553535346495A4756495332544A4E48454D564B544B5A4A5559534A564A564C4557564A534C4246455554434649354C454756434C4C4A44464D543255494E4255595253444B5247564D5532554A464E4549564B464A555A464F53534749354B554F564A534A524646555253464A4E4A544554324B4A5A43464B5632544B4E4745535653484B5A4555324D53484A4A4E4555524B584B35425649533232494E435653555A534A4E46464551325549564B564756434B4A5A44464D544B55494E445557524A53495644564B51324D4A524645455653504B5A4E464D52324B4A52435449564B544A4E4556555343574A4E4B4547544B4A475647454B534B534B4E4645575753434B564456475553574A4E4845595653544B564A5647535A56495A4C454B565253493545564D54434749354B464754434C4B5A47564D554B52474A4C555754534E4B5532464B55324A4A4E4E454756534E4B4E4A5645535255474A4B564F555344495246564D535356475A4B455756324B4A5A46554B5632574B4E4745595153474B5A4356435532484A45325532564B5A4B52425551534B564C4A4B553255324B4B4E4455555443564B4E4C564753434C4C4A44464B4E4355494E4A555554534D495A47564D5353564A4E4956555253504B4D5A464F53534F4A56444547565354495247454D53435649564B45475253484A4A47454B564B574B4E4645595353474B5A4756475332544A4E484555564B584B354A5549533253494A4B5449564A534B5A4646555353464C464A455754534C4B4A44464B5432544A4D5A455952534D49555A464D5532454A4A48454D52434C4B4E4A554F53534E4C4A43454F5632444A524655555443564A564A455756534C4A5A45454B5632574A4E4E45575553484B5A4756434D53574A4A44454D524B524B495A455952324F494A4C4532555253494E4645345243574A354C4557564B4C4A5A44454D544B54474A4B5553544A5349564C564D55324E4A46464557564B4C4A5A4A564F53324F49524B56475653534B56455655524B574A354A454755534B4A455A464B564B534B4E474555565344495A4956474D53584A4A4C454B524B444B5A46464753324B495A4C454756324C49564655324E5355474A49455350493D
10.继续转第二次得到
JJHEURSNKZJU4S2OJNCU2VCTJZDUUTCFK5LFGVCLKZDEMVKTINLUUVSKIZDVEU2QI5LEMVKNKVFFKSKOJNCVOU2TK5FVERSWIVJTEV2KJZFEKRKSJJKUYRSHIUZFGS2WJRDEYRKTJUZEISZVIVLFKURSK5FE4SCVK5JFGTCMJJDFKTKSJNKUOSSMKVJVOU2MJRBESVSNKMZFQSSOIZCVKURSJRDUUTSGJVJUWV2KKJCEKU2VJNKEWTSGKZKVEQ2HJNLESVCFKZFU6S2KIZCU2VCLKVFE4RCFJ5LFGWSLLJDFMTKRGJEEUSJSKVMVES2MI5EVUVSTKMZFGSSWIVCUGVSKKNFUUSCFGJGVGVSKKZGEIRKXJNIESSSFIZGVIS2TJNHEMVKTKZJUYSJVJVLEWVJSLBFEUTCFI5LEGVCLLJDFMT2UINBUYRSDKRGVMU2UJFNEIVKFJUZFOSSGI5KUOVJSJRFFURSFJNJTET2KJZCFKV2TKNGESVSHKZEU2MSHJJNEURKXK5BVIS22INCVSUZSJNFFEQ2UIVKVGVCKJZDFMTKUINDUWRJSIVDVKQ2MJRFEEVSPKZNFMR2KJRCTIVKTJNEVUSCWJNKEGTKJGVGEKSKSKNFEWWSCKVDVGUSWJNHEYVSTKVJVGSZVIZLEKVRSI5EVMTCGI5KFGTCLKZGVMUKRGJLUWTSNKU2FKU2JJNNEGVSNKNJVESRUGJKVOUSDIRFVMSSVGZKEWV2KJZFUKV2WKNGEYQSGKZCVCU2HJE2U2VKZKRBUQSKVLJKU2U2KKNDUUTCVKNLVGSCLLJDFKNCUINJUUTSMIZGVMSSVJNIVURSPKMZFOSSOJVDEGVSTIRGEMSCVIVKEGRSHJJGEKVKWKNFEYSSGKZGVGS2TJNHEUVKXK5JUIS2SIJKTIVJSKZFFUSSFLFJEWTSLKJDFKT2TJMZEYRSMIUZFMU2EJJHEMRCLKNJUOSSNLJCEOV2DJRFUUTCVJVJEWVSLJZEEKV2WJNNEWUSHKZGVCMSWJJDEMRKRKIZEYR2OIJLE2URSINFE4RCWJ5LEWVKLJZDEMTKTGJKUSTJSIVLVMU2NJFFEWVKLJZJVOS2OIRKVGVSSKVEVURKWJ5JEGUSKJEZFKVKSKNGEUVSDIZIVGMSXJJLEKRKDKZFFGS2KIZLEGV2LIVFU2NSUGJIESPI=
11.然后继续base32解码
JNJFMVSNKNKEMTSNGJLEWVSTKVFFUSCWJVJFGRSPGVFUMUJUINKEWSSWKRFVES2WJNJEERJULFGE2SKVLFLESM2DK5EVUR2WJNHUWRSLLJFUMRKUGJLUSWSLLBIVMS2XJNFEUR2LGJNFMSKWJRDESUKTKNFVURCGKVITEVKOKJFEMTKUJNDEOVSZKZFVMQ2HJI2UYRKLGIZVSS2SJVEECVJSKJHE2MSVJVLDEWKPIJEFMTKSKNFUSVSLI5MVKU2XJJLEGVCTKZFVOTCCLFCTMVSTIZDUEM2WJFGUGU2LJZFEKS2OJNDUWSSLIVGVIM2GJZJEWWCTKZCEYS2KJRCTEUSTJNFVMTCGKE2EGUCLLJBVOVZVGJLE4USKIZHVKTCMI5LEIRSJKZBUGSRVKNLVSUSSK5FVEV2GIVLFGTSLKVMVQQ2WKNMU4USIKZCVMSSRJ42UWRCDKVJU6TKWJNKEWVSLLBFVEQSGI5MUYTCHIUZUMSJSGJLUSWSHKZFU4TCSJNLFMVJUKQZFOS2WJNMFCVSDLFHUETCFGJLEUVSJLJFVMSKSKNJUWWSDKRBU4U2VJZJEYRKNKRFUOSK2LFLE2VSDJNFDKSSGJMZDGWCLKJLUMRKVKNHEWVKZKRGVMQ2VJFFEQR2LGNBVMR2CJNDVOVKUKNFFMS2UIM2EWVSMIJKUKNSWKNDUSVRUIZEVORCRJI2UURSLJVCFQS2WJVEECVJSKJFVCWKEKM6T2PI=
13然后再一次继续Base32解码
KRVVMSTFNM2VKVSUJZHVMRSFO5KFQ4CTKJVTKRKVKRBE4YLMIUYVI3CWIZGVKOKFKZKFET2WIZKXQVKWKJJGK2ZVIVLFIQSSKZDFUQ2UNRJFMTKFGVYVKVCGJ5LEK23YKRMHAU2RNM2UMV2YOBHVMRSKIVKGYUSWJVCTSVKWLBYE6VSFGB3VIMCSKNJEKNKGKJKEMT3FNRKXSVDLKJLE2RSKKVLFQ4CPKZCWW52VNRJFOULLGVDFIVCCJ5SWYRRWKRWFEVSNKUYXCVSYNRHVEVJQO5KDCUSOMVKTKVKXKRBFGYLLGE3FI22WIZGVKNLRKVVU4T2WKVKXQVCYOBLE2VJVIZKVIRSSKZCTCNSUNRLEMTKGIZYVMVCKJ5JFK23XKRWFEUSNKUYTMVCUIJHGK3CVGBKGWUTSJVKTC4KVLBUE6VSGIV4FIWDQJ5JFKMDXKVMHAU2RKQYDS===
14.接着再一次继续base32解码
TkVJek5UVTNOVFEwTXpSRk5EUTBNalE1TlVFMU9EVTROVFUxUVRRek5EVTBRVFZCTlRVME5qUTFOVEkxTXpSQk5FWXpOVFJETlRVME9UVXpOVE0wT0RSRE5FRTFOelUyTkRVMFJUVXpOVEkwUlRWQk5FTTBOelF6TlRVMU1qVXlORU0wT1RNeU5UWTBSak16TkVFMU5qUkNOVUUxTXpVMU5FUTFRVE16TlVFMFFqVTJORUkwTlRRMU16TTBNelU0TkRrMU1qUXhOVFExTXpORU0wUXpSQT09
15.然后再base64解码
NEIzNTU3NTQ0MzRFNDQ0MjQ5NUE1ODU4NTU1QTQzNDU0QTVBNTU0NjQ1NTI1MzRBNEYzNTRDNTU0OTUzNTM0ODRDNEE1NzU2NDU0RTUzNTI0RTVBNEM0NzQzNTU1MjUyNEM0OTMyNTY0RjMzNEE1NjRCNUE1MzU1NEQ1QTMzNUE0QjU2NEI0NTQ1MzM0MzU4NDk1MjQxNTQ1MzNEM0QzRA==
16.然后再一次继续base64解码
4B355754434E4442495A5858555A43454A5A55464552534A4F354C55495353484C4A5756454E53524E5A4C47435552524C4932564F334A564B5A53554D5A335A4B564B454533435849524154533D3D3D
17.然后继续16进制转ascii
K5WTCNDBIZXXUZCEJZUFERSJO5LUISSHLJWVENSRNZLGCURRLI2VO3JVKZSUMZ3ZKVKEE3CXIRATS===
19.然后继续base32解码
Wm14aFozdDNhRFIwWDJGZmR6QnVaR1Z5Wm5VeFgyUTBlWDA9
20.然后base64解码
ZmxhZ3t3aDR0X2FfdzBuZGVyZnUxX2Q0eX0=
21.然后再继续base64解码
22.最终得到flag:
flag{wh4t_a_w0nderfu1_d4y}


六十七、曼彻斯特编码

题目内容:

  5555555595555A65556AA696AA6666666955,提示:曼联

基础知识:

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

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


160829401.jpg

writeup:

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

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

#!/user/bin/env python2
# -*-coding:utf-8 -*-

n=0x5555555595555A65556AA696AA6666666955
flag=\'\'
bs=\'0\'+bin(n)[2:]
r=\'\'
def conv(s):
    return hex(int(s,2))[2:]
for i in range(0,len(bs),2):
        if bs[i:i+2]==\'01\':
            r+=\'1\'
        else:
            r+=\'0\'
for i in range(0,len(r),8):
    tmp=r[i:i+8][::-1]
    flag+=conv(tmp[:4])
    flag+=conv(tmp[4:])
print flag.upper()

3.最终得到flg:
flag{FFFFFED31F645055F9}

六十八、pyo文件反编译之反推flag字符

writeup:
1.下载附件发现有两个文件,包括pyo文件和一个flag.enc文件
2 .pyc是由py文件经过编译后生成的二进制文件。而.pyo文件是python编译优化后的字节码文件。接下来把encrypt.pyo反编译成.py文件,通过在线反编译出pyo文件。
3.最终得到反编译出的python代码:
#! /usr/bin/env python 2.7 (62211)
#coding=utf-8
from random import randint
from math import floor, sqrt
_ = \'\'
__ = \'_\'
____ = [ ord(___) for ___ in __ ]
_____ = randint(65, max(____)) * 255
for ___ in range(len(__)):
    _ += str(int(floor(float(_____ + ____[___]) / 2 + sqrt(_____ * ____[___])) % 255)) + \' \'

print _
4.代码都是下划线_,看起来容易混淆,将其替换为有意义的变量,最终修改为:
#! /usr/bin/env python 2.7 (62211)
#coding=utf-8
from random import randint
from math import floor, sqrt
passwd = \'\'
flag= \'_\'
ordflag = [ ord(i) for i in flag ]
#ordflag是flag中字符对应的ascii码
randI = randint(65, max(ordflag)) * 255
#randI是区间[65,flag中字符最大ascii码)内产生的随机数*255
for i in range(len(flag)): #循环次数为flag中字符个数
passwd += str(int(floor(float(randI + ordflag[i]) / 2 + sqrt(randI * ordflag[i])) % 255)) + \' \'

print passwd #
串用空格分隔的数字
5.代码分析:

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

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

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

(4)输出结果

那么flag.enc里面的数字就是最后输出的结果,需要反推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的数字逐一比较,并且以字典的方式保存取值,最终就可推出flag的每个字符

6.把另一个文件flag.enc文件用notepad打开:

208 140 149 236 189 77 193 104 202 184 97 236 148 202 244 199 77 122 113

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

from random import randint

from math import floor, sqrt

ANSInum = [i for i in range(33, 127)]

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

for k in range(65 * 255, 127 * 255, 255):

tmpDict = {}

for i in range(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] for i in flagEnc])

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筛选出来。发现了ftp的用户名和密码,尝试登陆,发现不能登录

服务器地址:182.254.217.142

用户名:ftp

密码:codingay

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

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

目录包含了,flag.zip和key.log



6.先过滤"ftp-data",然后ctrl+F 查找【字符串】关键字为flag,其中分组详情只是在info标题里搜索关键词,分组字节流在详细内容中搜索关键字
7.可搜索8022,flag.zip的压缩包中包含了flag.txt
8.通过追踪tcp流导出以原始数据流保存为8022.zip文件
在这里插入图片描述
9.同理,也可以搜索8142,然后通过追踪tcp流导出以原始数据流保存为8142.zip文件
10.怀疑这2个压缩文件是伪加密,这里我们都使用伪解密工具进行解密,其中8142.zip的伪解密出来的明文不是真正的flag

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

12.加密的数据包?那就应该是TLS协议没跑了,又想到key.log这个文件还没有用,然后使用key.log对TLS协议进行解密,下面提取key.log文件

发现里面的是一份 NSS Key Log Format 的文件,而这个文件是能解密出 Wireshark 里面的 https 流量的,也就是key.log

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



14.现在使用key.log对TLS协议进行解密。(操作步骤:编辑→首选项→Protocols→TLS,然后在下面导入key.log文件)

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

16.查看后可以大致分析出,是用百度网盘下了一个文件,把这个文件导出。(文件→导出对象→HTTP)
17.切换到频谱图分析


18.视图--放大查看
19.隐约能看到写着
  Key:AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!
20.回到一开始解不开的 zip 文件,使用 AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa! 作为密码,成功解出来了 flag.txt

21.最终得到flag:
flag{4sun0_y0zora_sh0ka1h@n__#>>_<<#}

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

writeup:

1.点击Download下载了一个压缩包,解压后有两个文件,crypto.zip和jiami.py


2.打开jiami.py文件内容如下:

# -*- coding:utf8 -*-

import pyminizip
from hashlib import md5
import os
          
def create(files, zfile):
    password = os.urandom(15)#随机产生一个15字节的字符串
    password = md5(password).hexdigest()#获取这个字符串的md5值
    pyminizip.compress_multiple(files, zfile, password, 0)#这是一个压缩文件的方法把files参数中文件压缩成zfile指定的文件,压缩密码是password,0可以理解为复杂程度值为1~9,默认是0
    pass
      
if __name__ == \'__main__\':
    files = [\'jiami.py\',\'gogogo.zip\']
    zfile = \'crypto.zip\'#就是把jiami.py和gogogo.zip两个文件压缩成crypto.zip密码是上面随机字符串的md5值
    create(files, zfile)



3.接下来打开crypto.zip提示有密码,也就是上述md5值,这个密码我们是不知道的。因为crypto.zip压缩包中有jiami.py文件,而jiami.py这个文件是已知的,因此我们可以用zip明文进行攻击。

明文攻击需要利用两个压缩包(已知文件的压缩包,和加密的需要破解的压缩包),这两个压缩包压缩方式要相同,直接对jiami.py文件进行压缩是不行的,也要用python 的pyminizip模块进行压缩,脚本如下:

# -*- coding: cp936 -*-
import pyminizip
pyminizip.compress(r"jiami.py","",r"jiami.zip","",0)#没有密码

4.然后进行明文攻击,利用Advanced Archive Password Recovery 4.53 进行利用,这里的crc32相同。


5.爆破成功保存为压缩包UnEncrypted.zip解压后得到gogogo.zip,解压得到AES.encryt、AESencrypt.py和RSA.encrypt三个文件


6.打开AESencrypt.py文件如下:

# -*- coding:utf8 -*-
from Crypto.Cipher import AES

s=open(\'next.zip\',\'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(key.encode(\'hex\'),16)#秘钥key转16进制转整型,作为RSA的明文
c=pow(m,e,n)#c是RSA加密后的密文
c=\'0{:x}\'.format(c).decode(\'hex\')
with open(\'RSA.encrypt\',\'wb\') as f:
    f.write(c)

#RSA.encrypt文件的16进制就是RSA的密文,即就是AES秘钥key加密后的密文,已知
obj=AES.new(key,AES.MODE_ECB)
with open(\'AES.encryt\',\'wb\') as f:
    f.write(obj.encrypt(s))#对next.zip进行AES加密,秘钥为key,AES.encryt文件中的内容即为AES加密后的密文已知。


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

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

首先十六进的n转成10进制为:32945885482421841602167475970472000545315534895409154025267147105384142461297

https://tool.lu/hexconvert/


8.登录网站http://factordb.com/,对n进行因数分解,解出p和q

都转换成十进制,进行计算

p=177334994338425644535647498913444186659
q=185783328357334813222812664416930395483

n=32945885482421841602167475970472000545315534895409154025267147105384142461297

e=65537

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


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

脚本如下:

# -*- coding: cp936 -*-
from Crypto.PublicKey import RSA
from Crypto.Cipher import AES
def egcd(a,b):
    if a==0:
        return (b,0,1)
    else:
        g,y,x=egcd(b%a,a)
        return (g,x-(b//a)*y,y)
def modinv(a,m):
    g,x,y=egcd(a,m)
    if g!=1:
        raise Exception(\'modular inverse does not exist\')
    else:
        return x%m

p=177334994338425644535647498913444186659
q=185783328357334813222812664416930395483
n=32945885482421841602167475970472000545315534895409154025267147105384142461297
e=65537#公钥

d=modinv(e,(p-1)*(q-1))#RSA私钥
c=open("RSA.encrypt","rb").read();
c=long(c.encode(\'hex\'),16)
m=pow(c,d,n)#m是明文,转成字符串就是key="copy__white__key"
key="copy__white__key"
obj=AES.new(key,AES.MODE_ECB)
s=open("AES.encryt","rb").read()
str=obj.decrypt(s)
with open(r\'next.zip\',\'wb\') as f:
    f.write(str)#解密后得到next.zip文件


11.解压next.zip文件得到encrypt.py、first、second三个文件。


12.打开encrypt.py内容:

# -*- coding:utf8 -*-
from base64 import *

s=open(\'flag.jpg\',\'rb\').read()
s=\'-\'.join(map(b16encode,list(s)))

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

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

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

#最终的执行结果是flag.jpg文件的用‘-’分隔字节的十六进制数据

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

#zip(*(s.split(\'-\')))得到两个元组,一个是每个字节的第一个16进制值组成的,一个是每个字节的第二个16进制值组成的

#然后作为一个新列表

with open(\'first\',\'wb\') as f:
    f.write(b16decode(s[0]))#把第一个列表元素转成字符串写入first文件
with open(\'second\',\'wb\') as f:
    f.write(b16decode(s[1]))#把第二个列表元素转成字符串写入second文件

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

# -*- coding: cp936 -*-
from base64 import *
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=""
for i in range(0,len(s1)):
    str+=s1[i]+s2[i];#得到flag.jpg16进制数据
str=str.decode(\'hex\')
with open(r\'flag.jpg\',\'wb\') as f:
    f.write(str)
   


14.得到flag.jpg图片

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

16.16进制头为38 42 50 53(Adobe Photoshop (psd),文件头:38 42 50 53),根据文件头可以知道这是psd(Photoshop Document)文件(原理是用copy命令把jpg文件和psd文件合并在一起) 

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

17.然后再新建一个文件,复制到里面
18.最后另存为flag.psd,并用photoshop打开flag.psd文件,打开后图片上有一行字flag{少年,我看好你!},我以为这是flag,提交好几遍都错误

19.再观察图层发现有一个空白的背景,其实最顶层的文字是假的,这里关键在于锁定的“背景”层,看似是新建图片时所留下的默认背景图,而本题就是把flag隐藏在里面,
把上面2层隐藏掉,然后对背景色另存为gif格式(这样才能完好的保留颜色)

20..使用stegsolve打开,并按下向左的按钮 得到一个二维码
21.通过在线二维码扫描,扫描获得flag
http://cdn.malu.me/qrdecode/
22.最终得到flag:
flag{409d7b1e-3932-11e7-b58c-6807154a58cf}

七十一、wav文件隐写之曼彻斯特编码

writeup:
1.通过Audacity 打开godwave.wav文件,并查看时域波形,如下:

2.发现波形明显别修改过,赋值差异很明显,数出周期为64个点。写个脚本把它提取成01序列: 写的过程中值得注意的是:横轴改成smpl,即采样点,每个单位对应一个实心点;纵轴改成norm,表示幅值。这样在编程时,每个点就是横轴对应waveData[i],纵轴对应norm。
另外,判断每周期的值时,本来采用的是计算平均值。后来简化计算改成全部求和,先看了一下低赋值周期最大值不超过0.035,那么64个点最多也就2.24。在输出文件中写了一行01串。
脚本如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wave
import matplotlib.pyplot as plt
import numpy
import os

path = \'C:\\Users\\backlion\\Desktop\\\'
wav = wave.open(path+\'godwave.wav\',\'rb\')

params = wav.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]

strData = wav.readframes(nframes) #读取音频,字符串格式
waveData = numpy.fromstring(strData, dtype=numpy.int16) #上述字符串转int
waveData = waveData*1.0/(max(abs(waveData))) #wave幅值归一化,与Cool edit的norm纵轴数值一致

#将音频转化为01串
string = \'\'
norm = 0
for i in range(1735680):
norm = norm+abs(waveData[i])
if (i+1) % 64 == 0:
if norm > 10:
string += \'1\'
else:
string += \'0\'
norm = 0

with open(\'01output.txt\',\'w\') as output:
output.writelines(string)

3.在数据传输过程中,我们往往会使用一种自带时钟的编码以减少误码率
搜索“自带时钟的编码”,说是曼彻斯特编码。写脚本把上面得到的01串做曼彻斯特解码,负电平为1,正电平 为0,然后将其0,1转换成图片二维码。
# -*- coding: utf-8 -*-
file_in = open(\'01output.txt\',\'r\')
code = file_in.readline()
file_in.close()
le = len(str(code))
print le
print code

result = \'\'
count = 0
res = 0
while code != \'\':
cp = code[:2]
if cp != \'\':
if cp[0] == \'0\' and cp[1] == \'1\':
res = (res<<1)|0
count +=1
if cp[0] == \'1\' and cp[1] == \'0\':
res = (res<<1)|1
count +=1
if count == 8:
result += chr(res)
count = 0
res = 0
else:
print \'Unexpected cp, exit!\' # found \'00\' or \'11\', stop the script directly
break

code = code[2:]

with open(\'result.png\',\'wb\') as file_out:
file_out.write(result)

4.通过在线二维码识别获得flag:
http://cdn.malu.me/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)

\'0b10101010101010101010101010101011001010101010101010110100110010101010101011010100101101010010110101010100110011001100110011001101010100101010101\'

#30psi

>>>bin(0x5555555595555A65556A9AA6AA6666665665)

\'0b10101010101010101010101010101011001010101010101010110100110010101010101011010101001101010100110101010100110011001100110011001100101011001100101\'

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

45psi:10101010101010101010101010101011001010101010101010110100110010101010101011010100101101010010110101010100110011001100110011001101010100101010101

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

11111111 11111111 01111111 11001011 11111000 11000110 00001010 10101010 00011111  

反转:

11111111 11111111 11111110 11010011 00011111 01100011 01010000 01010101 11111000

将其转换成十六进制

>>>hex(0b111111111111111111111110110100110001111101100011010100000101010111111000)

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

经反转处理后Hex:FFFFFED31F635055F8

30psi:10101010101010101010101010101011001010101010101010110100110010101010101011010101001101010100110101010100110011001100110011001100101011001100101

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

11111111 11111111 01111111 11001011 11111000 01000010 00001010 10101010 11101011

反转:(每8位都进行一次反转)

11111111 11111111 11111110 11010011 00011111 01000010 01010000 01010101 11010111

将其转换成十六进制:

>>>hex(0b111111111111111111111110110100110001111101000010010100000101010111010111)

\'0xfffffed31f425055d7\'

经反转处理后Hex:FFFFFED31F425055D7

4.对比后发现:
FFFF FED31F 63 5055 F8(45psi)
FFFF FED31F 42 5055 D7(30psi)
发现唯一差别:一个是63和42(这个应该是压力值),一个是F8和D7(这个应该是校验位),转成10进制,可以看出:63和42相差33
又因为压力相差15psi,猜测是否每5psi增加11,所以猜测25psi应该是在42和D7的基础上减去11得到37,那么得到
FFFF FEB757 37 5055

然后发现校验值为从ID开始每字节相加的和模256的十六进制值即为校验值
即:
例如:
FFFF FED31F 63 5055 F8
FE+D3+1F+63+50+55=2F8(F8即校验值)
再例如:
FFFF FED31F 42 5055 D7
FE+D3+1F+42+50+55=2D7(D7即校验值)
那么同理:
对于题目中的25psi:
FFFF FEB757 37 5055
FE+B7+57+37+50+55=2E8
校验值应该为E8
即得到flag:
flag{FFFFFEB757375055E8}

5.观察到给定的两组数据只有两个字节有差异,其中前面一个字节代表压力值,后一个字节猜想是校验值,同时注意到二者的差是相同的,于是初步确定校验算法是前面字节的和,但是每次都差 2,于是去掉开头的两个字节 FFFF,得到的校验值低 8 位匹配。通过脚本如下:

def decode(a):
t = bin(a)[2:].rjust(144, \'0\')
counter = 0
res = []
temp = []

for i in range(0, len(t), 2):
if t[i] == \'0\':
temp.append(\'1\')
else:
temp.append(\'0\')
if len(temp) == 8:
temp.reverse()
res.append(int(\'\'.join(temp), 2))
temp = []

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

return fin


def check(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
return sum & 0xff


t = 0xfffffeb75700505500
i = 0x20
while i < 0x43:
m = t + (i << 24)
code = check(m)
m += code
i += 1
print "flag{" + hex(m)[2:-1].upper() + "}"




七十三、流量文件隐写之jsfuck编码

writeup:
1.下载压缩包,对其进行解压发现两个文件,一个流量分析包,一个是.log文件。
2.先对secret.log文件进行分析,通过winhex打开,查看内容时发现一串奇怪的字符52617221,查询过后知道是rar文件头。
RAR Archive (rar), 文件头:52617221
3.复制出字符串,并新建一个txt文本, 并将下面的十六进制字符串复制到里面。
5261 7221 1a07 00ce 9973 8000 0d00 0000
0000 0000 758e ee95 d13d b828 867e c146
2489 2bde 8de9 cba1 a4df 5d31 0bb0 0598
90ac c6f1 c6ac 82c0 e239 41aa 3c43 1a16
0d27 a0d2 fc54 2ca5 75f3 d17b dbc8 f8a9
edba 5515 5f8e f724 1665 6e61 9c1a 63b6
db1a c9fb bcaa e0dc 7414 ee39 ba01 d44e
bd63 25e3 8d50 7e6f 51f7 85fc 372a 3add
2f3c 6741 e7ac 6f64 e479 2439 758e ee95
d13d b828 32d0 48e0 2f32 9f08 e909 5a52
937e 526b
3.通过010 editor编辑中导入十六进制即。
在这里插入图片描述
3.将文件保存为 .rar (压缩文件)即可
4.打开压缩文件,发现需要密码
5.到流量包中寻找密码

6.poster=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数据包 http.request.method =="POST",可以看到upload/example1.php

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

3.得到发送的文件hnt.txt的内容编码为:
&#102;&#49;&#97;&#103;&#123;&#115;&#105;&#49;&#49;&#121;&#98;&#48;&#121;&#101;&#109;&#109;&#109;&#125;

4.同样对/upload/images/1.php进行http流分析

5.可以看到是传了webshell然后进行文件操作,一般是传webshell然后菜刀连接,参数进行base64位加密,先解密参数


6.没发现可利用的,然后对上面传输的编码进行unicode转成ascii

http://tool.chinaz.com/tools/unicode.aspx


7.最终得到flag:

flag{si11yb0yemmm}


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

writeup:

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

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

3.根据提示,我们使用binwalk进行文件提取分析,可是并没有结果。
4.通过winhex打开ticket.png,发现有可疑的字符rar,猜测是包含了rar文件内容
RAR Archive (rar), 文件头:52617221
5.将其复制粘贴到新的文件中,然后修改文件头的数据(这里修改文件头用到数据填充即可修改),最后保存为flag.rar

6.打开压缩包发现有密码,并且flag.pdf和ticket.png,然后将ticket.png压缩成ticket.zip,想进行明文攻击,发现CRC32不一致,那么久只能通过寻找密码来输入解压。
7.难道要去爆破?不,我们再回头看看这张登机牌
undefined

8.除了这个奇怪的二维码,还有一个条形码,以及一些时间信息,在测试了时间后发现不对,决定从条形码下手。截图后同网上正常的条形码进行对比,发现不太对,将其反相后得到可扫描的条形码。深度学习为:PDF417类型,得到条形码反向
8.利用在线扫描工具:https://online-barcode-reader.inliteresearch.com/得到key:
Key1921070120171018
9.得到key后去解压缩flag.rar
10.解压出来文件,打开flag.pdf文件
11.最终得到flag:
flag{Car3_Y0ur_Secret}



附件列表