CTF中常见的编码,代码混淆及加、解密
字数 1766 2025-08-18 11:38:32

CTF中常见的编码、代码混淆及加解密技术详解

一、编码与加密的基本概念

1. 编码与加密的区别

  • 编码:将数据信息转化成一种固定格式的编码信息,目的是为了方便不同系统间的信息传输,通过编码可以得到原始信息
  • 加密:为了保证信息传输的安全性,需要通过密钥才能还原原始信息

二、常见编码方式

1. ASCII编码

ASCII编码分为三部分:

  • ASCII非打印控制字符(0-31)
  • ASCII打印字符(32-126)
  • 扩展ASCII打印字符(127-255)

示例:

easy → 101 97 115 121

2. URL编码(百分号编码)

编码规则:

  • 在该字节ASCII码的16进制字符前面加%
  • 如空格字符(ASCII 32,16进制'20')→ %20

示例:

https://baike.baidu.com/item/ABC → 
%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实体编码

格式:

  • &#十进制数;&#x十六进制数;

示例:

easy → eas&#121

4. Base家族编码

Base16

  • 使用0-9和A-F共16个字符

Base32

  • 使用大写字母A-Z和数字2-7
  • 填充字符为"="

Base64

  • 使用大小写字母A-Za-z、数字0-9以及"+"、"/"
  • 填充字符为"="
  • 示例:easy → ZWFzeQ==

5. Unicode编码

四种编码方式:

源文本: The
&#x [Hex]: The
&# [Decimal]: The
\U [Hex]: \U0054\U0068\U0065
\U+ [Hex]: \U+0054\U+0068\U+0065

6. 莫尔斯电码

五种代码元素:

  • 点(·)
  • 划(-)
  • 点和划之间的停顿
  • 字符间短停顿
  • 词间中等停顿
  • 句子间长停顿

7. 其他编码

  • 敲击码(Tap code)

三、代码混淆技术

1. JSFuck

  • 仅使用6个字符[ ] ( ) ! +编写JavaScript代码
  • 示例网站:http://utf-8.jp/public/jsfuck.html

2. Brainfuck

  • 仅使用8种符号> < + - . , [ ]
  • 示例:
+++++ +++++ [->++ +++++ +++<] >++.+ +++++ ++..+ +++.< +++++ [->++ +++<] >++.+ +++++ +.+++ +++++ +++++ .<+++ [->-- -<]>- ----. ---.< +++++ +++++ +.<++ +[->+ ++<]> +++.<
  • 在线工具:https://www.splitbrain.org/services/ook

3. VBScript.encode

  • 针对ASP代码的加密混淆
  • 在线工具:http://adophper.com/encode.html

4. Jjencode

  • 将JS代码转换成只有符号的字符串
  • 示例网站:http://utf-8.jp/public/aaencode.html

四、加密技术

1. 古典加密算法

(1) 凯撒密码

  • 替换加密,字母按固定偏移量替换
  • 示例(偏移量3):
ABCDE → DEFGH

(2) 栅栏密码

  • 将明文分成N个一组,取每组第1个字连起来
  • 示例:
明文: The quick brown fox jumps over the lazy dog
分组: Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g
密文: Teucbonojmsvrhlzdghqikrwfxupoeteayo

(3) 培根密码

  • 每个字母被5字符序列替换(A/B组成)
  • 示例:
THE DOG → baabb aabbb aabaa aaabb abbba aabba

(4) 仿射密码

  • 加密函数:(ax + b) mod m
  • 要求gcd(a, m)=1,通常m=26

(5) 维吉尼亚密码

  • 多表替换密码,使用密钥循环加密
  • 在线解密:https://www.qqxiuzi.cn/bianma/weijiniyamima.php
  • 示例:
明文: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密钥: CULTURE
密文: VBP JOZGM VCHQE JQR UNGGW QPPK NYI NUKR XFK

2. 现代密码学

(1) 对称加密算法

  • 流加密:每次加密数据流的一位或一个字节(如RC4)
  • 分组加密:将明文分组加密(如DES, 3DES, AES)
    • 典型分组大小:64bit或128bit

(2) Hash算法

  • 常见算法:MD5、SHA-1
  • 特点:不可逆,固定长度输出
  • 用途:文件校验、数字签名、鉴权协议

(3) RSA算法

  • 非对称加密算法
  • 加密公式:密文 = 明文^E mod N
  • 解密公式:明文 = 密文^D mod N
  • 公钥:(E, N),私钥:(D, N)

