CTF盤點系列——腦洞大開的編碼&加解密

前言

玩過CTF的小伙伴會經常遇到類似這樣的問題:dalao這是啥編碼方式???怎么解密???

其實CTF中的腦洞密碼題,通常是費現代加密方式,一般都是各種古典密碼的變形,一般出題者會對密文進行一些處理,但都會留下不少線索,當然也需要參賽者對于各種編碼方式有所了解,這樣更有利于快速入手解密,結合一定的腦洞,拿到Flag就so easy了.

編碼方式匯總

常見編碼

ASCii編碼

Base64/32/16編碼

shellcode編碼

Quoted-printable編碼

XXencode編碼

UUencode編碼

URL編碼

Unicode編碼

Escape/Unescape編碼

HTML實體編碼

Tap Code敲擊碼

Morse Code摩爾斯電碼

各種文本加密

換位加密

Rail-fence Cipher柵欄密碼

Curve Cipher曲路密碼

Columnar Transposition Cipher列位移加密

替換加密

Atbash Cipher埃特巴什碼

Caesar Cipher凱撒密碼

ROT5/13/18/47

Simple Substitution Cipher簡單換位密碼

Hill Cipher希爾密碼

Pigpen Cipher豬圈密碼

Polybius Square Cipher波利比奧斯方陣密碼

夏多密碼(曲折加密)

Playfair Cipher普萊費爾密碼

Vigenere Cipher維吉尼亞密碼

Autokey Cipher自動密鑰密碼

Beaufort Cipher波弗特密碼

Running Key Cipher滾動密鑰密碼

Porta Cipher

Homophonic Substitution Cipher同音替換密碼

Affine Cipher仿射密碼

Baconian Cipher培根密碼

ADFG/VX Cipher ADFG和ADFGVX密碼

Bifid Cipher雙密碼

Trifid Cipher三分密碼

Four-Square Cipher四方密碼

Checkerboard Cipher棋盤密碼

============================

Base64

ZXZhbCgkX1BPU1RbcDRuOV96MV96aDNuOV9qMXVfU2gxX0oxM10p

NTU2NJC3ODHHYWJIZ3P4ZWY=

Base64編碼要求把3個8位字節(jié)轉化為4個6位的字節(jié),之后在6位的前面補兩個0,形成8位一個字節(jié)的形式。 如果剩下的字符不足3個字節(jié),則用0填充,輸出字符使用’=’,因此編碼后輸出的文本末尾可能會出現1或2個’=’

Base32

Base32和Base64相比只有一個區(qū)別就是,用32個字符表示256個ASC字符,也就是說5個ASC字符一組可以生成8個Base字符,反之亦然。

在線編解碼

希爾密碼

密文: 22,09,00,12,03,01,10,03,04,08,01,17
明文:wjamdbkdeibr

解題思路:使用的矩陣是 1 2 3 4 5 6 7 8 10

a b c d e f g h i j k l m n o p q r s t u v w x y z

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

把字母用數字表示,解密時把數字轉換成字母,然后放入腳本,密鑰要分成矩陣。一般是對稱的

原文鏈接

百度百科

腳本已存

柵欄密碼

把要加密的明文分成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]);
}

原文鏈接

在線解密

凱撒密碼

通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一個固定數目進行偏移后被替換成密文。

常規(guī)解密:

from pycipher import Caesar
for i in range(1,27):
str=Caesar(key=i).encipher(‘UIF RVJDLCSPXOGPYKVNQTPWFSUIFMBAZEPH’)
print “mingwen:”+str.lower()+“rn“

密文樣例:U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJGbRH7YJH7YSH]=93dVZ3^S8$:8″&:9U]RH;g=8Y!U92’=j$KH]ZSj&[S#!gU#*dK9.

解題思路:

得知是凱撒加密之后,嘗試進行127次輪轉爆破:

lstr=”””U8Y]:8KdJHTXRI>XU#?!K_ecJH]kJG*bRH7YJH7YSH]*=93dVZ3^S8*$:8″&:9U]RH;g=8Y!U92’=j*$KH]ZSj&[S#!gU#*dK9.”””
forp in range(127):
str1 = ”
for i in lstr:
temp = chr((ord(i)+p)%127)
if 32<ord(temp)<127 :
str1 = str1 + temp
feel = 1
else:
feel = 0
break
if feel == 1:
print(str1)

