2020.11.15发表,2020.12.27最后一次更新
[toc]
图片
常见操作
藏文件,binwalk、foremost分离
备注、文件尾后藏文件
stegsolve查看各通道隐写
crc爆破修改宽高
SilentEye隐写信息
jpg
文件头 FF D8 FF ,文件尾 FF D9
宽高:FFC0后三个字节开始,两个字节为高,两个字节为宽
高为01 E2,宽为01 99
F5隐写(可能需要密钥)
java Extract flag.jpg -p password
outguess隐写(可能需要密钥)
outguess –k “123456” –r out.jpg –t flag.txt
steghide隐写(可能需要密钥)
jphide隐写(需要密钥)
SilentEye隐写信息
png
文件头 89 50 4E 47 0D 0A 1A 0A ,文件尾 AE 42 60 82
宽高:在49 48 44 52 IHDR数据块之后,四个字节为宽,四个字节为高
宽为07 80 , 高为04 38
由于png文件前十六个字节是固定的,所以宽高所在位置也是固定的,也可以以此判断png头文件是否被修改过
LSB隐写(zsteg,stegsolve,lsb.py脚本,最低位像素隐写等等)
盲水印隐写(python2、python3普通盲水印,频域盲水印)
stegsolve查看每个通道有无二维码、特殊字符等图片
zsteg查看信息
bmp
头文件 42 4D
宽高:bmp的宽高也储存在17-24字节当中,前四个字节为宽,后四个字节为高,但是取值有一点特殊
宽为 07 80 ,高为 04 38
数据块里一般会有很多重复字段
stegsolve查看每个通道有无二维码、特殊字符等图片
zsteg查看信息
SilentEye隐写信息
wbstego隐写,利用工具wbstego43open来解。例题:祥云杯 到点了
bpg
头文件:42 50 47 FB
一种特殊的文件格式,可用Honeyview查看
例题: BUUCTF Business Planning Group
webp
webp隐写,一般利用stegpy工具解密
stegpy xx.webp -p
如果没有密码直接回车即可
gif
文件头:
47 49 46 38
按帧合并图片。比如一个gif每一帧都是一个二维码的一列,分离后合并图片即可。
时间间隔隐写,可以用identify得到每一帧的时间间隔:
identify -format '%s %T \n' encode.gif
gif画图,一个点一直移动画出一张图,参考GACTF v for Vendetta。
音频
常见操作
音频藏Morse码,拨号音等
Audacity涂抹频谱图,调整最高频率
LSB隐写SilentEye
steghide隐写(一般需要密钥)
m4a
m4a的头文件:00 00 00 20 66 74 79 70 4D 34 41 20 00 00 00 00
音频藏Morse码,拨号音等
mp3
头文件:49 44 33 03
可能在频谱图里涂抹了信息,利用Audacity查看频谱图
音频藏Morse码,拨号音等
private_bit
wav
可能是LSB隐写,用SilentEye可解
可能在频谱图里涂抹了信息,利用Audacity查看频谱图
音频藏慢扫描电视SSTV
deepsound隐写
也有可能是利用音轨的数据进行隐写
在音轨里修改一部分的数据,人耳很多时候是听不出来的。不过可以利用python的wavfile进行读取数据。
例题:GACTF Music
链接:https://pan.baidu.com/s/1kf1QbK_HfN2lHKR00eokyA
提取码:o5zv
这道题有几个hint,当时的介绍是这样的:
来听段音乐 let’s enjoy the music
hint1:注意观察音轨(Pay attention to the audio track)
hint2:不用audicity和隐写的一些软件来尝试解题 (it is not possible to solve this challenge with audicity or some stego softwares)
hint3:波形不是波形
先利用python的wavfile进行读取
这样查找的话,由于中间的音轨数据是利用数组保存的,且太多了,就会只输出头和尾。我们可以一个一个输出,脚本如下:
from scipy.io import wavfile
import numpy as np
sample_rate, sig = wavfile.read('1.wav')
print("采样率: %d" % sample_rate)
print(sig)
if sig.dtype == np.int16:
print("PCM16位整形")
if sig.dtype == np.float32:
print("PCM32位浮点")
fp = open("1.txt","w")
for i in sig:
fp.write(str(i))
fp.write('\n')
fp.close()
结果如下,我就复制了其中一小部分,因为实在太多了。本来是一行一个数据,我这换成空格,屏幕占得小一点:
[0 0] [1 0] [1 0] [0 1] [ 0 -2] [1 2] [ 1 -2] [1 2] [0 0] [ 1 -3] [1 5] [ 0 -5] [0 4] [ 0 -3] [0 1] [1 1] [ 0 -1] [1 1] [ 1 -2] [0 2] [ 0 -2] [0 3] [ 1 -3] [1 2] [ 0 -2] [1 2] [ 1 -1] [1 0] [0 1] [ 1 -1] [0 0] [0 1] [ 0 -2] [1 2] [1 0] [ 0 -1] [0 0] [1 0] [1 1] [ 0 -1] [0 1] [ 1 -2] [1 2] [ 1 -1] [1 1] [ 0 -2] [1 2] [ 1 -2] [0 3] [ 0 -3] [1 3] [ 1 -4] [0 4] [ 1 -3] [1 3] [ 0 -3] [0 3] [ 1 -3] [1 3] [ 0 -3] [0 2] [ 1 -1] [0 1] [ 1 -1] [0 1] [ 0 -1] [1 1] [ 1 -1] [0 0] [1 1] [ 1 -1] [0 1] [ 0 -1] [1 0] [1 1] [ 0 -2] [0 3] [ 0 -3] [0 2] [1 0] [ 0 -2] [0 2] [1 0] [ 1 -1] [0 2] [ 1 -3] [1 3] [ 1 -3] [0 3] [ 0 -2] [1 1] [ 1 -1] [0 2] [ 1 -4] [0 5] [ 1 -4] [0 3] [ 0 -1] [ 1 -2] [1 3] [ 1 -2] [0 1] [0 0] [ 0 -1] [0 2] [ 0 -2] [1 1] [ 1 -1] [1 0] [0 2] [ 0 -2] [0 1] [0 0] [ 1 -1] [1 1] [0 0] [ 0 -1] [0 2] [ 1 -2] [0 2] [ 0 -3] [0 3] [ 1 -2] [1 1] [0 0] [ 0 -1] [0 1] [1 0] [0 0] [1 0] [ 1 -1] [0 2] [ 0 -2] [0 2] [ 1 -2] [0 2] [ 0 -2] [0 2] [ 1 -2] [1 2] [ 0 -2] [0 2] [ 1 -2] [0 2] [ 0 -2] [0 2] [ 1 -2] [1 2] [ 0 -1] [1 0] [0 0] [1 0] [0 0] [1 1] [ 1 -1] [0 1] [ 0 -2] [1 1] [0 1] [ 1 -2] [0 3] [ 0 -3] [1 1] [1 0] [0 0] [0 0] [1 1] [ 1 -2] [0 2] [ 1 -2] [1 2] [ 0 -1] [0 0] [0 1] [ 0 -3] [1 4] [ 0 -3] [0 2] [ 1 -1] [1 0] [0 0] [1 0] [0 1] [ 0 -3] [0 5] [ 1 -5] [1 3] [ 0 -1] [0 0] [0 1] [ 1 -1] [0 0] [0 1] [ 1 -2] [1 3] [ 0 -3] [0 3] [ 0 -3] [1 3] [ 0 -4] [0 4] [ 0 -4] [1 4] [ 1 -3] [0 2] [ 0 -1] [ 0 -1] [1 2] [ 0 -2] [0 3] [ 1 -4] [1 4] [ 1 -3] [0 1] [0 1] [ 0 -1] [0 0] [0 1] [ 1 -2] [1 3] [ 1 -3] [0 3] [ 0 -3] [0 2] [ 0 -1] [1 1] [ 1 -1] [0 1] [ 0 -1] [0 1] [ 0 -1] [1 0] [0 1] [ 1 -1] [1 2] [ 0 -3] [0 3] [ 1 -4] [1 5] [ 0 -4] [0 3] [ 0 -2] [1 0] [1 2] [ 1 -2] [0 2] [ 0 -3] [1 3] [ 0 -2] [0 2] [ 1 -2] [1 2] [ 1 -3] [0 3] [ 0 -2] [1 2] [ 0 -2] [0 1] [ 1 -1] [1 1] [0 0] [0 0] [1 0] [ 0 -1] [0 2] [ 0 -3] [1 4] [ 1 -3] [0 1] [1 1] [ 0 -2] [1 3] [ 0 -4] [1 4] [ 1 -4] [0 5] [ 0 -6] [0 5] [ 1 -3] [0 1] [0 1] [ 0 -2] [1 1] [1 0] [0 0] [0 0] [1 1] [ 1 -2] [0 2] [ 0 -1] [1 0] [1 0] [0 0] [1 1] [ 0 -1] [0 0] [0 0] [1 0] [1 1] [ 0 -1] [0 1] [ 0 -2] [1 2] [ 0 -2] [0 3] [ 1 -3] [1 2] [ 1 -1] [1 0] [1 1] [ 0 -1] [1 0] [2 1] [-2 -1] [1 1] [-1 0] [ 1 -2] [-1 3] [ 1 -3] [-1 3] [ 1 -2] [-1 0] [0 2] [ 0 -3] [1 3] [-1 -2] [0 1] [0 0] [0 0] [ 0 -1] [1 2] [-2 -2] [2 2] [-1 -2] [-1 2] [ 2 -2] [-2 2] [ 2 -2] [-1 1] [0 0] [0 0] [0 0] [0 0] [ 0 -1] [0 1] [0 0] [1 0] [-2 0] [ 2 -1] [-2 1] [ 2 -1] [-1 1] [-1 -1] [2 2] [-2 -3] [2 3] [-1 -2] [0 0] [0 2] [ 1 -2] [-2 1] [2 0] [-1 0] [ 0 -1] [2 2] [-4 -2] [4 2] [-3 -2] [2 1] [-1 0] [0 0] [0 0] [ 1 -1] [-1 2] [ 0 -2] [0 1] [0 0] [ 1 -1] [-2 2] [ 2 -1] [-2 0] [ 2 -1] [-1 3] [-1 -5] [2 7] [-1 -8] [0 6] [ 0 -4] [1 3] [-2 -2] [3 1] [-3 0] [ 2 -1] [0 1] [-2 -1] [3 1] [-3 0] [2 0] [0 0] [-2 -1] [3 2] [-3 -2] [2 1] [-1 0] [0 0] [1 1] [-1 -1] [0 0] [0 0] [0 1] [ 0 -1] [1 0] [-2 0] [2 0] [-2 1] [ 1 -1] [0 0] [-1 0] [2 1] [-3 -2] [3 2] [-2 -1] [0 1] [ 1 -1] [0 1] [-1 -2] [1 3] [ 0 -2] [-1 1] [ 3 -1] [-5 0] [5 2] [-3 -2] [2 1] [-1 0] [ 0 -1] [0 1] [0 0] [ 1 -1] [-2 2] [ 2 -2] [-1 1] [0 0] [ 1 -2] [-2 4] [ 2 -4] [-2 3] [ 2 -1] [-1 -2] [0 3] [ 1 -2] [-2 1] [2 0] [-2 0] [ 2 -1] [-1 1] [0 0] [ 1 -1] [-2 2] [ 1 -2] [0 1] [0 0] [1 0] [-1 -1] [0 1] [0 0] [0 0] [0 0] [ 2 -1] [-3 1] [ 3 -1] [-3 1] [1 0] [ 1 -1] [-1 2] [ 1 -3] [-1 3] [ 0 -2] [0 0] [0 2] [ 0 -3] [1 3] [-2 -2] [2 0] [-1 2] [-1 -4] [3 5] [-4 -4] [4 3] [-3 -2] [2 1] [-1 -1] [0 1] [0 0] [0 0] [ 0 -1] [0 1] [ 0 -1] [0 1] [ 0 -1] [-1 1] [ 2 -1] [-2 1] [ 2 -1] [-2 0] [1 1] [-1 -1] [1 1] [-1 -1] [2 1] [-2 -1] [1 1] [-1 0] [ 1 -1] [0 1] [ 0 -1] [0 2] [ 0 -3] [0 3] [ 1 -3] [-1 2] [0 0] [ 0 -2] [0 3] [ 1 -3] [0 2] [-1 -1] [0 1] [0 0] [ 2 -1] [-3 1] [3 0] [-2 -1] [1 2] [-1 -2] [1 1] [-1 0] [ 1 -1] [0 1] [ 0 -1] [-1 1] [ 1 -1] [-1 1] [ 1 -1] [0 1] [ 0 -1] [0 1] [-1 -1] [1 1] [ 0 -1] [-1 1] [3 0] [-4 -2] [3 3] [-2 -4]
可以看出在开头的一些数据里,每个音轨数据里的第一个数字都是0或1。而后面就是-1 -2 -3 -4 0 1 2 3 4等等都有了。一般音轨数据里不会这么长时间的出现全是0或1的数据,所以肯定是有问题的。利用python脚本把前一段的0 1提取出来:
011001110110000101100011011101000110011001111011001101100110010100110110011000010011011100110101001110000011100001100010001100010110001000110010001101010110010100110011011000010011010001100010011000100011000100111000001110000110000101100110001110010011100100110010001101010110001000110011001101000110001001111101
转化成字符即可获得flag:gactf{6e6a7588b1b25e3a4bb188af9925b34b}
这题当时全场只有四解,主要就是以前都没遇到过关于修改音轨数据的题。虽然以后出的次数可能不会太多,但至少是wav音频文件的一种解题方法。
流量包
常见操作
查找flag字段,十六进制查找66 6c 61 67
导出http流
追踪tcp流查看有无特殊字符或者文件
foremost binwalk 查看是否可以分离出文件
RSA、TLS
USB流量包
USB流量两大类是鼠标流量和键盘流量。比较小众的还有xbox、switch、数位板流量等等
可以使用tshark命令获取usb信息:
tshark -r key.pcap -T fields -e usb.capdata>out.txt
tshark -r key.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > out.txt //去掉空行
这里在顺便记录一下坐标画图工具,gnuplot
画图命令:
gnuplot #进入gnuplot控制台
plot "xy.txt" #画图,默认紫色
键盘流量多为8字节,鼠标多为4字节,当然也有特殊情况,具体问题具体分析
键盘流量的按键信息保存在第三个字节当中,用十六进制显示。
鼠标流量一般为四个字节,第一字节代表按键,取0x00
时代表没有按键,取0x01
时代表按左键,取0x02
时代表按右键。第二个字节代表左右平移像素距离,正时向右,负时向左。第三个字节代表垂直平移像素距离,正时为上,负时为下。
键盘流量分析脚本:
mappings = { 0x04:"A", 0x05:"B", 0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G", 0x0B:"H", 0x0C:"I", 0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O", 0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5", 0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]", 0X2B:" ", 0x2C:" ", 0x2D:"-", 0x2E:"=", 0x2F:"[", 0x30:"]", 0x31:"\\", 0x32:"~", 0x33:";", 0x34:"'", 0x36:",", 0x37:"." }
nums = []
keys = open('usbdata.txt')
for line in keys:
if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
continue
nums.append(int(line[6:8],16))
keys.close()
output = ""
for n in nums:
if n == 0 :
continue
if n in mappings:
output += mappings[n]
print 'output :\n' + output
鼠标流量分析脚本:
nums = []
keys = open('2.txt','r')
result=open('result.txt','w')
posx = 0
posy = 0
for line in keys:
if len(line) != 18 :#忽略空行
continue
x = int(line[6:8],16)
y = int(line[9:11],16)
if x > 127 :
x -= 256
if y >127 :
y -=256
posx += x
posy += y
btn_flag = int(line[3:5],16) # 1 for left , 2 for right , 0 for nothing
if btn_flag == 1 :
result.write(str(posx)+' '+str(posy)+'\n')
keys.close()
result.close()
压缩包
常见操作
暴力破解,掩码爆破,明文攻击
office和压缩包的各种联动
压缩包套娃,利用脚本解题
zip伪加密(binwalk、360压缩包有时候可以直接绕过伪加密)
rar伪加密几乎不会出现,一般rar文件都是misc套娃中需要密码时使用,但是rar伪加密也存在,PASSWORD_ENCRYPTED是加密位,如果没有密码,且将这里改成1,即可构成伪加密。但是此时也会报错文件头损坏。
crc32爆破
当压缩包里有一些加密文件特别小时,就可用crc爆破来解。
crc32爆破脚本:https://github.com/theonlypwner/crc32
例题:攻防世界 crc
下载文件得到一个加密的压缩包,里面有三个6B的txt文件和一个convert文件。利用crc32爆破来爆破密码:
C:\Users\34603\Desktop\crc32-master>python crc32.py reverse 0xccca7e74
4 bytes: {0x3f, 0x09, 0x32, 0xe4}
verification checksum: 0xccca7e74 (OK)
alternative: 1Atmmb (OK)
alternative: 6XsSGI (OK)
alternative: EXFyUM (OK)
alternative: KWYIiC (OK)
alternative: Qm0jH5 (OK)
alternative: Spkdxd (OK)
alternative: TilZRO (OK)
alternative: Uub7HB (OK)
alternative: ZfsjnA (OK)
alternative: cN3O_z (OK)
alternative: com_66 (OK)
alternative: dW4quQ (OK)
alternative: kXjpRF (OK)
alternative: lAmNxm (OK)
alternative: n0EmLx (OK)
alternative: r24Q5p (OK)
alternative: rcV0Yl (OK)
alternative: tf_ciJ (OK)
C:\Users\34603\Desktop\crc32-master>python crc32.py reverse 0xcc86365b
4 bytes: {0x65, 0xd7, 0x1e, 0xf0}
verification checksum: 0xcc86365b (OK)
alternative: 05J728 (OK)
alternative: 0EvF7h (OK)
alternative: 2ysXnu (OK)
alternative: 3y2iul (OK)
alternative: R9DrOf (OK)
alternative: WQkoQX (OK)
alternative: avuKGt (OK)
alternative: dO875V (OK)
alternative: dSwk4B (OK)
alternative: forum_ (OK)
alternative: go3DvF (OK)
alternative: ldpDP2 (OK)
alternative: r6wKtc (OK)
alternative: s66zoz (OK)
alternative: yQGfVS (OK)
C:\Users\34603\Desktop\crc32-master>python crc32.py reverse 0xbcee7ed5
4 bytes: {0x1c, 0xeb, 0xe5, 0x41}
verification checksum: 0xbcee7ed5 (OK)
alternative: 2VSYDo (OK)
alternative: 5OTgnD (OK)
alternative: 7sQy7Y (OK)
alternative: 91ctf_ (OK)
alternative: AVfsVk (OK)
alternative: N5K_u8 (OK)
alternative: OYyCje (OK)
alternative: PgLPQi (OK)
alternative: aYUJmn (OK)
alternative: c425Xo (OK)
alternative: cePT4s (OK)
alternative: d1zWsP (OK)
alternative: pt05kx (OK)
alternative: rTzw3q (OK)
解得压缩包密码:forum_91ctf_com_66
之后打开convert.txt,将里面的01字符串转成asc码值,然后base64转图片扫码即可获得flag
其他
JJencode/JJdecode
跟颜文字类似,都是JS代码的一种加密方式。
密码一般多为'$'、'='、'_' 、' " ' 、')'等组成,也可以自定义全局变量名
可以直接在谷歌浏览器的控制台里解码,不过JJencode会有一个固定格式,也就是function的加密格式。解码payload:
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+PADLOAD+"\"")())();
例题:2020上海市大学生网络安全大赛MISC 可乐加冰
这题当时全场只有两解,按照解题人数来看的话可以说是全场第二难的题目了,不过应该都不是卡在JJdecode上,而是数据包上(至少我是卡在Zlib数据包上的)
链接:https://pan.baidu.com/s/1nBmRu3hNA_cEwt8vFfv6fA
提取码:zkb1
下载下来得到一张png图片,binwalk分离后可得到两个Zlib数据包。以前一直都不觉得分离出Zlib数据包有用,问了下当时这题的一血师傅 qwzf,发现就是利用Zlib数据包内容来解题的。
用winhex或者010Editor打开,能发现其中一个数据包的十六进制比较特殊:
其中的十六进制数没有出现字母,如果直接当做十进制来解码的话,可以解得一些东西
这个如果有经验的话,很容易想到是JJencode了,全局变量为S。接下来直接利用JJdecode解码即可得到flag。有两种办法,一种是把整个字符串的全局变量全改为S进行解码,或者把加密字符串里的S改成$进行解码。
个人建议遇到这种题全都改成$进行解码,因为有payload会快点,而S这个全局变量字符每次都是会变的,下次就不一定是S了。当然其实熟悉了都是秒解。
以下两种方式均可:
解码成功后即可看到flag:
颜文字
内容类似如下,解码方式与JJdecode相同,均可直接在浏览器控制台解码:
゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚Д゚) ['c']+ (゚Д゚) ['c']+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ ((゚ー゚) + (゚Θ゚))+ (o^_^o)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (゚ー゚)+ (゚Д゚) .゚Д゚ノ+ (c^_^o)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚) [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+ (゚Д゚) .゚Θ゚ノ+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ (゚ー゚)+ (゚Д゚) .゚Д゚ノ+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
其他内容里以后会写曾经没有遇到过的类型,如果是比较熟悉的就先暂时不写了,等有空的时候再统一写一些。具体可参考BUUCTF misc基础部分和进阶部分。
BUUCTF misc基础部分BUUCTF misc进阶部分