CTF中常見的編碼,代碼混淆及加、解密

其實剛開始我對編碼與加密的概念區分的不是很是清楚,一度覺得加密就是對信息進行編碼,這是一種錯誤的觀點。編碼是將數據信息轉化成一種固定格式的編碼信息,而加密是爲了保證信息傳輸的安全性,二者仍是有區別的。接下來就給你們講講編碼與加密、解密。
一,編碼
編碼是爲了方便不一樣系統間的信息傳輸,將數據轉化成固定格式的信息,經過編碼能夠獲得原始信息。常見的編碼咱們都已經很熟悉了,好比ASCII編碼、URL編碼、HTML實體編碼以及Base編碼等。
1,ASCII編碼
ASCII編碼大體能夠分做三部分組成:
第一部分是:ASCII非打印控制字符(參詳ASCII碼錶中0-31);
第二部分是:ASCII打印字符,也就是CTF中經常使用到的轉換;
第三部分是:擴展ASCII打印字符(詳見 ASCII碼錶 二)。
例:easy—101 97 115 121php

(ASCII表——來自百度百科)html

(ASCII碼錶 二)
2,URL編碼
又叫百分號編碼,是統一資源定位編碼方式。URL 地址(常說網址) 規定了經常使用地數字,字母能夠直接使用,另一批做爲特殊用戶字符也能夠直接用(/,:@等),剩下的其它全部字符必須經過%xx 編碼處理。編碼方法很簡單,在該字節 ascii 碼的的 16 進制字符前面加%. 如空格字符,ascii 碼是 32,對應16 進制是’20′,那麼 urlencode 編碼結果是:%20。
例:https://baike.baidu.com/item/ABC
URL轉碼: %68%74%74%70%73%3A%2F%2F%62%61%69%6B%65%2E%62%61%69%64%75%2E%63%6F%6D%2F%69%74%65%6D%2F%41%42%43
3,HTML實體編碼
一些字符在 HTML 中是預留的,擁有特殊的含義,好比小於號‘<’用於定義 HTML 標籤的開始。若是咱們但願瀏覽器正確地顯示這些字符,咱們必須在 HTML 源碼中插入字符實體。用一個編號寫入HTML代碼中來代替一個字符,在使用瀏覽器訪問網頁時會將這個編號解析還原爲字符以供閱讀。算法

