misc
图片
插入类隐写
1.
base64
3.双图

binwalk

4.压缩包隐写
操作同上

5.
添加ff之后分离


LSB
1.

flag{AppLeU0}
叠加
exif
1.
属性
2.
gif
1.
分帧
png
1.
改宽高png

随波逐流
2.tweakpng

idat最后一块是加上去的,用binwalk分离,结果如下:
1.

转成图片结果如下

其他
1.bftools
E:\software\ctf工具箱\图片隐写\bftools\bftools.exe decode -o find braincopter E:\CTF\培训\图片隐写\图片隐写\6其他图片隐写\Bftools\steg16\flag.jpg

base64
2.F5


3.图层隐写


ffd9后面的文件分离创建成1.tiff,
仅看图层之后

文档类隐写
word
1.
取消隐写即可

2.
先扔随波逐流解除伪加密
然后解压之后把word解压发现图片


1.
扔到软件里去就ok了(不能有中文的路径)
压缩包
1.明文
用winrar压缩外面的文件、接着用软件爆破

音频
wav
1.

2.
莫斯电码
3.高低频
mp3
mp3
1.
一堆文件之后用命令直接合成mp3


ubuntu能直接看到这张图片,小金刚英文是GourdSmallDiamond,然后用指令decode
结果如下

binwalk mp3之后有个zip,解压即可。
磁盘
火眼打开分离出一个mp4


binwalk 
把zip改成docx:

pyc

隐写
03F30D0AB6266A576300000000000000000100000040000000730D0000006400008400005A00006401005328020000006300000000030000000800000043000000734E0000006401006402006403006404006405006406006405006407006708007D00006408007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100712B00577C010047486400005328090000004E6941000000696C000000697000000069680000006961000000694C0000006962000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007307000000746573742E7079520300000001000000730A00000000011E0106010D0114014E280100000052030000002800000000280000000028000000007307000000746573742E707974080000003C6D6F64756C653E010000007300000000
然后16进制转成文件,反编译


流量
1.nctf

提取字符串

直接搜也行
2.

flag{backd00Rmate}
3.文件提取

length倒序看最大的包,然后

知道的tar.gz就直接搜文件头,然后另存

Reverse
1.静态分析
放入ida


1.flag{3fec4b
按X键可以看哪里调用了

输入每个字符的ascii码每个字符减10和/WY+X\(c语言:\表示\)比较,逆向回去:2.9ac5bf

同上,只不过是+10:pB;on@,减回去:3.**f81ed6**


alt+shift支持多行操作
1 | from string import printable |
4.1bec6a

1 | enc = ">i<k?o" |
5.4c6a5e

1 | from string import printable |
e1c42}
2.
H可以转换成16进制
R可以转换成字符

先把str2当中的o换成0,所以点进str2
flag{hell0_w0rld}
3.ezre

输入相同数即可
4.
按U可以转换成非定义模式,按shift+E提取信息
1 | enc = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11, |
for i in range(len_enc-1,0,-1):表示从len_enc-1开始循环到1(不包含0),步长为-1
5.动态调试Windows
先打断点
打断点(第一个断点为了演示用),开始本地调试

F7进入到函数、F8一步一步运行、F9运行至结束或断点

等程序运行好自解密看内存里的信息

6.Linux远程动态调试

打好断点
在dbgrsv界面打开之后输入chmod +x linux server64、用./linux_server64 192.168.50.128开始动态调试
先输入、之后程序就会把s自解密好,看内存即可,跟上面的一样
7.base_re
看代码发现发现base64

动态调试

打完断点看标准编码表的变化:
把这个表格
8.ez_xor

看XOR函数:发现和9异或,异或回去即可


1 | enc = "E`}J]OrQF[V8zV:hzpV}fVF[t" |
8.找啊找

+-32对于ascii码就是大小写转换,加个异或
所以写代码转换回去:
1 | enc = [ 0x50, 0x4A, 0x5A, 0x4D, 0x5F, 0x42, 0x7E, 0x76, 0x76, 0x5D, |
.isupper()函数不加()返回地址、加()返回TF


ISCTF{gooD!!1SO_yOU_F1ND_1t_M@IN!!@}
9.baseplus
base64+xor

1 | enc = 'lvfzBiZiOw7<lhF8dDOfEbmI]i@bdcZfEc^z>aD!' |
解完用base64

10.xor

KeyStream生成密钥流,encrypt加密(对于输入的内容)

其实从这个代码来看,flag就是str也就是密文enc

这里*(_BYTE *)(输入 + i) ^= *(_BYTE *)(a3 - i - 1i64 + a1)
这个写的很丑,转成py代码即:输入[i] ^=密钥[28-i-1](循环28次)倒过来异或
细看encrypt由于异或可逆,意味着加解密的代码相同,所以解题策略有两个方法(一个是拷贝str的内容手动复现,另一个是动态调试、把v5内存里面的内容换成str,第一个代码是一样的,所以这里做第二个)



转到v5的地址,用下列代码把v5的东西换掉

记得把语言换成py的
1 | enc = [ 0x01, 0x09, 0x05, 0x25, 0x26, 0x2D, 0x0B, 0x1D, 0x24, 0x7A, |

修改完之后再运行加密

于是乎解密完成
BaseCTF{X0R_I5_345Y_F0r_y0U}