wsxk / wsxk.github.io

MIT License
5 stars 0 forks source link

Re 常见加解密算法识别与加解密脚本 #188

Open wsxk opened 2 months ago

wsxk commented 2 months ago

https://wsxk.github.io/ctf_common_re/

  1. findcrypt3

  2. 古典加密算法

    1.1 caesar: 凯撒密码 1.2 vigenere

  3. base64

  4. TEA

  5. RC4

  6. AES

  7. MD5

  1. findcrypt3 https://github.com/polymorf/findcrypt-yara 好用的ida插件,帮助你快速识别算法。 当然了,有时候这个插件也不一定能帮助你找到这个问题,所以你需要知道一些常见算法的特征

  2. 古典加密算法 1.1 caesar: 凯撒密码

1.2 vigenere

  1. base64 如果在程序中出现了base64的索引表,大概率是用了base64,有些人可能会对base64的表进行部分更换,问题也不大。

  2. TEA 关于TEA算法的识别,如果程序中出现了固定常数0x9e377969/0x61c88647,那么很有可能是tea加密或其变种

  3. RC4 常见的流加密方式。识别方式为,初始代码中会对大小为256的表进行赋值和交换操作

  4. AES 对aes的识别首先需要知道AES加密的步骤。 首先是根据key生成轮密钥。

    1初始化:即 明文 和 密钥 作异或 前9轮:

    一.字节替换(SubBytes): 用s盒对 输入进行字节替换 二.行移位(ShiftRows):输入化成4 4矩阵,第i行循环左移i个字节(i=0,1,2,3) 三.列混淆(MixColumns):输入化成4 4矩阵,乘以固定的矩阵 四.轮密钥加(AddRoundKey):输入与轮密钥矩阵异或

    第10轮: 字节替换、行移位、轮密钥加

因此如果代码中发现了s盒(s盒可以参加仓库的aes的c代码),可以判断是aes加密,具体模式需要自己判断

  1. MD5 md5加密的加密步骤通常如下: md5_ctx sample md5_init(&sample) md5_update_string(&sample,plain) md5_final(digest,&sample)

在md5_init函数中,会出现初始化赋值0x67452301 0xefcdab89 0x98badcfe 0x10325476,即有可能是md5加密