RSA常见攻击方式

  1. 利用RSA加密流程求参数
  2. 分解N求私钥:
    • n<256bit:本地工具爆破
    • n≥768bit:在线分解网站(如http://factordb.com)
    • 多个n:求公约数找共同素因子
    • p,q差异大或相近:使用yafu工具
  3. 共模攻击:相同模n加密相同明文m

五、实用工具资源

  1. 综合解密工具网站:http://ctf.ssleye.com/
  2. 密码学参考资料:
    • 维基百科密码学:https://zh.wikipedia.org/zh-my/密码学
    • 现代密码学原理与协议:http://archive.keyllo.com/L-编程/Code-现代密码学—原理与协议.pdf

六、安全团队信息

  • Tide安全团队官网:http://www.TideSec.net
  • 专注于网络攻防、Web安全、移动终端、安全开发、IoT/工控安全等方向
CTF中常见的编码、代码混淆及加解密技术详解 一、编码与加密的基本概念 1. 编码与加密的区别 编码 :将数据信息转化成一种固定格式的编码信息,目的是为了方便不同系统间的信息传输,通过编码可以得到原始信息 加密 :为了保证信息传输的安全性,需要通过密钥才能还原原始信息 二、常见编码方式 1. ASCII编码 ASCII编码分为三部分: ASCII非打印控制字符(0-31) ASCII打印字符(32-126) 扩展ASCII打印字符(127-255) 示例: 2. URL编码(百分号编码) 编码规则: 在该字节ASCII码的16进制字符前面加% 如空格字符(ASCII 32,16进制'20')→ %20 示例: 3. HTML实体编码 格式: &#十进制数; 或 &#x十六进制数; 示例: 4. Base家族编码 Base16 使用0-9和A-F共16个字符 Base32 使用大写字母A-Z和数字2-7 填充字符为"=" Base64 使用大小写字母A-Za-z、数字0-9以及"+"、"/" 填充字符为"=" 示例: easy → ZWFzeQ== 5. Unicode编码 四种编码方式: 6. 莫尔斯电码 五种代码元素: 点(·) 划(-) 点和划之间的停顿 字符间短停顿 词间中等停顿 句子间长停顿 7. 其他编码 敲击码(Tap code) 三、代码混淆技术 1. JSFuck 仅使用6个字符 [ ] ( ) ! + 编写JavaScript代码 示例网站:http://utf-8.jp/public/jsfuck.html 2. Brainfuck 仅使用8种符号 > < + - . , [ ] 示例: 在线工具:https://www.splitbrain.org/services/ook 3. VBScript.encode 针对ASP代码的加密混淆 在线工具:http://adophper.com/encode.html 4. Jjencode 将JS代码转换成只有符号的字符串 示例网站:http://utf-8.jp/public/aaencode.html 四、加密技术 1. 古典加密算法 (1) 凯撒密码 替换加密,字母按固定偏移量替换 示例(偏移量3): (2) 栅栏密码 将明文分成N个一组,取每组第1个字连起来 示例: (3) 培根密码 每个字母被5字符序列替换(A/B组成) 示例: (4) 仿射密码 加密函数:(ax + b) mod m 要求gcd(a, m)=1,通常m=26 (5) 维吉尼亚密码 多表替换密码,使用密钥循环加密 在线解密:https://www.qqxiuzi.cn/bianma/weijiniyamima.php 示例: 2. 现代密码学 (1) 对称加密算法 流加密 :每次加密数据流的一位或一个字节(如RC4) 分组加密 :将明文分组加密(如DES, 3DES, AES) 典型分组大小:64bit或128bit (2) Hash算法 常见算法:MD5、SHA-1 特点:不可逆,固定长度输出 用途:文件校验、数字签名、鉴权协议 (3) RSA算法 非对称加密算法 加密公式:密文 = 明文^E mod N 解密公式:明文 = 密文^D mod N 公钥:(E, N),私钥:(D, N) RSA常见攻击方式 : 利用RSA加密流程求参数 分解N求私钥: n <256bit:本地工具爆破 n≥768bit:在线分解网站(如http://factordb.com) 多个n:求公约数找共同素因子 p,q差异大或相近:使用yafu工具 共模攻击:相同模n加密相同明文m 五、实用工具资源 综合解密工具网站:http://ctf.ssleye.com/ 密码学参考资料: 维基百科密码学:https://zh.wikipedia.org/zh-my/密码学 现代密码学原理与协议:http://archive.keyllo.com/L-编程/Code-现代密码学—原理与协议.pdf 六、安全团队信息 Tide安全团队官网:http://www.TideSec.net 专注于网络攻防、Web安全、移动终端、安全开发、IoT/工控安全等方向