最近ctf做的比較多柴墩,順便整理一下做個筆記顷扩,大概有加密篇拐邪、隱寫篇慰毅、逆向破解和web方向的幾篇文章隘截,整理出來之后會陸續(xù)發(fā)出來汹胃。
0x01 Base64
Base64: ZXZhbCgkX1BPU1RbcDRuOV96MV96aDNuOV9qMXVfU2gxX0oxM10pNTU2NJC3ODHHYWJIZ3P4ZWY=
Base64編碼要求把3個8位字節(jié)(3*8=24)轉(zhuǎn)化為4個6位的字節(jié)(4*6=24),之后在6位的前面補兩個0着饥,形成8位一個字節(jié)的形式犀农。 如果剩下的字符不足3個字節(jié),則用0填充宰掉,輸出字符使用'='呵哨,因此編碼后輸出的文本末尾可能會出現(xiàn)1或2個'='
Base32: Base32和Base64相比只有一個區(qū)別就是,用32個字符表示256個ASC字符孟害,也就是說5個ASC字符一組可以生成8個Base字符,反之亦然击你。
0x02 希爾密碼
希爾密碼:密文: 22,09,00,12,03,01,10,03,04,08,01,17 (明文:wjamdbkdeibr)
解題思路:使用的矩陣是 1 2 3 4 5 6 7 8 10
0x03 柵欄密碼
柵欄密碼:把要加密的明文分成N個一組谎柄,然后把每組的第1個字連起來,形成一段無規(guī)律的話朝巫。
密文樣例:tn c0afsiwal kes,hwit1r g,npt ttessfu}ua u hmqik e {m, n huiouosarwCniibecesnren.
解密程序:
char s[]= "tn c0afsiwal kes,hwit1r g,npt ttessfu}ua u hmqik e {m, n huiouosarwCniibecesnren.";
char t[86]= "";
int i,j,k;
k=0;
for (i=0;i<17;i++)
{
for(j=0;j<5;j++)
{
t[k++]= ch[j*17+i];
}
}
for(i=0;i<85;i++)
{
printf("%c",t[i]);
}
0x04 凱撒密碼
凱撒密碼:通過把字母移動一定的位數(shù)來實現(xiàn)加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一個固定數(shù)目進行偏移后被替換成密文户辱。
密文樣例:U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJG*bRH7YJH7YSH]*=93dVZ3^S8*$:8"&:9U]RH;g=8Y!U92'=j*$KH]ZSj&[S#!gU#*dK9\.
解題思路:得知是凱撒加密之后糙臼,嘗試進行127次輪轉(zhuǎn)爆破:
lstr="""U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJG*bRH7YJH7YSH]*=93dVZ3^S8*$:8"&:9U]RH;g=8Y!U92'=j*$KH]ZSj&[S#!gU#*dK9\."""
for p in range(127):
str1 = ''
for i in lstr:
temp = chr((ord(i)+p)%127)
if 32
str1 = str1 + temp
feel = 1
else:
feel = 0
break
if feel == 1:
print(str1)
0x05 Unicode
密文樣例:\u5927\u5bb6\u597d\uff0c\u6211\u662f\u0040\u65e0\u6240\u4e0d\u80fd\u7684\u9b42\u5927\u4eba\uff01\u8bdd\u8bf4\u5fae\u535a\u7c89\u4e1d\u8fc7\
在線解密:tool.chinaz.com/Tools/Unicode.aspx
0x06 brainfuck
類型:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.
利用BFVM.exe直接解密
用法 loadtxt 1.txt
在線解密:http://www.splitbrain.org/services/ook
0x07 摩斯密碼
密文樣例:-- --- .-. ... .
0x08 jsfuck
密文中 ()[]{}!+
在線解密:
www.jsfuck.com
0x09 培根密碼
培根所用的密碼是一種本質(zhì)上用二進制數(shù)設(shè)計的。不過必逆,他沒有用通常的0和1來表示揽乱,而是采用a和b。
0x0A 豬圈密碼又稱共濟會密碼
0x0B CRC32
密文樣例:4D1FAE0B
import zlib
def crc32(st):
crc = zlib.crc32(st)
if crc > 0:
return "%x" % (crc)
else:
return "%x" % (~crc ^ 0xffffffff)