(來自http://www.w3school.com.cn/ht...
例:easy——easy
4,Base編碼
Base家族主要有Base1六、Base3二、Base64。Base64由大小寫字母和數字,+/組成(=號用做填充字符),Base32則是隻有大寫字母和234567。其中Base64/32是網絡上最多見的用於傳輸8Bit字節代碼的編碼方式之一。Base64編碼是從二進制到字符的過程,可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的惟一標識符(通常爲128-bit的UUID)編碼爲一個字符串,用做HTTP表單和HTTP GET URL中的參數。Base64編碼保證了二進制數據的安全。編程

例:Base64:easy—ZWFzeQ==
(Base64的代碼實現:https://baike.baidu.com/item/...
五、Unicode編碼
Unicode編碼有如下四種編碼方式:
源文本:The
[Hex]:The
[Decimal]:The
U [Hex]:U0054U0068U0065
U+ [Hex]:U+0054U+0068U+0065
六、莫爾斯電碼(Morse Code)
摩爾斯電碼(又譯爲摩斯密碼,Morse code)是一種時通時斷的信號代碼,經過不一樣的排列順序來表達不一樣的英文字母、數字和標點符號。是早期的數字化通訊形式,可是它不一樣於現代只使用零和一兩種狀態的二進制代碼,它的代碼包括五種:點、劃、點和劃之間的停頓、每一個字符之間短的停頓、每一個詞之間中等的停頓以及句子之間長的停頓。
除此以外,經常使用的編碼方式還有敲擊碼(Tap code)等。編碼在電子計算機、電視、遙控和通信等方面普遍使用。編碼是信息從一種形式或格式轉換爲另外一種形式的過程;解碼,是編碼的逆過程。
2、常見的代碼混淆
代碼混淆(Obfuscated code)亦稱花指令,是將計算機程序的代碼,轉換成一種功能上等價,可是難於閱讀和理解的形式的行爲。代碼混淆能夠用於程序源代碼,也能夠用於程序編譯而成的中間代碼。執行代碼混淆的程序被稱做代碼混淆器。目前已經存在許多種功能各異的代碼混淆器。經常使用的代碼混淆有jsfuck、brainfuck,Vbscript.encode加密等
一、Jsfuck
jsfuck源於一門編程語言brainfuck,其主要的思想就是隻使用8種特定的符號來編寫代碼。而jsfuck也是沿用了這個思想,它可讓你只用 6 個字符[ ]( ) ! + 來編寫 JavaScript 程序。此外,JSFuck可用於繞過惡意代碼檢測,且能夠被用於跨站腳本攻擊。由於缺少原生JavaScript應有的特徵,相似JSFuck的JavaScript混淆技術可幫助惡意代碼繞過入侵防護系統或內容過濾器。現實中,由於JSFuck中缺乏字母數字字符,且eBay中的內容過濾器曾存在缺陷,使得賣家曾經能夠在他們的eBay拍賣頁面中嵌入任意JSFuck腳本
例:http://utf-8.jp/public/jsfuck...
二、Brainfuck
Brainfuck是一種極小化的計算機語言,目標是創建一種簡單的、能夠用最小的編譯器來實現的、符合圖靈徹底思想的編程語言。BrainFuck 語言只有八種符號,全部的操做都由這八種符號( > < + – . , [ ] )的組合來完成。
例:hello world
+++++ +++++ [->++ +++++ +++<] >++++ .—. +++++ ++..+ ++.
<+ +++++ ++[->----- ---<] >—- —– —– -.<++ +++++ ++[-> ++
+++ ++++< ]>+++ +++.—— –.++ +.— —.- —– –.<
在線解密工具: https://www.splitbrain.org/se...
三、Vbscript.encode加密
VBScript.encode是針對asp代碼進行的一種加密混淆操做。
樣題: http://ctf5.shiyanbar.com:8080/aspencode/
在線工具:http://adophper.com/encode.html
四、Jjencode
jjencode 將 JS 代碼轉換成只有符號的字符串,相似於 rrencode,介紹的,aaencode 能夠將 JS 代碼轉換成經常使用的網絡表情,也就是咱們說的顏文字 js 加密。
例: http://utf-8.jp/public/aaenco...
3、加密
密碼學是研究編制密碼和破譯密碼的技術科學。研究密碼變化的客觀規律,應用於編制密碼以保守通訊祕密的,稱爲編碼學;應用於破譯密碼以獲取通訊情報的,稱爲破譯學,總稱密碼學。主要分爲古典加密算法和現代密碼學。
1,古典加密算法
古典密碼算法曾經被普遍應用,大都比較簡單,使用手工和機械操做來實現加密和解密。它的主要對象是文字信息,利用密碼算法實現文字信息的加密和解密。古典密碼編碼方法歸根結底主要有兩種,即置換和代換。比較經典的有凱撒密碼、柵欄密碼、培根密碼、仿射密碼和維吉尼亞密碼等。
(1)凱撒密碼
是一種最簡單且最廣爲人知的加密技術。它是一種替換加密的技術,明文中的全部字母按照按順序進行 n 個字符錯位轉換後被替換成密文。
例:ABCDE(偏移量爲3)—DEFGH
(2)柵欄密碼
把要加密的明文分紅N個一組,而後把每組的第1個字連起來,造成一段無規律的話即爲柵欄密碼。
例:明 文:The quick brown fox jumps over the lazy dog
去空格:Thequickbrownfoxjumpsoverthelazydog
分 組:Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g
密 文:Teucbonojmsvrhlzdghqikrwfxupoeteayo
(3)培根密碼
又名倍康尼密碼(英語:Bacon’s cipher)是由法蘭西斯·培根發明的一種隱寫術。是一種替換密碼,每一個明文字母被一個由5字符組成的序列替換。最初的加密方式就是由‘A’和’B'組成序列替換明文瀏覽器

例:明文:THE DOG
密文:baabb aabbb aabaa aaabb abbba aabba
(4)仿射密碼
仿射密碼(Affine Cipher)是一種單表代換密碼,字母表中的每一個字母相應的值使用一個簡單的數學函數映射到對應的數值,再把對應數值轉換成字母。每個字母都是經過函數(ax + b)mod m加密,其中B是位移量,爲了保證仿射密碼的可逆性,a和m須要知足gcd(a , m)=1,通常m爲設置爲26。安全

(5)維吉尼亞密碼
維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬於多表密碼的一種簡單形式。以其簡單易用而著稱,同時初學者一般難以破解,於是又被稱爲「不可破譯的密碼」。這也讓不少人使用維吉尼亞密碼來加密的目的就是爲了將其破解。網絡

例:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密鑰(循環使用,密鑰越長相對破解難度越大):CULTURE
加密過程:若是第一行爲明文字母,第一列爲密鑰字母,那麼明文字母’T'列和密鑰字母’C'行的交點就是密文字母’V',以此類推。
密文:VBP JOZGM VCHQE JQR UNGGW QPPK NYI NUKR XFK
解密網站:https://www.qqxiuzi.cn/bianma...
2,現代密碼學
現代密碼學研究信息從發端到收端的安全傳輸和安全存儲,核心是密碼編碼學和密碼分析學。1949年香農發表《保密系統的通訊理論》標誌着現代密碼學的真正開始(第一次質的飛躍)。1976年,Diffie和Hellman發表《密碼學的新方向》,標誌着公鑰密碼體制的誕生(第二次質的飛躍)。
現代密碼學根據功能分爲三類:
①、對稱加密算法:DES,AES,RC4等。
②、公鑰密碼算法:RSA等
③、HASH函數:md5,sha1
(1),對稱加密算法
在對稱加密算法中,數據發信方將原始數據和加密密鑰一塊兒通過特殊加密算法處理後,使其變成複雜的加密密文發送出去,收信方須要使用加密用過的密鑰及相同算法的逆算法對密文進行解密,才能使其恢復成可讀明文。在大多數的對稱算法中,加密密鑰和解密密鑰是相同的,因此也稱這種加密算法爲祕密密鑰算法或單密鑰算法。它要求發送方和接收方在安全通訊以前,商定一個密鑰。對稱算法的安全性依賴於密鑰,泄漏密鑰就意味着任何人均可以對他們發送或接收的消息解密,因此密鑰的保密性對通訊的安全性相當重要。特色是算法公開、計算量小、加密速度快、加密效率高。
對稱加密的分類:流加密與分組加密數據結構

  • 流加密每次加密數據流的一位(bit)或者一個字節(byte)。如RC4。
  • 分組加密(一般也成爲塊加密)是將明文進行分組,加密算法對每一個分組分別加密,一般明文分組和加密後獲得的密文分組等長。典型的分組大小是64bit或128bit。如DES,3DES,AES。

(2),HASH算法
可直接音譯爲「哈希」,通常翻譯爲「散列」把任意長度的輸入(又叫作預映射, pre-image),經過散列算法變換成固定長度的輸出,該輸出就是散列值。它是基於快速存取的角度設計的,也是一種典型的「空間換時間」的作法。顧名思義,該數據結構能夠理解爲一個線性表,可是其中的元素不是緊密排列的,而是可能存在空隙。
常見HASH算法主要有MD五、SHA-1等。主要用於文件校驗,數字簽名,鑑權協議。另外這裏還有一篇利用Hash碰撞而產生DOS攻擊的案例,有興趣的能夠閱讀一下:http://www.cnblogs.com/rush/a...
(其實把hash算法當成是一種加密算法,這是不許確的,咱們知道加密老是相對於解密而言的,沒有解密何談加密呢,HASH的設計以沒法解爲目的的。而且若是咱們不附加一個隨機的salt值,HASH口令是很容易被字典攻擊入侵的)
(3),RSA算法
RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業中RSA被普遍使用,是現今使用最普遍的公鑰密碼算法。和其它加密過程同樣,對RSA來講分配公鑰的過程是很是重要的。分配公鑰的過程必須可以抵擋中間人攻擊。假設Eve交給Bob一個公鑰,並使Bob相信這是Alice的公鑰,而且她能夠截下Alice和Bob之間的信息傳遞,那麼她能夠將她本身的公鑰傳給Bob,Bob覺得這是Alice的公鑰。Eve能夠將全部Bob傳遞給Alice的消息截下來,將這個消息用她本身的密鑰解密,讀這個消息,而後將這個消息再用Alice的公鑰加密後傳給Alice。理論上Alice和Bob都不會發現Eve在偷聽他們的消息。今天人們通常用可靠的第三方機構簽發證書來防止這樣的攻擊。根據密鑰的使用方法,能夠將密碼分爲對稱密碼和公鑰密碼。
對稱密碼:加密和解密使用同一種密鑰的方式
公鑰密碼:加密和解密使用不一樣的密碼的方式,所以公鑰密碼一般也稱爲非對稱密碼。
RSA的加密過程可使用一個通式來表達
密文=明文^E mod N
也就是說RSA加密是對明文的E次方後除以N後求餘數的過程。
從通式可知,只要知道E和N任何人均可以進行RSA加密了,因此說E、N是RSA加密的密鑰,即E和N的組合就是公鑰,用(E,N)來表示公鑰。
RSA的解密一樣可使用一個通式來表達
明文=密文^D mod N
即對密文進行D次方後除以N的餘數就是明文,因此D和N的組合就是私鑰,私鑰=(D,N)編程語言

RSA常見攻擊方式
①、利用rsa加密流程求參數
②、分解N求私鑰
• 若是n的大小小於256bit,那麼咱們經過本地工具便可爆破成功。
• 若是n在768bit或者更高,能夠嘗試使用一些在線的n分解網站,這些網站會存儲一些已經分解成功的n,好比:http://factordb.com
• 若是有多個n,能夠嘗試用求公約數的方式來求解兩個N共同的素因子p,進而求解q
• 在p,q的取值差別過大,或者p,q的取值過於相近的時候,Format方法與Pollard rho方法均可以很快將n分解成功。此類分解方法有一個開源項目yafu將其自動化實現了,不論n的大小,只要p和q存在相差過大或者過近時,均可以經過yafu很快地分解成功。
③、共模攻擊
若是在RSA的使用中使用了相同的模n對相同的明文m進行了加密,那麼就能夠在不分解n的狀況下還原出明文m的值。
http://www.bystudent.com/?p=236 ide

密碼學在信息技術高速發展的當代具備很重要的意義,發展範圍廣且深。本文在寫做過程當中參考了許多資料,在此一併表示感謝。同時對於文章中涉及的知識只是粗略地簡要介紹,若有不當之處還請指正。網上對密碼學還有不少的資料,你們有興趣的能夠看一下。此外,文章中提到的各類解碼及解密方式均可在這個網站中找到相應的工具(http://ctf.ssleye.com/

如下列出對於密碼學學習頗有幫助的參考資料
密碼學 – 維基百科,自由的百科全書
https://zh.wikipedia.org/zh-m...
CTF中那些腦洞大開的編碼和加密 – DaBan – 博客園
https://www.cnblogs.com/daban...
代碼混淆的重要性
https://www.jdon.com/50072
密碼學起源——由「凱撒加密」到「一次一密」
https://baijiahao.baidu.com/s...
《現代密碼學》 – WittPeng – 博客園
https://www.cnblogs.com/WittP...
http://archive.keyllo.com/L-...—原理與協議.pdf
http://archive.keyllo.com/L-%...

80%94%E5%8E%9F%E7%90%86%E4%B8%8E%E5%8D%8F%E8%AE%AE.pdf

做者:CanMengBlog
來源:CSDN
原文:https://blog.csdn.net/weixin_... 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索