识别常见加密算法特征,包括Tea系列、AES、SHA1、BlowFish、SM4、RC4、DES、Base58、Base64和Hex编码等,并介绍其加密解密方法。
AI 摘要

Tea 系列

tea 系列加密可谓常见,甚至腾讯都在魔改 tea 使用到数据加密中。
Tea 系列加密都会有个叫 Delta 的东西,其常见值为 0x9E3779B9或0x61C88647 ,这个东西是可以被随意改变的,但是如果见得这串熟悉的数据,那就基本可以确定是 tea 系列加密了

Tea

普通 tea 可以被攻击 (别问怎么攻击,我也不知道)
每次加密处理 64 位数据,并且被分别两组

  • 明显的两行进行一堆位运算和异或后与明文相加减
  • Dword [2] 或者两个 Dword 进行操作,
  • 循环 32 次,但是这个次数是魔改的
  • 移位通常是左移 4,右移 5,这个也是可以魔改的
  • Key 是 4 个 32 位的值,与移位后数据相加

XTEA/TEAN

可以被攻击,特征与 TEA 相似,但还比 tea 多一个特征

  • 对 Delta 的和进行 & 3 来选取密钥

XXTEA

最厉害的 tea 类型加密,加密逻辑比较复杂,不像上面两个看两眼就能写解密代码,同时原字符串长度可以不是 4 的倍数了,特征和上面两个也很不一样

  • 128 位的 key (和上面两个一样)
  • 很多的 & 3 操作,会和 key 和 sum 进行运算
  • 嵌套循环
  • 可能会在同一行里出现左移 2 或 4,右移 3 或 5 (你就记 2345 吧)
  • rounds = 6 + 52/n, 会出现被除数 52 和 + 6

AES 加密

AES 为对称加密,同时也是分组加密,每组处理 128 位数据 (16 个字节),按密钥长度分为 AES128 (16 字节密钥 10 轮加密),AES192 (24 字节密钥 12 轮加密),AES256 (32 字节密钥 14 轮加密)。

  • 对明文长度进行除 16,或者右移 4 位
  • 左移右移 24/16/8 或者 & ff000000,&00ff0000,&0000ff00,&000000ff
  • 256 个元素的数组 (16x16 的 Sbox),如加密盒子 {0x63,0x7c,0x77,0x7b...} 解密盒子 {0x52,0x09,0x6a,0xd5...}, 可能出现换盒
  • 一行代码里对数组 4 个元素操作 (看起来很整齐,元素下标有顺序)
    加密可以魔改,subbytes 和 shiftrows 顺序调换是没关系的,但是 MixColums 顺序加密放最前面解密就要放最后面

逆盒算法:

new_s_box = [,,,,,]

new_contrary_sbox = [0]*256

for i in range(256):
   line = (new_s_box[i]&0xf0)>>4
   rol = new_s_box[i]&0xf
   new_contrary_sbox[(line*16)+rol] = i

print(new_contrary_sbox)

sha1

不安全的加密算法,不可逆

  • 一般有 5 个 IV 0x67452301;0xEFCDAB89;0x98BADCFE;0x10325476;0xC3D2E1F0 (前四个和 md 的 iv 相同)

BlowFish

两个盒用来加密

  • PBOX (18 个 32 位子密钥)
  • SBOX (4 组 8*32 位数组 Sbox [4][256])
  • 18 轮循环里套 4 轮循环,4 轮循环里套 256 (步长为 2) 轮循环

sm4 (国密)

分组加密,和 AES 特征很像。

  • 256 个元素的 SBOX
  • 128 位分组,密钥也是 128 位 (16 字节)
  • 移位 8,16,24 再 & ff
  • 一行代码里对数组 4 个元素操作 (看起来很整齐,元素下标有顺序)

rc4 加密

加密解密是同一套算法

  • 一个 256 位的 sbox
  • 进行变量数值交换操作 (swap)
  • 多次取余 256
  • 一个单独的异或操作

DES 加密

主要加密特征是一堆表

  • 64 位 (8 字符) 或 192 位 (24 字符) 的 key
  • 16 个元素的移位数组
  • 32 个元素的换位表
  • 48 个元素选位表
  • 56 个元素的选位数组
  • 64 个元素的置换表
  • 8x4x16 (512) 个元素的 sbox

base58

和普通 base 加密有很大不同,通过取模进行加密

  • 进行 %58 和 / 58 的操作

base64

普遍的加密

  • 有 '=' 或 61 存在
  • 64 个元素的可打印字符表
  • 加密可能有 & FC,&F0,&C0 操作
  • 解密可能有 & 0x30,&3C 操作

hex 编码

  • 进行 & 0xFFFFFFB5 | 8
  • +0x30 或 +'0' 或 + 48

CRC

  • &1
  • +0x30 或 +'0' 或 + 48
文章目录