原文鏈接

Unicode

密文樣例:u5927u5bb6u597duff0cu6211u662fu0040u65e0u6240u4e0du80fdu7684u9b42u5927u4ebauff01u8bddu8bf4u5faeu535au7c89u4e1du8fc7

在線解密

brainfuck

類型:++++++++++[>+++++++>++++++++++>+++>+<<<<-]

++.>+.+++++++..+++.>++.<<+++++++++++++++.

.+++.——.——–.>+.>.

利用BFVM.exe直接解密

用法 loadtxt 1.txt

在線解密

摩斯密碼

密文樣例:– — .-. … .

在線解密

jsfuck

密文中 ()[]{}!+

在線解密

在線解密

如果jsfuck定義的是一個函數并且最后以()結尾,則在火狐console中運行時函數也會運行,就會錯掉什么提示。這時候需要把最后的()換成.toString()

培根密碼

培根所用的密碼是一種本質上用二進制數設計的。不過,他沒有用通常的0和1來表示,而是采用a和b。

百科鏈接

已知將一個flag以一種加密形式為使用密鑰進行加密,使用密鑰WELCOMETOCFF加密后密文為

培根密碼表看其他文件

費娜姆密碼

異或

已知將一個flag以一種加密形式為使用密鑰進行加密,使用密鑰WELCOMETOCFF加密后密文為 00000000000000000000000000000000000

0000000000000000101110000110001000000101000000001 請分析出flag。

密鑰為12位,密文為84位,可能是異或:

7位二進制可能表示字母順序:

W E L C O M E T O C F F

密文

0000000 0000000 0000000 0000000 0000000 0000000 0000000 0010111 0000110 0010000 0010100 0000001

密鑰

0010111 0000101 0001100 0000011 0001111 0001101 0000101 0010100 0001111 0000011 0000110 0000110

Xor

0010111 0000101 0001100 0000011 0001111 0001101 0000101 0000011 0001001 0010011 0010010 0000111

W E L C O M E C I S R G

即:WELCOMECISRG

flag:WELCOMECISRG

豬圈密碼,又稱共濟會密碼

百度百科

CRC32

密文樣例:4D1FAE0B

import zlib

def crc32(st):

crc = zlib.crc32(st)

if crc > 0:

return “%x” % (crc)

else:

return “%x” % (~crc ^ 0xffffffff)

原文鏈接

顏文字加密(aaencode)

這個好萌啊>.<

顏文字js加密:明文alert(“flag”);

密文:?ω??= /`m′)? ~┻━┻ //′?`/ [‘’]; o=(???) ==3; c=(?Θ?) =(???)-(???); (?Д?) =(?Θ?)= (o_o)/ (o_o);(?Д?)={?Θ?: ‘’ ,?ω?? : ((?ω??==3) +’’) [?Θ?] ,???? :(?ω??+ ‘’)[o^^o -(?Θ?)] ,?Д??:((???==3) +’’)[???] }; (?Д?) [?Θ?] =((?ω??==3) +’’) [c language=”_o”][/c];(?Д?) [‘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 language=”^^o”][/c];(?Д?) [?o?]='”‘;(?Д?) [‘’] ( (?Д?) [‘’] (?ε?+(?Д?)[?o?]+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o_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?]) (?Θ?)) (‘_’);

在線解密

Jjencode

