# Reverse 常见的加密算法

在 reverse 的题目中,常常会对我们的输入以及内存数据进行加密,然后与已有的密文进行对比,从而判断我们的输入是否正确

# 基于特征值识别的加密算法:DES,AES,T 系列,md5,sm4

ida pro 插件

https://github.com/polymorf/findcrpyt-yara

# T 系列

# TEA,XTEA,XXTEA

有一个明确的特征值,然后对明文进行一些基本的算数运算

# AES—— 块加密算法

有一个固定的 256 字节的数组

sbox [256] 的数组(用于矩阵运算的密钥), 但是密钥不一定在程序中定义,可能是通过算法函数生成。这里也是出题人常用的出题思路 —— 修改 sbox。

AES 基于单个块的加密,一次处理 4 个字节的数据

# RC4

通过一个 key,生成一个 sbox,再由 sbox 生成一个 keystream,明文与 keystream 亦或得到明文

# MD5

有 4 个固定的 32bit 的值

# SM4

有一个固定的 256 字节的数组

# DES

有一个固定的 64 字节的数组

# 第三方库加密

调用第三方的库函数,对数据进行加密。这时候我们需要去寻找对应的加密函数的调用信息,dll,so 文件提供的 api。也有可能是使用的网络上开源的加密算法。

# 加密算法的模式

# 分组加密模式(1,2 常用)

# 1,电码本模式 ecb

将明文分成多个块,对每个块进行单独的加密,然后拼接成密文,解密的流程就是将加密快换成解密块

# 2,密码分组链接模式 CBC

将明文分组程多个明文块 plaintext,算法需要两个额外的值,initialization Vector (IV), 这是一个与明文块大小相同的数据块,用于与第一个 plaintext 进行亦或(初始化),得到中间的块,Block Cipher Encryption,然后 BCE 与 key 进行加密运算的带第一个密文块,Ciphertext。后面按照同样的流程,只不过不再是使用给出的 IV,而是将上一个密文块用作本次加密的 IV。

# 3,计算器模式 CTR

# 4,密码反馈模式 CFB

# 5,输出反馈模式 OFB

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

dreamcat WeChat Pay

WeChat Pay

dreamcat Alipay

Alipay

dreamcat PayPal

PayPal