密文:$=~[];$={:++$,$$$$:(![]+””)[$],$:++$,$$:(![]+””)[$],$:++$,$$$:({}+””)[$],$$$:($[$]+””)[$],$$:++$,$$$:(!””+””)[$],$:++$,$$:++$,$$:({}+””)[$],$$:++$,$$$:++$,$:++$,$$:++$};$.$=($.$=$+””)[$.$$]+($.$=$.$[$.$])+($.$$=($.$+””)[$.$])+((!$)+””)[$.$$]+($.=$.$[$.$$])+($.$=(!””+””)[$.$])+($.=(!””+””)[$.$])+$.$[$.$$]+$.+$.$+$.$;$.$$=$.$+(!””+””)[$.$$]+$.+$.+$.$+$.$$;$.$=($.)[$.$][$.$];$.$($.$($.$$+”””+$.$$+(![]+””)[$.$]+$.$$$+”\”+$.$+$.$$+$.$+$.+”(\”\”+$.$+$.$+$.+$.$$$+(![]+””)[$.$]+(![]+””)[$.$]+$.$+”,\”+$.$+$.+”\”+$.$+$.$+$.$+$.$$+”\”+$.$+$.$$+$.$$+$.$$+”\”+$.$+$.$+$.$$+$.$$+”\”+$.$+$.$$+$.$+”\”+$.$+$.$$+$.$+”\”+$.$+$.$$+$.+$.+”\”\”+$.$+$._+”)”+”””)())();

解密地址

無字母加密

<?php

@$_++; // $_ = 1

$__=(“#”^”|”); // $__ = _

$__.=(“.”^”~”); // _P

$__.=(“/”^”`”); // _PO

$__.=(“|”^”/”); // _POS

$__.=(“{“^”/”); // _POST

${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);

?>

在線解密

Utf-7編解碼

原文:gdfgdfg

密文:+AGcAZABmAGcAZABmAGc-

無論何種,都是+開頭-結尾

在線解密

云影密碼

如果密碼只有01248組成。。。

原理很簡單,有了1,2,4,8這四個簡單的數字,你可以以加法表示出0-9任何一個數字,例如0=28,7=124,9=18。

這樣,再用1-26來表示A-Z,就可以用作密碼了。

為了不至于混亂,我個人引入了第五個數字0,來用作間隔,以避免翻譯錯誤,所以還可以稱“01248密碼”。

題目:12401011801180212011401804

第一步,分割,即124 1 118 118 212 114 18 4

第二步,基本翻譯,例如124可以表示7,也可以表示16(但不可能是34,因為不會超過26),所以可以放在一邊,翻譯其他沒有異議的,可得:124 a s s w o 18 d

第三步,推測得出明文。可以推測后面的18表示r,前面的為p最合適。

明文:password(密碼).

RC4

key welcometoicqedu

密文UUyFTj8PCzF6geFn6xgBOYSvVTrbpNU4OF9db9wMcPD1yDbaJw==

用腳本解密 腳本已存

曼徹斯特

轉二進制 不是10就是01 即是曼徹斯特 解密看腳本

對于其他一些未知密文,可嘗試到下列幾個網站轉換試試,看看運氣

在線解密

在線解密

在線解密

其他小技巧:

  • 如果密文是十進制,字符范圍為“0-9”,可以猜測是ASCII編碼;

  • 如果密文由“a-z”“A-Z”和“=”構成,特別是末尾有“=”,那么可以判斷為Base64編碼;

  • 如果密文含有“%” ,形式為 “%xx” 和 “%uxxxx”,字符范圍又是十六進制“0-F”,判斷是escape() 函數編碼,用unescape()解碼;

  • 若密文由“[],(),{},+,!”字符組成的編碼通常就通過Jother解密。

判斷出可能的編碼方式,就可以使用程序或工具進行解密。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 0x01 目錄 常見編碼: ASCII編碼 Base64/32/16編碼 shellcode編碼 Quoted-p...
    H0f_9閱讀 13,499評論 2 17
  • CTF中那些腦洞大開的編碼和加密 0x00 前言 正文開始之前先閑扯幾句吧,玩CTF的小伙伴也許會遇到類似這樣的問...
    查無此人asdasd閱讀 6,448評論 0 19
  • 本文主要介紹移動端的加解密算法的分類、其優(yōu)缺點特性及應用,幫助讀者由淺入深地了解和選擇加解密算法。文中會包含算法的...
    蘋果粉閱讀 11,678評論 5 29
  • 概述 之前一直對加密相關的算法知之甚少,只知道類似DES、RSA等加密算法能對數據傳輸進行加密,且各種加密算法各有...
    Henryzhu閱讀 3,218評論 0 14
  • 一、自定義控件 1. 尺寸單位單位 dp:當使用dp時,不同像素密度的手機上能顯示基本相同的長度,一般而言,非文字...
    ezero閱讀 215評論 0 0

友情鏈接更多精彩內容